1From e420858f23a1fe58e840bd5ae21cb5a964b27f0b Mon Sep 17 00:00:00 2001 2From: Khem Raj <raj.khem@gmail.com> 3Date: Tue, 27 Jun 2017 18:10:54 -0700 4Subject: [PATCH] Add ssp_nonshared to link commandline for musl targets 5 6when -fstack-protector options are enabled we need to 7link with ssp_shared on musl since it does not provide 8the __stack_chk_fail_local() so essentially it provides 9libssp but not libssp_nonshared something like 10TARGET_LIBC_PROVIDES_SSP_BUT_NOT_SSP_NONSHARED 11 where-as for glibc the needed symbols 12are already present in libc_nonshared library therefore 13we do not need any library helper on glibc based systems 14but musl needs the libssp_noshared from gcc 15 16Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2023-April/615317.html] 17 18Signed-off-by: Khem Raj <raj.khem@gmail.com> 19--- 20 gcc/config/linux.h | 7 +++++++ 21 gcc/config/rs6000/linux.h | 10 ++++++++++ 22 gcc/config/rs6000/linux64.h | 10 ++++++++++ 23 3 files changed, 27 insertions(+) 24 25diff --git a/gcc/config/linux.h b/gcc/config/linux.h 26index 79ff13184d3..19f552e8c7d 100644 27--- a/gcc/config/linux.h 28+++ b/gcc/config/linux.h 29@@ -195,6 +195,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 30 { GCC_INCLUDE_DIRVAR, "GCC", 0, 1, 0, 0 }, \ 31 { 0, 0, 0, 0, 0, 0 } \ 32 } 33+#ifdef TARGET_LIBC_PROVIDES_SSP 34+#undef LINK_SSP_SPEC 35+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ 36+ "|fstack-protector-strong|fstack-protector-explicit" \ 37+ ":-lssp_nonshared}" 38+#endif 39+ 40 #endif 41 42 #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */ 43diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h 44index 5f6cede558a..900993b6da4 100644 45--- a/gcc/config/rs6000/linux.h 46+++ b/gcc/config/rs6000/linux.h 47@@ -102,6 +102,16 @@ 48 " -m elf32ppclinux") 49 #endif 50 51+/* link libssp_nonshared.a with musl */ 52+#if DEFAULT_LIBC == LIBC_MUSL 53+#ifdef TARGET_LIBC_PROVIDES_SSP 54+#undef LINK_SSP_SPEC 55+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ 56+ "|fstack-protector-strong|fstack-protector-explicit" \ 57+ ":-lssp_nonshared}" 58+#endif 59+#endif 60+ 61 #undef LINK_OS_LINUX_SPEC 62 #define LINK_OS_LINUX_SPEC LINK_OS_LINUX_EMUL " %{!shared: %{!static: \ 63 %{!static-pie: \ 64diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h 65index a11ae7643b7..2abde270813 100644 66--- a/gcc/config/rs6000/linux64.h 67+++ b/gcc/config/rs6000/linux64.h 68@@ -373,6 +373,16 @@ extern int dot_symbols; 69 " -m elf64ppc") 70 #endif 71 72+/* link libssp_nonshared.a with musl */ 73+#if DEFAULT_LIBC == LIBC_MUSL 74+#ifdef TARGET_LIBC_PROVIDES_SSP 75+#undef LINK_SSP_SPEC 76+#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ 77+ "|fstack-protector-strong|fstack-protector-explicit" \ 78+ ":-lssp_nonshared}" 79+#endif 80+#endif 81+ 82 #define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \ 83 %{!static-pie: \ 84 %{rdynamic:-export-dynamic} \ 85