* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.