Dear Brian,
We’re using following version of glibc on the our Embedded devices:
[root@Router8:~]# ldd --version
ldd (EGLIBC) 2.18
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
[root@Router8:~]# ldd /lib/libc-2.18.so
/lib/ld-linux.so.3 (0xb6fa0000)
Compiled by GNU CC version 4.8.1.
Compiled on a Linux 3.10.0 system on 2013-11-14.
Based on the strings output it is supporting this bunch of versions:
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE
Also I found this structure in the strings of glibc, which perhaps describe TZif or something related with tz files
__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (&zone_names[info->idx]) && __builtin_constant_p (__tzname[tp->tm_isdst]) && (__s1_len = strlen (&zone_names[info->idx]),
__s2_len = strlen (__tzname[tp->tm_isdst]), (!((size_t)(const void *)((&zone_names[info->idx]) + 1) - (size_t)(const void *)(&zone_names[info->idx]) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((__tzname[tp->tm_isdst]) + 1) - (size_t)(const void *)(__tzname[tp->tm_isdst])
== 1) || __s2_len >= 4)) ? __builtin_strcmp (&zone_names[info->idx], __tzname[tp->tm_isdst]) : (__builtin_constant_p (&zone_names[info->idx]) && ((size_t)(const void *)((&zone_names[info->idx]) + 1) - (size_t)(const void *)(&zone_names[info->idx]) == 1) &&
(__s1_len = strlen (&zone_names[info->idx]), __s1_len < 4) ? (__builtin_constant_p (__tzname[tp->tm_isdst]) && ((size_t)(const void *)((__tzname[tp->tm_isdst]) + 1) - (size_t)(const void *)(__tzname[tp->tm_isdst]) == 1) ? __builtin_strcmp (&zone_names[info->idx],
__tzname[tp->tm_isdst]) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (__tzname[tp->tm_isdst]); int __result = (((const unsigned char *) (const char *) (&zone_names[info->idx]))[0] - __s2[0]); if (__s1_len > 0 && __result
== 0) { __result = (((const unsigned char *) (const char *) (&zone_names[info->idx]))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (&zone_names[info->idx]))[2] - __s2[2]); if (__s1_len > 2 && __result
== 0) __result = (((const unsigned char *) (const char *) (&zone_names[info->idx]))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (__tzname[tp->tm_isdst]) && ((size_t)(const void *)((__tzname[tp->tm_isdst]) + 1) - (size_t)(const void *)(__tzname[tp->tm_isdst])
== 1) && (__s2_len = strlen (__tzname[tp->tm_isdst]), __s2_len < 4) ? (__builtin_constant_p (&zone_names[info->idx]) && ((size_t)(const void *)((&zone_names[info->idx]) + 1) - (size_t)(const void *)(&zone_names[info->idx]) == 1) ? __builtin_strcmp (&zone_names[info->idx],
__tzname[tp->tm_isdst]) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (&zone_names[info->idx]); int __result = (((const unsigned char *) (const char *) (__tzname[tp->tm_isdst]))[0] - __s2[0]); if (__s2_len > 0 &&
__result == 0) { __result = (((const unsigned char *) (const char *) (__tzname[tp->tm_isdst]))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (__tzname[tp->tm_isdst]))[2] - __s2[2]); if (__s2_len > 2
&& __result == 0) __result = (((const unsigned char *) (const char *) (__tzname[tp->tm_isdst]))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (&zone_names[info->idx], __tzname[tp->tm_isdst])))); }) == 0
From: Brian Inglis <Brian.Inglis@SystematicSw.ab.ca>
Sent: Tue, 2 Mar 2021 09:55:51 -0700
To: Evgheni Antropov
Cc: Time zone mailing list <tz@iana.org>
Subject: RE: [tz] Troubles with zone Asia/Gaza after tzdata2020b release
This may be less useful than knowing what libc code is being used on tzdata.
The Yocto/OpenEmbedded project seems to be a system for managing recipes to
apply thousands of patches to upstream components and tools on multiple host
platforms.
It appears from yocto docs and links, that depending on the yocto version, it
may be based on OpenEmbedded with some earlier trimmed embedded version of glibc
(perhaps 2.24 as of yocto 2.2) or musl (version?) libc, which may not have
tzcode changes merged to handle current tzdata formats.
Traditionally glibc/libc... use requires libc-bin which packages utilities
including zic, zdump built using system libc conventions and structures.
--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada
This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]
From: Evgheni Antropov
Sent: Tuesday, March 2, 2021 10:50
To: 'Paul Eggert' <eggert@cs.ucla.edu>; Tim Parenti <tim@timtimeonline.com>
Cc: Time zone mailing list <tz@iana.org>
Subject: RE: [tz] Troubles with zone Asia/Gaza after tzdata2020b release
Dear Paul and Tim,
Thank you for attention to this issue.
We're using tzdata on the our embedded devices with ARMv7 Processor rev 2 (v7l), which has vanilla kernel
[root@Router8:~]# uname -a
Linux Router8 4.4.19-gdb0b54cdad #49 PREEMPT Mon Sep 30 15:10:54 EEST 2019 armv7l GNU/Linux
Whole filesystem was compiled using Yocto Project 1.5 (poky-dora-10.0.0)
https://old.yoctoproject.org/releases-yocto-version/yocto-project-15-dora
Tzdata was compiling on Ubuntu 18.04 without any additional flags and cross-compilers, just simple make install
#!/bin/sh
make clean
#For compiling source extract tzdata and tzcode in one directory and run:
make TOPDIR=$(pwd)/binaries install
with additional changes related with requests from our several customers, which are not effecting on the this file.
In attachment you can see whole listing of compilation.
Best regards,
Evgheni Antropov
Software R&D Engineer
+373 22 404 665
www.addgrup.com
-----Original Message-----
From: Paul Eggert <eggert@cs.ucla.edu>
Sent: Tuesday, March 2, 2021 01:59
To: Tim Parenti <tim@timtimeonline.com>
Cc: Evgheni Antropov <Evgheni.Antropov@addgrup.com>; Time zone mailing list <tz@iana.org>
Subject: Re: [tz] Troubles with zone Asia/Gaza after tzdata2020b release
On 3/1/21 1:19 PM, Tim Parenti via tz wrote:
> Why is the system you're
> testing only looking at the (legacy) 32-bit data in the v1 data block,
> and not using the 64-bit data in the v2+ data block? Please let us
> know more about the system you're running
Another possibility is that Evgheni is using a stripped down library that ignores both data blocks, and uses only the TZ string at the end.
Such a library does not conform to Internet RFC 8536 but might be suitable for stripped down devices such as a router. For Asia/Gaza, the TZ string is TZ='EET-2EEST,M3.4.4/48,M10.4.4/49', where the "48" and "49" rely on the extension specified in Internet RFC
8536 section 3.3.1 and scheduled to appear in a future POSIX release. If Evgheni's library doesn't support that extension then that's the problem.
Yet another possibility is that Evgheni's library simply ignores the TZ string. '-b slim' relies on the TZ string even for current timestamps, whereas '-b fat' fills out entries through 2038. However, if this were the issue I expect it would happen for timezones
other than Asia/Gaza.
> Please let us know more
> about the system you're running
Yes, that'd be helpful.