This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][i386][musl] Add cpuinfo to static libgcc only on *-musl*
- From: Szabolcs Nagy <szabolcs dot nagy at arm dot com>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Cc: <nd at arm dot com>, Rich Felker <dalias at libc dot org>, <thomas dot petazzoni at free-electrons dot com>, Jakub Jelinek <jakub at redhat dot com>, Uros Bizjak <ubizjak at gmail dot com>
- Date: Fri, 11 Nov 2016 15:50:23 +0000
- Subject: [PATCH][i386][musl] Add cpuinfo to static libgcc only on *-musl*
- Authentication-results: sourceware.org; auth=none
- Authentication-results: spf=none (sender IP is ) smtp.mailfrom=Szabolcs dot Nagy at arm dot com;
- Nodisclaimer: True
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
The __cpu_indicator_init and __cpu_model symbols are not safe to use
from shared libgcc_s.so from ifunc resolvers, so since gcc-6, only
the definitions from static libgcc.a are used, however the symbols
are kept in libgcc_s as well for backward compatibility (with
appropriate symbol version). On targets without such backward
compatibility concern add cpuinfo to the static library only (this
avoids running the ctor, reduces libgcc_s size and elf abi concerns
because of gnu symbol versions).
build tested on x86_64-linux-gnu and x86_64-linux-musl.
ok to commit?
i'd like to back port this to gcc-6 because musl dynamic linker
cannot load the libgcc_s.so.1 with the versioned symbols
(not an abi break: those symbols were never used on musl and
the current code does not work).
libgcc/ChangeLog:
2016-11-11 Szabolcs Nagy <szabolcs.nagy@arm.com>
* config.host (i[3456]86-*-musl*, x86_64-*-musl*): Use
i386/t-cpuinfo-static instead of i386/t-cpuinfo.
* config/i386/t-cpuinfo-static: New.
diff --git a/libgcc/config.host b/libgcc/config.host
index 4291cfe..64beb21 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -1320,7 +1320,14 @@ esac
case ${host} in
i[34567]86-*-* | x86_64-*-*)
- tmake_file="${tmake_file} i386/t-cpuinfo"
+ case ${host} in
+ *-musl*)
+ tmake_file="${tmake_file} i386/t-cpuinfo-static"
+ ;;
+ *)
+ tmake_file="${tmake_file} i386/t-cpuinfo"
+ ;;
+ esac
;;
esac
diff --git a/libgcc/config/i386/t-cpuinfo-static b/libgcc/config/i386/t-cpuinfo-static
new file mode 100644
index 0000000..504307d
--- /dev/null
+++ b/libgcc/config/i386/t-cpuinfo-static
@@ -0,0 +1,4 @@
+# If the compatibility cpuinfo symbols in shared libgcc_s are not needed
+# then they can be added to the static library only.
+
+LIB2ADD_ST += $(srcdir)/config/i386/cpuinfo.c