
This resolves an interesting circular dependency between gcc and glibc: 1. glibc < 2.17 depends on libgcc.a and libgcc_eh.a 2. libgcc_eh.a is only built when gcc is configured with --enable-shared 3. but building shared libraries requires crt*.o and libc.so Backport AT_RANDOM auxval changes to avoid dealing with wrong inline assembly (fallback code fails on ubuntu 23.04)
58 lines
2.1 KiB
Diff
58 lines
2.1 KiB
Diff
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
|
From: Joseph Myers <joseph@codesourcery.com>
|
|
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
|
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
|
|
|
diff --git a/elf/static-stubs.c b/elf/static-stubs.c
|
|
new file mode 100644
|
|
index 0000000000..6c5eebc3fb
|
|
--- /dev/null
|
|
+++ b/elf/static-stubs.c
|
|
@@ -0,0 +1,46 @@
|
|
+/* Stub implementations of functions to link into statically linked
|
|
+ programs without needing libgcc_eh.
|
|
+ Copyright (C) 2012 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+/* Avoid backtrace (and so _Unwind_Backtrace) dependencies from
|
|
+ sysdeps/unix/sysv/linux/libc_fatal.c. */
|
|
+#include <sysdeps/posix/libc_fatal.c>
|
|
+
|
|
+#include <stdlib.h>
|
|
+#include <unwind.h>
|
|
+
|
|
+/* These programs do not use thread cancellation, so _Unwind_Resume
|
|
+ and the personality routine are never actually called. */
|
|
+
|
|
+void
|
|
+_Unwind_Resume (struct _Unwind_Exception *exc __attribute__ ((unused)))
|
|
+{
|
|
+ abort ();
|
|
+}
|
|
+
|
|
+_Unwind_Reason_Code
|
|
+__gcc_personality_v0 (int version __attribute__ ((unused)),
|
|
+ _Unwind_Action actions __attribute__ ((unused)),
|
|
+ _Unwind_Exception_Class exception_class
|
|
+ __attribute__ ((unused)),
|
|
+ struct _Unwind_Exception *ue_header
|
|
+ __attribute__ ((unused)),
|
|
+ struct _Unwind_Context *context __attribute__ ((unused)))
|
|
+{
|
|
+ abort ();
|
|
+}
|