Message ID | 20220726121821.3814251-1-Martin.Jansa@gmail.com |
---|---|
State | New |
Headers | show |
Series | glibc: revert one upstream change to work around broken DEBUG_BUILD build | expand |
On Tue, 2022-07-26 at 14:18 +0200, Martin Jansa wrote: > * work around for build failure with DEBUG_BUILD: > http://errors.yoctoproject.org/Errors/Details/661468/ > > TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/11.3.0/ld.bfd: > TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/build-x86_64-oe-linux/libc.a(libc-tls.o): > in function `__libc_setup_tls': > /usr/src/debug/glibc/2.35-r0/git/csu/libc-tls.c:202: undefined reference to `_startup_fatal_not_constant' > > introduced in: > https://git.openembedded.org/openembedded-core/commit/?id=50ca0eea5424c89c9b39cf69d8bd73fd65f06e95 > with: > https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a2a6bce7d7e52c1c34369a7da62c501cc350bc31 > > Temporary reverting as discussed in: > https://lists.openembedded.org/g/openembedded-core/message/168463 > (it's also reverted in buildroot now with: https://lore.kernel.org/buildroot/20220720213853.1A27184110@busybox.osuosl.org/t/) > > Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> > --- > ...lement-a-useful-version-of-_startup_.patch | 128 ++++++++++++++++++ > meta/recipes-core/glibc/glibc_2.35.bb | 2 + > 2 files changed, 130 insertions(+) > create mode 100644 meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch > > diff --git a/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch > new file mode 100644 > index 0000000000..2421a63605 > --- /dev/null > +++ b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch > @@ -0,0 +1,128 @@ > +From 6b8959add09e425df262bf9178b39ca35bc4003c Mon Sep 17 00:00:00 2001 > +From: Martin Jansa <Martin.Jansa@gmail.com> > +Date: Sun, 24 Jul 2022 19:41:41 +0200 > +Subject: [PATCH] Revert "Linux: Implement a useful version of _startup_fatal" > + > +This reverts commit 2d05ba7f8ef979947e910a37ae8115a816eb4d08. > +Upstream-Status: Inappropriate [temporary work around] > + > +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Khem and I talked briefly about this. The upstream glibc community doesn't support building glibc with -O1, they require it always be -O2 or higher. I don't really want to be stuck carrying a glibc patch for something like this we can't resolve. Is there an underlying issue that should be fixed here or is this really the case that this is something upstream simply don't expect to work? Cheers, Richard
FWIW: I was checking if this is still reproducible with 2.36 from khem's branch: https://github.com/YoeDistro/openembedded-core/commit/eec0967b92973b8ed5b2fe98ac652fe0da21493b and with DEBUG_BUILD it failed elsewhere now: http://errors.yoctoproject.org/Errors/Details/663898/ | /OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/glibc/2.36-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/12.1.0/ld.bfd: /OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/glibc/2.36-r0/build-x86_64-oe-linux/elf/librtld.os: in function `_dl_load_cache_lookup': | /usr/src/debug/glibc/2.36-r0/git/elf/dl-cache.c:513: undefined reference to `strcpy' On Wed, Jul 27, 2022 at 1:57 PM Martin Jansa via lists.openembedded.org <Martin.Jansa=gmail.com@lists.openembedded.org> wrote: > * work around for build failure with DEBUG_BUILD: > http://errors.yoctoproject.org/Errors/Details/661468/ > > > TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/11.3.0/ld.bfd: > > TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/build-x86_64-oe-linux/libc.a(libc-tls.o): > in function `__libc_setup_tls': > /usr/src/debug/glibc/2.35-r0/git/csu/libc-tls.c:202: undefined reference > to `_startup_fatal_not_constant' > > introduced in: > > https://git.openembedded.org/openembedded-core/commit/?id=50ca0eea5424c89c9b39cf69d8bd73fd65f06e95 > with: > > https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a2a6bce7d7e52c1c34369a7da62c501cc350bc31 > > Temporary reverting as discussed in: > https://lists.openembedded.org/g/openembedded-core/message/168463 > (it's also reverted in buildroot now with: > https://lore.kernel.org/buildroot/20220720213853.1A27184110@busybox.osuosl.org/t/ > ) > > instead of revert we can use -fexpensive-optimizations which > will optimize-out the symbol, but that works only with -O1 and > not -Og used by DEBUG_BUILD > > upstream report: > https://sourceware.org/bugzilla/show_bug.cgi?id=29249 > > Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> > --- > > v2: mention -fexpensive-optimizations and add link to upstream > bug report > > ...lement-a-useful-version-of-_startup_.patch | 128 ++++++++++++++++++ > meta/recipes-core/glibc/glibc_2.35.bb | 2 + > 2 files changed, 130 insertions(+) > create mode 100644 > meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch > > diff --git > a/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch > b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch > new file mode 100644 > index 0000000000..2421a63605 > --- /dev/null > +++ > b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch > @@ -0,0 +1,128 @@ > +From 6b8959add09e425df262bf9178b39ca35bc4003c Mon Sep 17 00:00:00 2001 > +From: Martin Jansa <Martin.Jansa@gmail.com> > +Date: Sun, 24 Jul 2022 19:41:41 +0200 > +Subject: [PATCH] Revert "Linux: Implement a useful version of > _startup_fatal" > + > +This reverts commit 2d05ba7f8ef979947e910a37ae8115a816eb4d08. > +Upstream-Status: Inappropriate [temporary work around] > + > +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> > + > +--- > + sysdeps/unix/sysv/linux/i386/startup.h | 23 ++++++++++++--- > + sysdeps/unix/sysv/linux/ia64/startup.h | 22 --------------- > + sysdeps/unix/sysv/linux/startup.h | 39 -------------------------- > + 3 files changed, 19 insertions(+), 65 deletions(-) > + delete mode 100644 sysdeps/unix/sysv/linux/ia64/startup.h > + delete mode 100644 sysdeps/unix/sysv/linux/startup.h > + > +diff --git a/sysdeps/unix/sysv/linux/i386/startup.h > b/sysdeps/unix/sysv/linux/i386/startup.h > +index 213805d7d2..67c9310f3a 100644 > +--- a/sysdeps/unix/sysv/linux/i386/startup.h > ++++ b/sysdeps/unix/sysv/linux/i386/startup.h > +@@ -1,5 +1,5 @@ > + /* Linux/i386 definitions of functions used by static libc main startup. > +- Copyright (C) 2022 Free Software Foundation, Inc. > ++ Copyright (C) 2017-2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > +@@ -16,7 +16,22 @@ > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +-/* Can't use "call *%gs:SYSINFO_OFFSET" during startup. */ > +-#define I386_USE_SYSENTER 0 > ++#if BUILD_PIE_DEFAULT > ++/* Can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE. */ > ++# define I386_USE_SYSENTER 0 > + > +-#include_next <startup.h> > ++# include <sysdep.h> > ++# include <abort-instr.h> > ++ > ++__attribute__ ((__noreturn__)) > ++static inline void > ++_startup_fatal (const char *message __attribute__ ((unused))) > ++{ > ++ /* This is only called very early during startup in static PIE. > ++ FIXME: How can it be improved? */ > ++ ABORT_INSTRUCTION; > ++ __builtin_unreachable (); > ++} > ++#else > ++# include_next <startup.h> > ++#endif > +diff --git a/sysdeps/unix/sysv/linux/ia64/startup.h > b/sysdeps/unix/sysv/linux/ia64/startup.h > +deleted file mode 100644 > +index 77f29f15a2..0000000000 > +--- a/sysdeps/unix/sysv/linux/ia64/startup.h > ++++ /dev/null > +@@ -1,22 +0,0 @@ > +-/* Linux/ia64 definitions of functions used by static libc main startup. > +- Copyright (C) 2022 Free Software Foundation, Inc. > +- This file is part of the GNU C Library. > +- > +- The GNU C Library is free software; you can redistribute it and/or > +- modify it under the terms of the GNU Lesser General Public > +- License as published by the Free Software Foundation; either > +- version 2.1 of the License, or (at your option) any later version. > +- > +- The GNU C Library is distributed in the hope that it will be useful, > +- but WITHOUT ANY WARRANTY; without even the implied warranty of > +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > +- Lesser General Public License for more details. > +- > +- You should have received a copy of the GNU Lesser General Public > +- License along with the GNU C Library; if not, see > +- <https://www.gnu.org/licenses/>. */ > +- > +-/* This code is used before the TCB is set up. */ > +-#define IA64_USE_NEW_STUB 0 > +- > +-#include_next <startup.h> > +diff --git a/sysdeps/unix/sysv/linux/startup.h > b/sysdeps/unix/sysv/linux/startup.h > +deleted file mode 100644 > +index 39859b404a..0000000000 > +--- a/sysdeps/unix/sysv/linux/startup.h > ++++ /dev/null > +@@ -1,39 +0,0 @@ > +-/* Linux definitions of functions used by static libc main startup. > +- Copyright (C) 2017-2022 Free Software Foundation, Inc. > +- This file is part of the GNU C Library. > +- > +- The GNU C Library is free software; you can redistribute it and/or > +- modify it under the terms of the GNU Lesser General Public > +- License as published by the Free Software Foundation; either > +- version 2.1 of the License, or (at your option) any later version. > +- > +- The GNU C Library is distributed in the hope that it will be useful, > +- but WITHOUT ANY WARRANTY; without even the implied warranty of > +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > +- Lesser General Public License for more details. > +- > +- You should have received a copy of the GNU Lesser General Public > +- License along with the GNU C Library; if not, see > +- <https://www.gnu.org/licenses/>. */ > +- > +-#ifdef SHARED > +-# include_next <startup.h> > +-#else > +-# include <sysdep.h> > +- > +-/* Avoid a run-time invocation of strlen. */ > +-#define _startup_fatal(message) \ > +- do \ > +- { \ > +- size_t __message_length = __builtin_strlen (message); \ > +- if (! __builtin_constant_p (__message_length)) \ > +- { \ > +- extern void _startup_fatal_not_constant (void); \ > +- _startup_fatal_not_constant (); \ > +- } \ > +- INTERNAL_SYSCALL_CALL (write, STDERR_FILENO, (message), \ > +- __message_length); \ > +- INTERNAL_SYSCALL_CALL (exit_group, 127); \ > +- } \ > +- while (0) > +-#endif /* !SHARED */ > diff --git a/meta/recipes-core/glibc/glibc_2.35.bb > b/meta/recipes-core/glibc/glibc_2.35.bb > index 96fe39c548..df847e76bf 100644 > --- a/meta/recipes-core/glibc/glibc_2.35.bb > +++ b/meta/recipes-core/glibc/glibc_2.35.bb > @@ -48,6 +48,8 @@ SRC_URI = > "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ > > file://0022-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch \ > > file://0023-timezone-Make-shell-interpreter-overridable-in-tzsel.patch \ > > file://0024-fix-create-thread-failed-in-unprivileged-process-BZ-.patch \ > + \ > + > file://0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch \ > " > S = "${WORKDIR}/git" > B = "${WORKDIR}/build-${TARGET_SYS}" > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#168558): > https://lists.openembedded.org/g/openembedded-core/message/168558 > Mute This Topic: https://lists.openembedded.org/mt/92647387/3617156 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ > Martin.Jansa@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > >
This issue is still reproducible in latest 2.36, I've updated: https://sourceware.org/bugzilla/show_bug.cgi?id=29249 and for the new strcpy issue I've bisected where it was introduced and created new ticket upstream: https://sourceware.org/bugzilla/show_bug.cgi?id=29454 we can revert 2 more upstream commits as work around, but lets wait a bit for upstream, maybe there is some simple fix, but I wasn't able to figure it out today (and don't want to spent even more time on it). Reverts included in https://git.openembedded.org/openembedded-core-contrib/log/?h=jansa/master if someone want's to test it as well. Regards, On Mon, Aug 1, 2022 at 1:05 PM Martin Jansa via lists.openembedded.org <Martin.Jansa=gmail.com@lists.openembedded.org> wrote: > FWIW: I was checking if this is still reproducible with 2.36 from khem's > branch: > > https://github.com/YoeDistro/openembedded-core/commit/eec0967b92973b8ed5b2fe98ac652fe0da21493b > > and with DEBUG_BUILD it failed elsewhere now: > http://errors.yoctoproject.org/Errors/Details/663898/ > > | > /OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/glibc/2.36-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/12.1.0/ld.bfd: > /OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/glibc/2.36-r0/build-x86_64-oe-linux/elf/librtld.os: > in function `_dl_load_cache_lookup': > | /usr/src/debug/glibc/2.36-r0/git/elf/dl-cache.c:513: undefined reference > to `strcpy' > > On Wed, Jul 27, 2022 at 1:57 PM Martin Jansa via lists.openembedded.org > <Martin.Jansa=gmail.com@lists.openembedded.org> wrote: > >> * work around for build failure with DEBUG_BUILD: >> http://errors.yoctoproject.org/Errors/Details/661468/ >> >> >> TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/11.3.0/ld.bfd: >> >> TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/build-x86_64-oe-linux/libc.a(libc-tls.o): >> in function `__libc_setup_tls': >> /usr/src/debug/glibc/2.35-r0/git/csu/libc-tls.c:202: undefined >> reference to `_startup_fatal_not_constant' >> >> introduced in: >> >> https://git.openembedded.org/openembedded-core/commit/?id=50ca0eea5424c89c9b39cf69d8bd73fd65f06e95 >> with: >> >> https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a2a6bce7d7e52c1c34369a7da62c501cc350bc31 >> >> Temporary reverting as discussed in: >> https://lists.openembedded.org/g/openembedded-core/message/168463 >> (it's also reverted in buildroot now with: >> https://lore.kernel.org/buildroot/20220720213853.1A27184110@busybox.osuosl.org/t/ >> ) >> >> instead of revert we can use -fexpensive-optimizations which >> will optimize-out the symbol, but that works only with -O1 and >> not -Og used by DEBUG_BUILD >> >> upstream report: >> https://sourceware.org/bugzilla/show_bug.cgi?id=29249 >> >> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> >> --- >> >> v2: mention -fexpensive-optimizations and add link to upstream >> bug report >> >> ...lement-a-useful-version-of-_startup_.patch | 128 ++++++++++++++++++ >> meta/recipes-core/glibc/glibc_2.35.bb | 2 + >> 2 files changed, 130 insertions(+) >> create mode 100644 >> meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch >> >> diff --git >> a/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch >> b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch >> new file mode 100644 >> index 0000000000..2421a63605 >> --- /dev/null >> +++ >> b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch >> @@ -0,0 +1,128 @@ >> +From 6b8959add09e425df262bf9178b39ca35bc4003c Mon Sep 17 00:00:00 2001 >> +From: Martin Jansa <Martin.Jansa@gmail.com> >> +Date: Sun, 24 Jul 2022 19:41:41 +0200 >> +Subject: [PATCH] Revert "Linux: Implement a useful version of >> _startup_fatal" >> + >> +This reverts commit 2d05ba7f8ef979947e910a37ae8115a816eb4d08. >> +Upstream-Status: Inappropriate [temporary work around] >> + >> +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> >> + >> +--- >> + sysdeps/unix/sysv/linux/i386/startup.h | 23 ++++++++++++--- >> + sysdeps/unix/sysv/linux/ia64/startup.h | 22 --------------- >> + sysdeps/unix/sysv/linux/startup.h | 39 -------------------------- >> + 3 files changed, 19 insertions(+), 65 deletions(-) >> + delete mode 100644 sysdeps/unix/sysv/linux/ia64/startup.h >> + delete mode 100644 sysdeps/unix/sysv/linux/startup.h >> + >> +diff --git a/sysdeps/unix/sysv/linux/i386/startup.h >> b/sysdeps/unix/sysv/linux/i386/startup.h >> +index 213805d7d2..67c9310f3a 100644 >> +--- a/sysdeps/unix/sysv/linux/i386/startup.h >> ++++ b/sysdeps/unix/sysv/linux/i386/startup.h >> +@@ -1,5 +1,5 @@ >> + /* Linux/i386 definitions of functions used by static libc main startup. >> +- Copyright (C) 2022 Free Software Foundation, Inc. >> ++ Copyright (C) 2017-2022 Free Software Foundation, Inc. >> + This file is part of the GNU C Library. >> + >> + The GNU C Library is free software; you can redistribute it and/or >> +@@ -16,7 +16,22 @@ >> + License along with the GNU C Library; if not, see >> + <https://www.gnu.org/licenses/>. */ >> + >> +-/* Can't use "call *%gs:SYSINFO_OFFSET" during startup. */ >> +-#define I386_USE_SYSENTER 0 >> ++#if BUILD_PIE_DEFAULT >> ++/* Can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE. */ >> ++# define I386_USE_SYSENTER 0 >> + >> +-#include_next <startup.h> >> ++# include <sysdep.h> >> ++# include <abort-instr.h> >> ++ >> ++__attribute__ ((__noreturn__)) >> ++static inline void >> ++_startup_fatal (const char *message __attribute__ ((unused))) >> ++{ >> ++ /* This is only called very early during startup in static PIE. >> ++ FIXME: How can it be improved? */ >> ++ ABORT_INSTRUCTION; >> ++ __builtin_unreachable (); >> ++} >> ++#else >> ++# include_next <startup.h> >> ++#endif >> +diff --git a/sysdeps/unix/sysv/linux/ia64/startup.h >> b/sysdeps/unix/sysv/linux/ia64/startup.h >> +deleted file mode 100644 >> +index 77f29f15a2..0000000000 >> +--- a/sysdeps/unix/sysv/linux/ia64/startup.h >> ++++ /dev/null >> +@@ -1,22 +0,0 @@ >> +-/* Linux/ia64 definitions of functions used by static libc main startup. >> +- Copyright (C) 2022 Free Software Foundation, Inc. >> +- This file is part of the GNU C Library. >> +- >> +- The GNU C Library is free software; you can redistribute it and/or >> +- modify it under the terms of the GNU Lesser General Public >> +- License as published by the Free Software Foundation; either >> +- version 2.1 of the License, or (at your option) any later version. >> +- >> +- The GNU C Library is distributed in the hope that it will be useful, >> +- but WITHOUT ANY WARRANTY; without even the implied warranty of >> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> +- Lesser General Public License for more details. >> +- >> +- You should have received a copy of the GNU Lesser General Public >> +- License along with the GNU C Library; if not, see >> +- <https://www.gnu.org/licenses/>. */ >> +- >> +-/* This code is used before the TCB is set up. */ >> +-#define IA64_USE_NEW_STUB 0 >> +- >> +-#include_next <startup.h> >> +diff --git a/sysdeps/unix/sysv/linux/startup.h >> b/sysdeps/unix/sysv/linux/startup.h >> +deleted file mode 100644 >> +index 39859b404a..0000000000 >> +--- a/sysdeps/unix/sysv/linux/startup.h >> ++++ /dev/null >> +@@ -1,39 +0,0 @@ >> +-/* Linux definitions of functions used by static libc main startup. >> +- Copyright (C) 2017-2022 Free Software Foundation, Inc. >> +- This file is part of the GNU C Library. >> +- >> +- The GNU C Library is free software; you can redistribute it and/or >> +- modify it under the terms of the GNU Lesser General Public >> +- License as published by the Free Software Foundation; either >> +- version 2.1 of the License, or (at your option) any later version. >> +- >> +- The GNU C Library is distributed in the hope that it will be useful, >> +- but WITHOUT ANY WARRANTY; without even the implied warranty of >> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> +- Lesser General Public License for more details. >> +- >> +- You should have received a copy of the GNU Lesser General Public >> +- License along with the GNU C Library; if not, see >> +- <https://www.gnu.org/licenses/>. */ >> +- >> +-#ifdef SHARED >> +-# include_next <startup.h> >> +-#else >> +-# include <sysdep.h> >> +- >> +-/* Avoid a run-time invocation of strlen. */ >> +-#define _startup_fatal(message) >> \ >> +- do >> \ >> +- { >> \ >> +- size_t __message_length = __builtin_strlen (message); >> \ >> +- if (! __builtin_constant_p (__message_length)) >> \ >> +- { >> \ >> +- extern void _startup_fatal_not_constant (void); >> \ >> +- _startup_fatal_not_constant (); >> \ >> +- } >> \ >> +- INTERNAL_SYSCALL_CALL (write, STDERR_FILENO, (message), >> \ >> +- __message_length); >> \ >> +- INTERNAL_SYSCALL_CALL (exit_group, 127); >> \ >> +- } >> \ >> +- while (0) >> +-#endif /* !SHARED */ >> diff --git a/meta/recipes-core/glibc/glibc_2.35.bb >> b/meta/recipes-core/glibc/glibc_2.35.bb >> index 96fe39c548..df847e76bf 100644 >> --- a/meta/recipes-core/glibc/glibc_2.35.bb >> +++ b/meta/recipes-core/glibc/glibc_2.35.bb >> @@ -48,6 +48,8 @@ SRC_URI = >> "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ >> >> file://0022-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch \ >> >> file://0023-timezone-Make-shell-interpreter-overridable-in-tzsel.patch \ >> >> file://0024-fix-create-thread-failed-in-unprivileged-process-BZ-.patch \ >> + \ >> + >> file://0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch \ >> " >> S = "${WORKDIR}/git" >> B = "${WORKDIR}/build-${TARGET_SYS}" >> >> >> >> > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#168746): > https://lists.openembedded.org/g/openembedded-core/message/168746 > Mute This Topic: https://lists.openembedded.org/mt/92744420/3617156 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [ > Martin.Jansa@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- > >
On Sun, Aug 7, 2022 at 7:00 AM Martin Jansa <martin.jansa@gmail.com> wrote: > > This issue is still reproducible in latest 2.36, I've updated: > https://sourceware.org/bugzilla/show_bug.cgi?id=29249 > and for the new strcpy issue I've bisected where it was introduced and created new ticket upstream: > https://sourceware.org/bugzilla/show_bug.cgi?id=29454 > we can revert 2 more upstream commits as work around, but lets wait a bit for upstream, maybe there is some simple fix, but I wasn't able to figure it out today (and don't want to spent even more time on it). Reverts included in https://git.openembedded.org/openembedded-core-contrib/log/?h=jansa/master if someone want's to test it as well. > I think, we can also track them until they are baked a bit upstream and backport the final fixes after we have upgraded to 2.36. > Regards, > > On Mon, Aug 1, 2022 at 1:05 PM Martin Jansa via lists.openembedded.org <Martin.Jansa=gmail.com@lists.openembedded.org> wrote: >> >> FWIW: I was checking if this is still reproducible with 2.36 from khem's branch: >> https://github.com/YoeDistro/openembedded-core/commit/eec0967b92973b8ed5b2fe98ac652fe0da21493b >> >> and with DEBUG_BUILD it failed elsewhere now: >> http://errors.yoctoproject.org/Errors/Details/663898/ >> >> | /OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/glibc/2.36-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/12.1.0/ld.bfd: /OE/build/oe-core/tmp-glibc/work/core2-64-oe-linux/glibc/2.36-r0/build-x86_64-oe-linux/elf/librtld.os: in function `_dl_load_cache_lookup': >> | /usr/src/debug/glibc/2.36-r0/git/elf/dl-cache.c:513: undefined reference to `strcpy' >> >> On Wed, Jul 27, 2022 at 1:57 PM Martin Jansa via lists.openembedded.org <Martin.Jansa=gmail.com@lists.openembedded.org> wrote: >>> >>> * work around for build failure with DEBUG_BUILD: >>> http://errors.yoctoproject.org/Errors/Details/661468/ >>> >>> TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/11.3.0/ld.bfd: >>> TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/build-x86_64-oe-linux/libc.a(libc-tls.o): >>> in function `__libc_setup_tls': >>> /usr/src/debug/glibc/2.35-r0/git/csu/libc-tls.c:202: undefined reference to `_startup_fatal_not_constant' >>> >>> introduced in: >>> https://git.openembedded.org/openembedded-core/commit/?id=50ca0eea5424c89c9b39cf69d8bd73fd65f06e95 >>> with: >>> https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a2a6bce7d7e52c1c34369a7da62c501cc350bc31 >>> >>> Temporary reverting as discussed in: >>> https://lists.openembedded.org/g/openembedded-core/message/168463 >>> (it's also reverted in buildroot now with: https://lore.kernel.org/buildroot/20220720213853.1A27184110@busybox.osuosl.org/t/) >>> >>> instead of revert we can use -fexpensive-optimizations which >>> will optimize-out the symbol, but that works only with -O1 and >>> not -Og used by DEBUG_BUILD >>> >>> upstream report: >>> https://sourceware.org/bugzilla/show_bug.cgi?id=29249 >>> >>> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> >>> --- >>> >>> v2: mention -fexpensive-optimizations and add link to upstream >>> bug report >>> >>> ...lement-a-useful-version-of-_startup_.patch | 128 ++++++++++++++++++ >>> meta/recipes-core/glibc/glibc_2.35.bb | 2 + >>> 2 files changed, 130 insertions(+) >>> create mode 100644 meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch >>> >>> diff --git a/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch >>> new file mode 100644 >>> index 0000000000..2421a63605 >>> --- /dev/null >>> +++ b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch >>> @@ -0,0 +1,128 @@ >>> +From 6b8959add09e425df262bf9178b39ca35bc4003c Mon Sep 17 00:00:00 2001 >>> +From: Martin Jansa <Martin.Jansa@gmail.com> >>> +Date: Sun, 24 Jul 2022 19:41:41 +0200 >>> +Subject: [PATCH] Revert "Linux: Implement a useful version of _startup_fatal" >>> + >>> +This reverts commit 2d05ba7f8ef979947e910a37ae8115a816eb4d08. >>> +Upstream-Status: Inappropriate [temporary work around] >>> + >>> +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> >>> + >>> +--- >>> + sysdeps/unix/sysv/linux/i386/startup.h | 23 ++++++++++++--- >>> + sysdeps/unix/sysv/linux/ia64/startup.h | 22 --------------- >>> + sysdeps/unix/sysv/linux/startup.h | 39 -------------------------- >>> + 3 files changed, 19 insertions(+), 65 deletions(-) >>> + delete mode 100644 sysdeps/unix/sysv/linux/ia64/startup.h >>> + delete mode 100644 sysdeps/unix/sysv/linux/startup.h >>> + >>> +diff --git a/sysdeps/unix/sysv/linux/i386/startup.h b/sysdeps/unix/sysv/linux/i386/startup.h >>> +index 213805d7d2..67c9310f3a 100644 >>> +--- a/sysdeps/unix/sysv/linux/i386/startup.h >>> ++++ b/sysdeps/unix/sysv/linux/i386/startup.h >>> +@@ -1,5 +1,5 @@ >>> + /* Linux/i386 definitions of functions used by static libc main startup. >>> +- Copyright (C) 2022 Free Software Foundation, Inc. >>> ++ Copyright (C) 2017-2022 Free Software Foundation, Inc. >>> + This file is part of the GNU C Library. >>> + >>> + The GNU C Library is free software; you can redistribute it and/or >>> +@@ -16,7 +16,22 @@ >>> + License along with the GNU C Library; if not, see >>> + <https://www.gnu.org/licenses/>. */ >>> + >>> +-/* Can't use "call *%gs:SYSINFO_OFFSET" during startup. */ >>> +-#define I386_USE_SYSENTER 0 >>> ++#if BUILD_PIE_DEFAULT >>> ++/* Can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE. */ >>> ++# define I386_USE_SYSENTER 0 >>> + >>> +-#include_next <startup.h> >>> ++# include <sysdep.h> >>> ++# include <abort-instr.h> >>> ++ >>> ++__attribute__ ((__noreturn__)) >>> ++static inline void >>> ++_startup_fatal (const char *message __attribute__ ((unused))) >>> ++{ >>> ++ /* This is only called very early during startup in static PIE. >>> ++ FIXME: How can it be improved? */ >>> ++ ABORT_INSTRUCTION; >>> ++ __builtin_unreachable (); >>> ++} >>> ++#else >>> ++# include_next <startup.h> >>> ++#endif >>> +diff --git a/sysdeps/unix/sysv/linux/ia64/startup.h b/sysdeps/unix/sysv/linux/ia64/startup.h >>> +deleted file mode 100644 >>> +index 77f29f15a2..0000000000 >>> +--- a/sysdeps/unix/sysv/linux/ia64/startup.h >>> ++++ /dev/null >>> +@@ -1,22 +0,0 @@ >>> +-/* Linux/ia64 definitions of functions used by static libc main startup. >>> +- Copyright (C) 2022 Free Software Foundation, Inc. >>> +- This file is part of the GNU C Library. >>> +- >>> +- The GNU C Library is free software; you can redistribute it and/or >>> +- modify it under the terms of the GNU Lesser General Public >>> +- License as published by the Free Software Foundation; either >>> +- version 2.1 of the License, or (at your option) any later version. >>> +- >>> +- The GNU C Library is distributed in the hope that it will be useful, >>> +- but WITHOUT ANY WARRANTY; without even the implied warranty of >>> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >>> +- Lesser General Public License for more details. >>> +- >>> +- You should have received a copy of the GNU Lesser General Public >>> +- License along with the GNU C Library; if not, see >>> +- <https://www.gnu.org/licenses/>. */ >>> +- >>> +-/* This code is used before the TCB is set up. */ >>> +-#define IA64_USE_NEW_STUB 0 >>> +- >>> +-#include_next <startup.h> >>> +diff --git a/sysdeps/unix/sysv/linux/startup.h b/sysdeps/unix/sysv/linux/startup.h >>> +deleted file mode 100644 >>> +index 39859b404a..0000000000 >>> +--- a/sysdeps/unix/sysv/linux/startup.h >>> ++++ /dev/null >>> +@@ -1,39 +0,0 @@ >>> +-/* Linux definitions of functions used by static libc main startup. >>> +- Copyright (C) 2017-2022 Free Software Foundation, Inc. >>> +- This file is part of the GNU C Library. >>> +- >>> +- The GNU C Library is free software; you can redistribute it and/or >>> +- modify it under the terms of the GNU Lesser General Public >>> +- License as published by the Free Software Foundation; either >>> +- version 2.1 of the License, or (at your option) any later version. >>> +- >>> +- The GNU C Library is distributed in the hope that it will be useful, >>> +- but WITHOUT ANY WARRANTY; without even the implied warranty of >>> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >>> +- Lesser General Public License for more details. >>> +- >>> +- You should have received a copy of the GNU Lesser General Public >>> +- License along with the GNU C Library; if not, see >>> +- <https://www.gnu.org/licenses/>. */ >>> +- >>> +-#ifdef SHARED >>> +-# include_next <startup.h> >>> +-#else >>> +-# include <sysdep.h> >>> +- >>> +-/* Avoid a run-time invocation of strlen. */ >>> +-#define _startup_fatal(message) \ >>> +- do \ >>> +- { \ >>> +- size_t __message_length = __builtin_strlen (message); \ >>> +- if (! __builtin_constant_p (__message_length)) \ >>> +- { \ >>> +- extern void _startup_fatal_not_constant (void); \ >>> +- _startup_fatal_not_constant (); \ >>> +- } \ >>> +- INTERNAL_SYSCALL_CALL (write, STDERR_FILENO, (message), \ >>> +- __message_length); \ >>> +- INTERNAL_SYSCALL_CALL (exit_group, 127); \ >>> +- } \ >>> +- while (0) >>> +-#endif /* !SHARED */ >>> diff --git a/meta/recipes-core/glibc/glibc_2.35.bb b/meta/recipes-core/glibc/glibc_2.35.bb >>> index 96fe39c548..df847e76bf 100644 >>> --- a/meta/recipes-core/glibc/glibc_2.35.bb >>> +++ b/meta/recipes-core/glibc/glibc_2.35.bb >>> @@ -48,6 +48,8 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ >>> file://0022-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch \ >>> file://0023-timezone-Make-shell-interpreter-overridable-in-tzsel.patch \ >>> file://0024-fix-create-thread-failed-in-unprivileged-process-BZ-.patch \ >>> + \ >>> + file://0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch \ >>> " >>> S = "${WORKDIR}/git" >>> B = "${WORKDIR}/build-${TARGET_SYS}" >>> >>> >>> >> >> -=-=-=-=-=-=-=-=-=-=-=- >> Links: You receive all messages sent to this group. >> View/Reply Online (#168746): https://lists.openembedded.org/g/openembedded-core/message/168746 >> Mute This Topic: https://lists.openembedded.org/mt/92744420/3617156 >> Group Owner: openembedded-core+owner@lists.openembedded.org >> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [Martin.Jansa@gmail.com] >> -=-=-=-=-=-=-=-=-=-=-=- >>
diff --git a/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch new file mode 100644 index 0000000000..2421a63605 --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch @@ -0,0 +1,128 @@ +From 6b8959add09e425df262bf9178b39ca35bc4003c Mon Sep 17 00:00:00 2001 +From: Martin Jansa <Martin.Jansa@gmail.com> +Date: Sun, 24 Jul 2022 19:41:41 +0200 +Subject: [PATCH] Revert "Linux: Implement a useful version of _startup_fatal" + +This reverts commit 2d05ba7f8ef979947e910a37ae8115a816eb4d08. +Upstream-Status: Inappropriate [temporary work around] + +Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> + +--- + sysdeps/unix/sysv/linux/i386/startup.h | 23 ++++++++++++--- + sysdeps/unix/sysv/linux/ia64/startup.h | 22 --------------- + sysdeps/unix/sysv/linux/startup.h | 39 -------------------------- + 3 files changed, 19 insertions(+), 65 deletions(-) + delete mode 100644 sysdeps/unix/sysv/linux/ia64/startup.h + delete mode 100644 sysdeps/unix/sysv/linux/startup.h + +diff --git a/sysdeps/unix/sysv/linux/i386/startup.h b/sysdeps/unix/sysv/linux/i386/startup.h +index 213805d7d2..67c9310f3a 100644 +--- a/sysdeps/unix/sysv/linux/i386/startup.h ++++ b/sysdeps/unix/sysv/linux/i386/startup.h +@@ -1,5 +1,5 @@ + /* Linux/i386 definitions of functions used by static libc main startup. +- Copyright (C) 2022 Free Software Foundation, Inc. ++ Copyright (C) 2017-2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -16,7 +16,22 @@ + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +-/* Can't use "call *%gs:SYSINFO_OFFSET" during startup. */ +-#define I386_USE_SYSENTER 0 ++#if BUILD_PIE_DEFAULT ++/* Can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE. */ ++# define I386_USE_SYSENTER 0 + +-#include_next <startup.h> ++# include <sysdep.h> ++# include <abort-instr.h> ++ ++__attribute__ ((__noreturn__)) ++static inline void ++_startup_fatal (const char *message __attribute__ ((unused))) ++{ ++ /* This is only called very early during startup in static PIE. ++ FIXME: How can it be improved? */ ++ ABORT_INSTRUCTION; ++ __builtin_unreachable (); ++} ++#else ++# include_next <startup.h> ++#endif +diff --git a/sysdeps/unix/sysv/linux/ia64/startup.h b/sysdeps/unix/sysv/linux/ia64/startup.h +deleted file mode 100644 +index 77f29f15a2..0000000000 +--- a/sysdeps/unix/sysv/linux/ia64/startup.h ++++ /dev/null +@@ -1,22 +0,0 @@ +-/* Linux/ia64 definitions of functions used by static libc main startup. +- Copyright (C) 2022 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- The GNU C Library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, see +- <https://www.gnu.org/licenses/>. */ +- +-/* This code is used before the TCB is set up. */ +-#define IA64_USE_NEW_STUB 0 +- +-#include_next <startup.h> +diff --git a/sysdeps/unix/sysv/linux/startup.h b/sysdeps/unix/sysv/linux/startup.h +deleted file mode 100644 +index 39859b404a..0000000000 +--- a/sysdeps/unix/sysv/linux/startup.h ++++ /dev/null +@@ -1,39 +0,0 @@ +-/* Linux definitions of functions used by static libc main startup. +- Copyright (C) 2017-2022 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public +- License as published by the Free Software Foundation; either +- version 2.1 of the License, or (at your option) any later version. +- +- The GNU C Library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; if not, see +- <https://www.gnu.org/licenses/>. */ +- +-#ifdef SHARED +-# include_next <startup.h> +-#else +-# include <sysdep.h> +- +-/* Avoid a run-time invocation of strlen. */ +-#define _startup_fatal(message) \ +- do \ +- { \ +- size_t __message_length = __builtin_strlen (message); \ +- if (! __builtin_constant_p (__message_length)) \ +- { \ +- extern void _startup_fatal_not_constant (void); \ +- _startup_fatal_not_constant (); \ +- } \ +- INTERNAL_SYSCALL_CALL (write, STDERR_FILENO, (message), \ +- __message_length); \ +- INTERNAL_SYSCALL_CALL (exit_group, 127); \ +- } \ +- while (0) +-#endif /* !SHARED */ diff --git a/meta/recipes-core/glibc/glibc_2.35.bb b/meta/recipes-core/glibc/glibc_2.35.bb index 96fe39c548..df847e76bf 100644 --- a/meta/recipes-core/glibc/glibc_2.35.bb +++ b/meta/recipes-core/glibc/glibc_2.35.bb @@ -48,6 +48,8 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ file://0022-sysdeps-gnu-configure.ac-Set-libc_cv_rootsbindir-onl.patch \ file://0023-timezone-Make-shell-interpreter-overridable-in-tzsel.patch \ file://0024-fix-create-thread-failed-in-unprivileged-process-BZ-.patch \ + \ + file://0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch \ " S = "${WORKDIR}/git" B = "${WORKDIR}/build-${TARGET_SYS}"
* work around for build failure with DEBUG_BUILD: http://errors.yoctoproject.org/Errors/Details/661468/ TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/11.3.0/ld.bfd: TOPDIR/tmp-glibc/work/core2-64-oe-linux/glibc/2.35-r0/build-x86_64-oe-linux/libc.a(libc-tls.o): in function `__libc_setup_tls': /usr/src/debug/glibc/2.35-r0/git/csu/libc-tls.c:202: undefined reference to `_startup_fatal_not_constant' introduced in: https://git.openembedded.org/openembedded-core/commit/?id=50ca0eea5424c89c9b39cf69d8bd73fd65f06e95 with: https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a2a6bce7d7e52c1c34369a7da62c501cc350bc31 Temporary reverting as discussed in: https://lists.openembedded.org/g/openembedded-core/message/168463 (it's also reverted in buildroot now with: https://lore.kernel.org/buildroot/20220720213853.1A27184110@busybox.osuosl.org/t/) Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> --- ...lement-a-useful-version-of-_startup_.patch | 128 ++++++++++++++++++ meta/recipes-core/glibc/glibc_2.35.bb | 2 + 2 files changed, 130 insertions(+) create mode 100644 meta/recipes-core/glibc/glibc/0001-Revert-Linux-Implement-a-useful-version-of-_startup_.patch