From 745a2ac7825c73102b888226c54397d21512f86b Mon Sep 17 00:00:00 2001
|
From: Khem Raj <raj.khem@gmail.com>
|
Date: Tue, 27 Jun 2017 18:10:54 -0700
|
Subject: [PATCH] Add ssp_nonshared to link commandline for musl targets
|
|
when -fstack-protector options are enabled we need to
|
link with ssp_shared on musl since it does not provide
|
the __stack_chk_fail_local() so essentially it provides
|
libssp but not libssp_nonshared something like
|
TARGET_LIBC_PROVIDES_SSP_BUT_NOT_SSP_NONSHARED
|
where-as for glibc the needed symbols
|
are already present in libc_nonshared library therefore
|
we do not need any library helper on glibc based systems
|
but musl needs the libssp_noshared from gcc
|
|
Upstream-Status: Pending
|
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
---
|
gcc/config/linux.h | 7 +++++++
|
gcc/config/rs6000/linux.h | 10 ++++++++++
|
gcc/config/rs6000/linux64.h | 10 ++++++++++
|
3 files changed, 27 insertions(+)
|
|
--- a/gcc/config/linux.h
|
+++ b/gcc/config/linux.h
|
@@ -203,6 +203,13 @@ see the files COPYING3 and COPYING.RUNTI
|
{ GCC_INCLUDE_DIRVAR, "GCC", 0, 1, 0, 0 }, \
|
{ 0, 0, 0, 0, 0, 0 } \
|
}
|
+#ifdef TARGET_LIBC_PROVIDES_SSP
|
+#undef LINK_SSP_SPEC
|
+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
+ "|fstack-protector-strong|fstack-protector-explicit" \
|
+ ":-lssp_nonshared}"
|
+#endif
|
+
|
#endif
|
|
#if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */
|
--- a/gcc/config/rs6000/linux.h
|
+++ b/gcc/config/rs6000/linux.h
|
@@ -94,6 +94,16 @@
|
" -m elf32ppclinux")
|
#endif
|
|
+/* link libssp_nonshared.a with musl */
|
+#if DEFAULT_LIBC == LIBC_MUSL
|
+#ifdef TARGET_LIBC_PROVIDES_SSP
|
+#undef LINK_SSP_SPEC
|
+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
+ "|fstack-protector-strong|fstack-protector-explicit" \
|
+ ":-lssp_nonshared}"
|
+#endif
|
+#endif
|
+
|
#undef LINK_OS_LINUX_SPEC
|
#define LINK_OS_LINUX_SPEC LINK_OS_LINUX_EMUL " %{!shared: %{!static: \
|
%{!static-pie: \
|
--- a/gcc/config/rs6000/linux64.h
|
+++ b/gcc/config/rs6000/linux64.h
|
@@ -369,6 +369,16 @@ extern int dot_symbols;
|
" -m elf64ppc")
|
#endif
|
|
+/* link libssp_nonshared.a with musl */
|
+#if DEFAULT_LIBC == LIBC_MUSL
|
+#ifdef TARGET_LIBC_PROVIDES_SSP
|
+#undef LINK_SSP_SPEC
|
+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
+ "|fstack-protector-strong|fstack-protector-explicit" \
|
+ ":-lssp_nonshared}"
|
+#endif
|
+#endif
|
+
|
#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
|
%{!static-pie: \
|
%{rdynamic:-export-dynamic} \
|