* [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option
@ 2024-04-06 15:43 Chin Huat Ang
2024-04-06 21:37 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 6+ messages in thread
From: Chin Huat Ang @ 2024-04-06 15:43 UTC (permalink / raw)
To: buildroot; +Cc: Chin Huat Ang
uClibc introduced UCLIBC_USE_TIME64 config since v1.0.46 which enables
64-bit date and time handling on 32-bit targets to solve Y2038 issue.
As of v1.0.47, most 32-bit buildroot/uClibc targets appear to support
64-bit date/time.
Here we add the equivalent BR2_UCLIBC_USE_TIME64 package config which
is only meant for 32-bit target architectures. This config is disabled
by default as it has only been sanity tested. When disabled, uClibc's
Y2038 issue can be easily reproduced/observed on 32-bit targets:
# uname -a; date -s @2147483647; date +%s; sleep 1; date; date +%s
Linux buildroot 6.1.44 #1 SMP Sat Apr 6 19:05:05 +08 2024 armv7l GNU/Linux
Tue Jan 19 03:14:07 UTC 2038
2147483647
Fri Dec 13 20:45:52 UTC 1901
-2147483648
With BR2_UCLIBC_USE_TIME64=y, the Y2038 issue goes away:
# uname -a; date -s @2147483647; date +%s; sleep 1; date; date +%s
Linux buildroot 6.1.44 #1 SMP Sat Apr 6 17:43:14 +08 2024 armv7l GNU/Linux
Tue Jan 19 03:14:07 UTC 2038
2147483647
Tue Jan 19 03:14:08 UTC 2038
2147483648
The following 32-bit target architectures have been sanity tested:
- ARMv7-A Cortex-A9 on qemu_arm_vexpress_defconfig
- Generic MIPS32R2 on qemu_mips32r2_malta_defconfig
- i386/Pentium Pro on qemu_x86_defconfig
- Xtensa on qemu_xtensa_lx60_defconfig
Git shortlog of other changes (tags/v1.0.45..tags/v1.0.47):
Dmitry Chestnykh (23):
Fix redefinition of _GNU_SOURCE.
ld.so: Add support of DT_RELR relocation format.
libc: Fix dns-related build issues.
Add extra `-shared` to link.so command.
Fix broken compilation of uClibc-ng.
Rename `reloc_addr` to suppress `-Wshadow` warning.
Introduce time64 support.
xtensa: Add time64 support.
ldso: Remove unneeded semicolons.
Remove unneeded comparisons.
Add support for using time64 on big-endian machines.
Add time64 support for PowerPC.
Refactor `ts32_struct` and `TO_ITS64_P`.
Add time64 support for MIPS32.
Fix *stat() and *stat64() when the time is beyond year 2038.
ldso: Use statx() when time64 is enabled.
libc: always redirect *stat() family to statx() with time64 enabled.
libc: Pass 64bit-only time structures to syscalls.
Add time64 support to OpenRISC.
Add time64 support for sparc.
libc: restore correct definition of semid_ds struct.
libc: Remove 32bit timespec structures everywhere.
Add time64 support to ARC.
Frank Mehnert (1):
ldso: add null-pointer check
Marcus Haehnel (4):
Remove duplicate semicolons
libm/w_j0f.c: Call correct ieee754 function
libpthread: Remove no longer valid attribute_unused
libpthread/linuxthreads: add missing string.h include in condvar.c
Marius Melzer (2):
Fix -Wgnu-designator clang warnings
Fix -Wnon-literal-null-conversion clang warning
Paul Cercueil (3):
sys/stat.h: Make S_ISSOCK() available if __USE_XOPEN2K
sys/stat.h: Make fchmod() available if __USE_XOPEN2K
features.h: Rework _DEFAULT_SOURCE
Sven Linker (3):
Avoid fall-through if file matching temporary name exists
libc: Fix some unused parameter warnings
Replace null subtraction with cast
Waldemar Brodkorb (25):
c6x: fix duplicate include
add newline at end of file
fix c6x toolchain compile
remove symlink
riscv32: decouple from riscv64
riscv32: add ldso support, enable time64.
riscv32: add basic support for NPTL
microblaze: enable time64
superh: enable time64
m68k: enable time64
x86: enable time64
update MAINTAINERS
bump version for 1.0.46 release
add reallocarray from musl
add explicit_bzero from musl
riscv64: sync with glibc, fix all TLS errors in uClibc-ng-test
riscv64: page size is 4096, reported by sorear
riscv64: sync with glibc clone.S
riscv64: clone behaves like on aarch64, fixes tst-basic3, reported by sorear
riscv64: add atomic.h, fixes tst-cond16, suggested by sorear
riscv32: sync with riscv64
riscv64: enable CTORS, fixes C++ applications, found by sorear
riscv: fix pread64/pwrite64 users like git, suggested by sorear
riscv: add __UCLIBC_ABORT_INSTRUCTION__, suggested by sorear
bump version for 1.0.47 release
Signed-off-by: Chin Huat Ang <chinhuat@gmail.com>
---
package/uclibc/Config.in | 9 +++++++++
package/uclibc/uclibc.hash | 4 ++--
package/uclibc/uclibc.mk | 14 +++++++++++++-
3 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/package/uclibc/Config.in b/package/uclibc/Config.in
index 2555487f06..475bca14f0 100644
--- a/package/uclibc/Config.in
+++ b/package/uclibc/Config.in
@@ -120,6 +120,15 @@ config BR2_UCLIBC_INSTALL_UTILS
You can save ~32 KiB in target space by disabling them since
they're normally not needed.
+config BR2_UCLIBC_USE_TIME64
+ bool "Use 64-bit date and time functions (Y2038-ready)"
+ depends on !BR2_ARCH_IS_64
+ default n
+ help
+ Enabling this option for 32-bit targets will configure
+ uClibc with config UCLIBC_USE_TIME64=y which enables 64-bit
+ date and time handling to support date/time beyond Y2038.
+
# Mapping from the Buildroot architecture configuration options to the
# uClibc architecture names.
config BR2_UCLIBC_TARGET_ARCH
diff --git a/package/uclibc/uclibc.hash b/package/uclibc/uclibc.hash
index ae1f3178d9..a10ceab54c 100644
--- a/package/uclibc/uclibc.hash
+++ b/package/uclibc/uclibc.hash
@@ -1,4 +1,4 @@
-# From https://downloads.uclibc-ng.org/releases/1.0.44/uClibc-ng-1.0.45.tar.xz.sha256
-sha256 c2f4c6b6e19d7c9c226992a3746efd7ab932040463c15ee0bc8f4132b5777ac4 uClibc-ng-1.0.45.tar.xz
+# From https://downloads.uclibc-ng.org/releases/1.0.47/uClibc-ng-1.0.47.tar.xz.sha256
+sha256 29a4d684a06da344ee3ee09acc2ca7649d592ae3ff848f698145c46def05efcb uClibc-ng-1.0.47.tar.xz
# Locally calculated
sha256 6095e9ffa777dd22839f7801aa845b31c9ed07f3d6bf8a26dc5d2dec8ccc0ef3 COPYING.LIB
diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
index 88623840bf..3ca541bcda 100644
--- a/package/uclibc/uclibc.mk
+++ b/package/uclibc/uclibc.mk
@@ -4,7 +4,7 @@
#
################################################################################
-UCLIBC_VERSION = 1.0.45
+UCLIBC_VERSION = 1.0.47
UCLIBC_SOURCE = uClibc-ng-$(UCLIBC_VERSION).tar.xz
UCLIBC_SITE = https://downloads.uclibc-ng.org/releases/$(UCLIBC_VERSION)
UCLIBC_LICENSE = LGPL-2.1+
@@ -371,6 +371,17 @@ else
UCLIBC_SHARED_LIBS_CONFIG = $(call KCONFIG_ENABLE_OPT,HAVE_SHARED)
endif
+#
+# time64
+#
+
+ifeq ($(BR2_UCLIBC_USE_TIME64),y)
+UCLIBC_TIME64_CONFIG = $(call KCONFIG_ENABLE_OPT,UCLIBC_USE_TIME64)
+else
+UCLIBC_TIME64_CONFIG = $(call KCONFIG_DISABLE_OPT,UCLIBC_USE_TIME64)
+endif
+
+
#
# Commands
#
@@ -423,6 +434,7 @@ define UCLIBC_KCONFIG_FIXUP_CMDS
$(UCLIBC_LOCALE_CONFIG)
$(UCLIBC_WCHAR_CONFIG)
$(UCLIBC_SHARED_LIBS_CONFIG)
+ $(UCLIBC_TIME64_CONFIG)
endef
define UCLIBC_BUILD_CMDS
--
2.34.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option
2024-04-06 15:43 [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option Chin Huat Ang
@ 2024-04-06 21:37 ` Thomas Petazzoni via buildroot
2024-04-07 17:47 ` Chin Huat Ang
0 siblings, 1 reply; 6+ messages in thread
From: Thomas Petazzoni via buildroot @ 2024-04-06 21:37 UTC (permalink / raw)
To: Chin Huat Ang; +Cc: buildroot
Hello Chin,
On Sat, 6 Apr 2024 23:43:08 +0800
Chin Huat Ang <chinhuat@gmail.com> wrote:
> +config BR2_UCLIBC_USE_TIME64
> + bool "Use 64-bit date and time functions (Y2038-ready)"
> + depends on !BR2_ARCH_IS_64
> + default n
> + help
> + Enabling this option for 32-bit targets will configure
> + uClibc with config UCLIBC_USE_TIME64=y which enables 64-bit
> + date and time handling to support date/time beyond Y2038.
Thanks a lot for your patch!
I don't think we should add a BR2_UCLIBC_USE_TIME64 option. Instead,
there is already a BR2_TIME_BITS_64, which enables 64-bit time_t for
glibc. It simply needs to be extended to also allow enabling 64-bit
time_t in uClibc.
Also, can I suggest that you split your change into two commits? One
bumping uClibc to 1.0.47, and one making it possible to configure it
with 64-bit time_t?
Thanks a lot!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option
2024-04-06 21:37 ` Thomas Petazzoni via buildroot
@ 2024-04-07 17:47 ` Chin Huat Ang
2024-04-07 19:30 ` Arnout Vandecappelle via buildroot
0 siblings, 1 reply; 6+ messages in thread
From: Chin Huat Ang @ 2024-04-07 17:47 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: buildroot, Chin Huat Ang
Hi Thomas,
> I don't think we should add a BR2_UCLIBC_USE_TIME64 option. Instead,
> there is already a BR2_TIME_BITS_64, which enables 64-bit time_t for
> glibc. It simply needs to be extended to also allow enabling 64-bit
> time_t in uClibc.
I contemplated reusing BR2_TIME_BITS_64 but I noticed it has a
widespread impact of causing many packages to be configured with
-D_TIME_BITS=64 due to these in package/Makefile.in:
ifeq ($(BR2_TIME_BITS_64),y)
TARGET_CPPFLAGS += -D_TIME_BITS=64
endif
TARGET_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) $(TARGET_HARDENED)
TARGET_CXXFLAGS = $(TARGET_CFLAGS)
...
TARGET_CONFIGURE_OPTS = \
...
CPPFLAGS="$(TARGET_CPPFLAGS)" \
CFLAGS="$(TARGET_CFLAGS)" \
CXXFLAGS="$(TARGET_CXXFLAGS)" \
...
I wasn't sure if this is the right thing to do but at the very least
whenever uClib is used, my intention was to only configure itself with
UCLIBC_USE_TIME64.
Assuming if BR2_TIME_BITS_64 applies to both glibc and uClibc, should
-D_TIME_BITS=64 only be appended to glibc GLIBC_EXTRA_CFLAGS?
> Also, can I suggest that you split your change into two commits? One
> bumping uClibc to 1.0.47, and one making it possible to configure it
> with 64-bit time_t?
That's a good idea, I guess I was too focused on trying out uClib's
Y2038 solution. I'll split the patch up as you suggested.
--Chin Huat
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option
2024-04-07 17:47 ` Chin Huat Ang
@ 2024-04-07 19:30 ` Arnout Vandecappelle via buildroot
2024-04-07 21:11 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 6+ messages in thread
From: Arnout Vandecappelle via buildroot @ 2024-04-07 19:30 UTC (permalink / raw)
To: Chin Huat Ang, Thomas Petazzoni; +Cc: buildroot
On 07/04/2024 19:47, Chin Huat Ang wrote:
> Hi Thomas,
>
>> I don't think we should add a BR2_UCLIBC_USE_TIME64 option. Instead,
>> there is already a BR2_TIME_BITS_64, which enables 64-bit time_t for
>> glibc. It simply needs to be extended to also allow enabling 64-bit
>> time_t in uClibc.
>
> I contemplated reusing BR2_TIME_BITS_64 but I noticed it has a
> widespread impact of causing many packages to be configured with
> -D_TIME_BITS=64 due to these in package/Makefile.in:
>
> ifeq ($(BR2_TIME_BITS_64),y)
> TARGET_CPPFLAGS += -D_TIME_BITS=64
> endif
> TARGET_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) $(TARGET_HARDENED)
> TARGET_CXXFLAGS = $(TARGET_CFLAGS)
> ...
> TARGET_CONFIGURE_OPTS = \
> ...
> CPPFLAGS="$(TARGET_CPPFLAGS)" \
> CFLAGS="$(TARGET_CFLAGS)" \
> CXXFLAGS="$(TARGET_CXXFLAGS)" \
> ...
>
> I wasn't sure if this is the right thing to do but at the very least
> whenever uClib is used, my intention was to only configure itself with
> UCLIBC_USE_TIME64.
>
> Assuming if BR2_TIME_BITS_64 applies to both glibc and uClibc, should
> -D_TIME_BITS=64 only be appended to glibc GLIBC_EXTRA_CFLAGS?
IMHO the question is if uClibc acts like musl (i.e. unconditionally enable
64-bit time, which breaks binaries that were compiled with 32-bit time) or like
glibc (i.e. the compiled library supports both 32-bit and 64-bit time, and
applications use the one or other version depending on _TIME_BITS).
I _think_ that uClibc acts like musl. In that case, passing -D_TIME_BITS=64
doesn't make any sense. And therefore, having the option at uClibc level makes
more sense. However, I don't think it's very useful to have this configuration
knob in Buildroot's config. What I would do instead is to unconditionally change
our bundled uClibc config to enable 64-bit time, and let people provide their
own config if for some reason they don't want 64-bit time.
Note that we currently don't have anything like
BR2_TOOLCHAIN_HAS_TIME_BITS_64, i.e. a symbol that says if libc supports 64-bit
time or not. I don't actually think it's useful - I guess that if packages need
to know this, they'll have a configure script to test for it. But _if_ we would
have such an option, _then_ a Buildroot config option for uClibc would make
sense (because you have to be able to know at Buildroot config level if uClibc
config has it enabled or not).
Regards,
Arnout
>
>> Also, can I suggest that you split your change into two commits? One
>> bumping uClibc to 1.0.47, and one making it possible to configure it
>> with 64-bit time_t?
>
> That's a good idea, I guess I was too focused on trying out uClib's
> Y2038 solution. I'll split the patch up as you suggested.
>
> --Chin Huat
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option
2024-04-07 19:30 ` Arnout Vandecappelle via buildroot
@ 2024-04-07 21:11 ` Thomas Petazzoni via buildroot
2024-04-09 12:23 ` Arnout Vandecappelle via buildroot
0 siblings, 1 reply; 6+ messages in thread
From: Thomas Petazzoni via buildroot @ 2024-04-07 21:11 UTC (permalink / raw)
To: Arnout Vandecappelle; +Cc: buildroot, Chin Huat Ang
On Sun, 7 Apr 2024 21:30:09 +0200
Arnout Vandecappelle <arnout@mind.be> wrote:
> IMHO the question is if uClibc acts like musl (i.e. unconditionally enable
> 64-bit time, which breaks binaries that were compiled with 32-bit time) or like
> glibc (i.e. the compiled library supports both 32-bit and 64-bit time, and
> applications use the one or other version depending on _TIME_BITS).
>
> I _think_ that uClibc acts like musl. In that case, passing -D_TIME_BITS=64
> doesn't make any sense. And therefore, having the option at uClibc level makes
> more sense. However, I don't think it's very useful to have this configuration
> knob in Buildroot's config. What I would do instead is to unconditionally change
> our bundled uClibc config to enable 64-bit time, and let people provide their
> own config if for some reason they don't want 64-bit time.
If we go this way, then we should also do it for glibc, and drop
BR2_TIME_BITS_64.
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option
2024-04-07 21:11 ` Thomas Petazzoni via buildroot
@ 2024-04-09 12:23 ` Arnout Vandecappelle via buildroot
0 siblings, 0 replies; 6+ messages in thread
From: Arnout Vandecappelle via buildroot @ 2024-04-09 12:23 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: buildroot, Chin Huat Ang
On 07/04/2024 23:11, Thomas Petazzoni wrote:
> On Sun, 7 Apr 2024 21:30:09 +0200
> Arnout Vandecappelle <arnout@mind.be> wrote:
>
>> IMHO the question is if uClibc acts like musl (i.e. unconditionally enable
>> 64-bit time, which breaks binaries that were compiled with 32-bit time) or like
>> glibc (i.e. the compiled library supports both 32-bit and 64-bit time, and
>> applications use the one or other version depending on _TIME_BITS).
>>
>> I _think_ that uClibc acts like musl. In that case, passing -D_TIME_BITS=64
>> doesn't make any sense. And therefore, having the option at uClibc level makes
>> more sense. However, I don't think it's very useful to have this configuration
>> knob in Buildroot's config. What I would do instead is to unconditionally change
>> our bundled uClibc config to enable 64-bit time, and let people provide their
>> own config if for some reason they don't want 64-bit time.
>
> If we go this way, then we should also do it for glibc, and drop
> BR2_TIME_BITS_64.
glibc is different though: it always supports both 32-bit and 64-bit time, and
you have to supply the -D_TIME_BITS=64 explicitly. You can't force glibc to
always have 64-bit time, individual packages will always be able to override it.
On the other hand, in uClibc, it _is_ still possible for a user to configure
the library with 32-bit time (only). We just default to 64-bit time.
We could unconditionally enable -D_TIME_BITS=64, similar to how we do it for
largefile. But that's pretty much independent of what we do with uClibc.
Regards,
Arnout
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-04-09 12:23 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-06 15:43 [Buildroot] [PATCH] package/uclibc: bump to version 1.0.47, add Y2038 config option Chin Huat Ang
2024-04-06 21:37 ` Thomas Petazzoni via buildroot
2024-04-07 17:47 ` Chin Huat Ang
2024-04-07 19:30 ` Arnout Vandecappelle via buildroot
2024-04-07 21:11 ` Thomas Petazzoni via buildroot
2024-04-09 12:23 ` Arnout Vandecappelle via buildroot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox