mirror of
https://git.yoctoproject.org/poky
synced 2026-10-16 05:17:02 +00:00
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 <peter.tatrai.ext@siemens.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit d9f62a45555673842021d5746437e66c40d3f3cc)
Signed-off-by: Peter Tatrai <peter.tatrai.ext@siemens.com>
Signed-off-by: Yoann Congal <yoann.congal@smile.fr>
Signed-off-by: Paul Barker <paul@pbarker.dev>
This commit is contained in:
1 parent
26e63ba6f9
commit
3a3d07f625
1 file changed
+17
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user