aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorSergei Trofimovich <siarheit@google.com>2023-10-23 13:32:55 +0100
committerSergei Trofimovich <siarheit@google.com>2023-10-24 08:35:44 +0100
commiteaf75155f38a51b2d9d49c6c1b1e1639e3d0591a (patch)
treeda41a8d694c2716749c35bfa83230b729560376f /libgcc
parent724badcadf889b5798321620aeed16b61e91fe72 (diff)
downloadgcc-eaf75155f38a51b2d9d49c6c1b1e1639e3d0591a.zip
gcc-eaf75155f38a51b2d9d49c6c1b1e1639e3d0591a.tar.gz
gcc-eaf75155f38a51b2d9d49c6c1b1e1639e3d0591a.tar.bz2
libgcc: make heap-based trampolines conditional on libc presence
To build `libc` for a target one needs to build `gcc` without `libc` support first. Commit r14-4823-g8abddb187b3348 "libgcc: support heap-based trampolines" added unconditional `libc` dependency and broke libc-less `gcc` builds. An example failure on `x86_64-unknown-linux-gnu`: $ mkdir -p /tmp/empty $ ../gcc/configure \ --disable-multilib \ --without-headers \ --with-newlib \ --enable-languages=c \ --disable-bootstrap \ --disable-gcov \ --disable-threads \ --disable-shared \ --disable-libssp \ --disable-libquadmath \ --disable-libgomp \ --disable-libatomic \ --with-build-sysroot=/tmp/empty $ make ... /tmp/gb/./gcc/xgcc -B/tmp/gb/./gcc/ -B/usr/local/x86_64-pc-linux-gnu/bin/ -B/usr/local/x86_64-pc-linux-gnu/lib/ -isystem /usr/local/x86_64-pc-linux-gnu/include -isystem /usr/local/x86_64-pc-linux-gnu/sys-include --sysroot=/tmp/empty -g -O2 -O2 -g -O2 -DIN_GCC -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fpic -mlong-double-80 -DUSE_ELF_SYMVER -fcf-protection -mshstk -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -Dinhibit_libc -fpic -mlong-double-80 -DUSE_ELF_SYMVER -fcf-protection -mshstk -I. -I. -I../.././gcc -I/home/slyfox/dev/git/gcc/libgcc -I/home/slyfox/dev/git/gcc/libgcc/. -I/home/slyfox/dev/git/gcc/libgcc/../gcc -I/home/slyfox/dev/git/gcc/libgcc/../include -DHAVE_CC_TLS -DUSE_TLS -o heap-trampoline.o -MT heap-trampoline.o -MD -MP -MF heap-trampoline.dep -c .../gcc/libgcc/config/i386/heap-trampoline.c -fvisibility=hidden -DHIDE_EXPORTS ../gcc/libgcc/config/i386/heap-trampoline.c:3:10: fatal error: unistd.h: No such file or directory 3 | #include <unistd.h> | ^~~~~~~~~~ compilation terminated. make[2]: *** [.../gcc/libgcc/static-object.mk:17: heap-trampoline.o] Error 1 make[2]: Leaving directory '/tmp/gb/x86_64-pc-linux-gnu/libgcc' make[1]: *** [Makefile:13307: all-target-libgcc] Error 2 The change inhibits any heap-based trampoline code. libgcc/ * config/aarch64/heap-trampoline.c: Disable when libc is not present. * config/i386/heap-trampoline.c: Ditto.
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/config/aarch64/heap-trampoline.c5
-rw-r--r--libgcc/config/i386/heap-trampoline.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/libgcc/config/aarch64/heap-trampoline.c b/libgcc/config/aarch64/heap-trampoline.c
index c8b8368..f222339 100644
--- a/libgcc/config/aarch64/heap-trampoline.c
+++ b/libgcc/config/aarch64/heap-trampoline.c
@@ -1,5 +1,8 @@
/* Copyright The GNU Toolchain Authors. */
+/* libc is required to allocate trampolines. */
+#ifndef inhibit_libc
+
#include <unistd.h>
#include <sys/mman.h>
#include <stdint.h>
@@ -170,3 +173,5 @@ __builtin_nested_func_ptr_deleted (void)
tramp_ctrl_curr = prev;
}
}
+
+#endif /* !inhibit_libc */
diff --git a/libgcc/config/i386/heap-trampoline.c b/libgcc/config/i386/heap-trampoline.c
index 96e13bf..4b9f436 100644
--- a/libgcc/config/i386/heap-trampoline.c
+++ b/libgcc/config/i386/heap-trampoline.c
@@ -1,5 +1,8 @@
/* Copyright The GNU Toolchain Authors. */
+/* libc is required to allocate trampolines. */
+#ifndef inhibit_libc
+
#include <unistd.h>
#include <sys/mman.h>
#include <stdint.h>
@@ -170,3 +173,5 @@ __builtin_nested_func_ptr_deleted (void)
tramp_ctrl_curr = prev;
}
}
+
+#endif /* !inhibit_libc */