From 3a3d07f625aee7b87ea1026526b756447c357652 Mon Sep 17 00:00:00 2001 From: Peter Tatrai Date: Wed, 9 Sep 2026 15:43:11 +0200 Subject: [PATCH] time64: enable 64-bit time/file-offset flags for 32-bit nativesdk When SDKMACHINE is set to i686 or i586, nativesdk binaries are compiled as 32-bit. Without -D_TIME_BITS=64 and -D_FILE_OFFSET_BITS=64, stat() and time-related syscalls use 32-bit types, causing EOVERFLOW on filesystems with large inode numbers (e.g. container overlay filesystems) and Y2038 issues. Add SDK_CC_ARCH appends for class-nativesdk:i686 and class-nativesdk:i586 using GLIBC_64BIT_TIME_FLAGS, mirroring how target architectures are handled. The existing GLIBC_64BIT_TIME_FLAGS:pn-glibc override only matches the target recipe, not the class extended nativesdk-glibc, so an additional pn-nativesdk-glibc override is needed here. This is required on scarthgap but not on master/wrynose, because scarthgap carries glibc 2.39, which predates glibc commit a4ed0471d717 ("Always define __USE_TIME_BITS64 when 64 bit time_t is used"). In 2.39 the header redirect turns sigtimedwait into an alias of __sigtimedwait64, which then collides with glibc's own weak_alias() and fails to assemble: Error: symbol '__sigtimedwait64' is already defined Also exclude nativesdk-mingw-w64-runtime. The MinGW runtime provides the Windows CRT rather than glibc, and _FILE_OFFSET_BITS=64 changes its stat declarations. That causes conflicting declarations for wstat when building the CRT itself. (From OE-Core rev: 07ca97baad7b182849ee50f0bd629b68dc9f53b3) Signed-off-by: Peter Tatrai Signed-off-by: Richard Purdie (cherry picked from commit d9f62a45555673842021d5746437e66c40d3f3cc) Signed-off-by: Peter Tatrai Signed-off-by: Yoann Congal Signed-off-by: Paul Barker --- meta/conf/distro/include/time64.inc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/meta/conf/distro/include/time64.inc b/meta/conf/distro/include/time64.inc index dd29105db4..c2a4feab24 100644 --- a/meta/conf/distro/include/time64.inc +++ b/meta/conf/distro/include/time64.inc @@ -32,6 +32,23 @@ GLIBC_64BIT_TIME_FLAGS:pn-pulseaudio = "" # libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp GLIBC_64BIT_TIME_FLAGS:pn-gcc-sanitizers = "" +# Apply the same flags to nativesdk packages when building for a 32-bit SDK +# host (i686, i586). +SDK_CC_ARCH:append:class-nativesdk:i686 = "${GLIBC_64BIT_TIME_FLAGS}" +SDK_CC_ARCH:append:class-nativesdk:i586 = "${GLIBC_64BIT_TIME_FLAGS}" + +# Recipes which implement or wrap the libc APIs themselves must not be built +# with these flags, as the redirections glibc performs would collide with the +# symbols the recipes define (e.g. "symbol '__sigtimedwait64' is already +# defined" in nativesdk-glibc, or duplicate creat64/fopen64 in +# nativesdk-pseudo). The pn- overrides above only match the target recipes, so +# the class extended variants have to be listed separately. +GLIBC_64BIT_TIME_FLAGS:pn-nativesdk-glibc = "" +GLIBC_64BIT_TIME_FLAGS:pn-nativesdk-pseudo = "" +# The MinGW runtime provides the Windows CRT rather than glibc. These flags +# change its stat declarations and cause conflicting types in the CRT sources. +GLIBC_64BIT_TIME_FLAGS:pn-nativesdk-mingw-w64-runtime = "" + # Caused by the flags exceptions above INSANE_SKIP:append:pn-gcc-sanitizers = " 32bit-time" INSANE_SKIP:append:pn-glibc = " 32bit-time"