123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- From d7dc2861840e88a4592817a398a054a886c3f3ee 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(+)
- diff --git a/gcc/config/linux.h b/gcc/config/linux.h
- index 58143dff731..d2409ccac26 100644
- --- a/gcc/config/linux.h
- +++ b/gcc/config/linux.h
- @@ -208,6 +208,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- { 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 */
- diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
- index 8c9039ac1e5..259cd485973 100644
- --- a/gcc/config/rs6000/linux.h
- +++ b/gcc/config/rs6000/linux.h
- @@ -99,6 +99,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: \
- diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
- index 364c1a5b155..e33d9ae98e0 100644
- --- a/gcc/config/rs6000/linux64.h
- +++ b/gcc/config/rs6000/linux64.h
- @@ -372,6 +372,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} \
|