diff mbox series

glibc: revert one upstream change to work around broken DEBUG_BUILD build

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

Commit Message

Martin Jansa July 26, 2022, 12:18 p.m. UTC
* 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

Comments

Richard Purdie July 26, 2022, 9:37 p.m. UTC | #1
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
Martin Jansa Aug. 1, 2022, 11:04 a.m. UTC | #2
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]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
Martin Jansa Aug. 7, 2022, 1:59 p.m. UTC | #3
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]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
Khem Raj Aug. 7, 2022, 4:01 p.m. UTC | #4
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 mbox series

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}"