Patrick Williams | 2194f50 | 2022-10-16 14:26:09 -0500 | [diff] [blame^] | 1 | From af72a47a677ce98c08cb73444bdd741ca8e28422 Mon Sep 17 00:00:00 2001 |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Tue, 27 Jun 2017 18:10:54 -0700 |
| 4 | Subject: [PATCH] Add ssp_nonshared to link commandline for musl targets |
| 5 | |
| 6 | when -fstack-protector options are enabled we need to |
| 7 | link with ssp_shared on musl since it does not provide |
| 8 | the __stack_chk_fail_local() so essentially it provides |
| 9 | libssp but not libssp_nonshared something like |
| 10 | TARGET_LIBC_PROVIDES_SSP_BUT_NOT_SSP_NONSHARED |
| 11 | where-as for glibc the needed symbols |
| 12 | are already present in libc_nonshared library therefore |
| 13 | we do not need any library helper on glibc based systems |
| 14 | but musl needs the libssp_noshared from gcc |
| 15 | |
| 16 | Upstream-Status: Pending |
| 17 | |
| 18 | Signed-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 | |
Patrick Williams | 2194f50 | 2022-10-16 14:26:09 -0500 | [diff] [blame^] | 25 | diff --git a/gcc/config/linux.h b/gcc/config/linux.h |
| 26 | index ba02c013e30..8fcaa0c9faf 100644 |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 27 | --- a/gcc/config/linux.h |
| 28 | +++ b/gcc/config/linux.h |
Patrick Williams | 2194f50 | 2022-10-16 14:26:09 -0500 | [diff] [blame^] | 29 | @@ -203,6 +203,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 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 */ |
Patrick Williams | 2194f50 | 2022-10-16 14:26:09 -0500 | [diff] [blame^] | 43 | diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h |
| 44 | index 47c9d9ac0b6..d065f88b377 100644 |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 45 | --- a/gcc/config/rs6000/linux.h |
| 46 | +++ b/gcc/config/rs6000/linux.h |
| 47 | @@ -94,6 +94,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: \ |
Patrick Williams | 2194f50 | 2022-10-16 14:26:09 -0500 | [diff] [blame^] | 64 | diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h |
| 65 | index a11e01faa3d..ce464f3626b 100644 |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 66 | --- a/gcc/config/rs6000/linux64.h |
| 67 | +++ b/gcc/config/rs6000/linux64.h |
| 68 | @@ -369,6 +369,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} \ |