Toolchain: Link libgcc_s on an as-needed basis

If we pass `-lgcc_s` explicitly to the linker, it will be added as a
dependency even if no functions are used from it. This behavior is not
consistent with other systems. GCC can already handle passing the
correct flags, so let's rely on that instead.

As an added benefit, we now get support for the `-static-libgcc` flag;
and `-static-pie` will no longer mistakenly link us against the dynamic
version of libgcc.

No toolchain rebuild is required.
This commit is contained in:
Daniel Bertalan 2021-12-11 17:27:56 +01:00 committed by Idan Horowitz
parent e0e8fd6384
commit 738e52da56

View file

@ -46,10 +46,10 @@ index a75b44ee4..6fab7c3ca 100644
+
; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 357b0bed0..18d099584 100644
index 357b0bed0..151d93312 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -686,6 +686,12 @@ x86_cpus="generic intel"
@@ -686,6 +686,13 @@ x86_cpus="generic intel"
# Common parts for widely ported systems.
case ${target} in
@ -58,11 +58,12 @@ index 357b0bed0..18d099584 100644
+ gnu_ld=yes
+ default_use_cxa_atexit=yes
+ extra_options="${extra_options} serenity.opt"
+ tmake_file="t-slibgcc"
+ ;;
*-*-darwin*)
tmake_file="t-darwin "
tm_file="${tm_file} darwin.h"
@@ -1084,6 +1090,18 @@ case ${target} in
@@ -1084,6 +1091,18 @@ case ${target} in
esac
case ${target} in
@ -169,10 +170,10 @@ index 14a01fe71..3f8e44288 100644
/* This allows for a pagesize of 16384, which we have on Darwin20, but should
diff --git a/gcc/config/serenity.h b/gcc/config/serenity.h
new file mode 100644
index 000000000..d57aacca9
index 000000000..dc2f5361e
--- /dev/null
+++ b/gcc/config/serenity.h
@@ -0,0 +1,44 @@
@@ -0,0 +1,47 @@
+/* Useful if you wish to make target-specific GCC changes. */
+#undef TARGET_SERENITY
+#define TARGET_SERENITY 1
@ -196,7 +197,7 @@ index 000000000..d57aacca9
+#define ENDFILE_SPEC "%{shared|static-pie|!no-pie:crtendS.o%s; :crtend.o%s} crtn.o%s"
+
+#undef LINK_SPEC
+#define LINK_SPEC "%{shared:-shared} %{static:-static} %{!static: %{rdynamic:-export-dynamic} %{!fbuilding-libgcc:%{!nostdlib:%{!nodefaultlibs:-lgcc_s}} -dynamic-linker /usr/lib/Loader.so}}"
+#define LINK_SPEC "%{shared:-shared} %{static:-static} %{!static: %{rdynamic:-export-dynamic} -dynamic-linker /usr/lib/Loader.so}"
+
+#undef CC1_SPEC
+#define CC1_SPEC "-ftls-model=initial-exec %{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}} -fno-semantic-interposition"
@ -207,6 +208,9 @@ index 000000000..d57aacca9
+#undef CPP_SPEC
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+
+/* Use --as-needed -lgcc_s for eh support. */
+#define USE_LD_AS_NEEDED 1
+
+/* Additional predefined macros. */
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \