diff options
| author | Khem Raj <raj.khem@gmail.com> | 2017-06-27 19:11:44 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-03-14 07:55:54 -0700 |
| commit | 3b413b58ed3a682ad392251b74e9b6e2765fc21b (patch) | |
| tree | 0acb6b026d4ac24bcde1fa9138807479bae0dab2 /meta/recipes-devtools | |
| parent | 825073b8ff3243d918b61367eed39de3b81dc31b (diff) | |
| download | poky-3b413b58ed3a682ad392251b74e9b6e2765fc21b.tar.gz | |
gcc: Link libssp_nonshared.a only on musl targets
glibc already provides the content for libssp_nonshared
in libc_nonshared.a therefore we dont need to make it
universal.
This also fixed build issues on glibc when linking statically
and using -fstack-protector
Fixed errors like
/mnt/a/oe/build/tmp/work/i586-bec-linux/aufs-util/3.14+gitAUTOINC+bdfcc0dcfc-r0/recipe-sysroot/usr/lib/../lib/libc.a(stack_chk_fail.o): In function `__stack_chk_fail': /usr/src/debug/glibc/2.26-r0/git/debug/stack_chk_fail.c:27: multiple definition of `__stack_chk_fail_local' /mnt/a/oe/build/tmp/work/i586-bec-linux/aufs-util/3.14+gitAUTOINC+bdfcc0dcfc-r0/recipe-sysroot/usr/lib/../lib/libssp_nonshared.a(libssp_nonshared_la-ssp-local.o):/usr/src/debug/gcc-runtime/7.1.0-r0/gcc-7.1.0/build.i586-bec-linux.i586-bec-linux/i586-bec-linux/libssp/../../../../../../../../work-shared/gcc-7.1.0-r0/gcc-7.1.0/libssp/ssp-local.c:47: first defined here collect2: error: ld returned 1 exit status
Cherry-picked from oe-core master d71eba26850838b2878efea3f8c392a2eb2ebbfb
(From OE-Core rev: 27eaa97595cbac38a8bec118fe3d5f8920ab814e)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools')
3 files changed, 43 insertions, 29 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-6.3.inc b/meta/recipes-devtools/gcc/gcc-6.3.inc index 0d98be3861..7b409f119b 100644 --- a/meta/recipes-devtools/gcc/gcc-6.3.inc +++ b/meta/recipes-devtools/gcc/gcc-6.3.inc | |||
| @@ -71,7 +71,7 @@ SRC_URI = "\ | |||
| 71 | file://0038-Search-target-sysroot-gcc-version-specific-dirs-with.patch \ | 71 | file://0038-Search-target-sysroot-gcc-version-specific-dirs-with.patch \ |
| 72 | file://0039-Fix-various-_FOR_BUILD-and-related-variables.patch \ | 72 | file://0039-Fix-various-_FOR_BUILD-and-related-variables.patch \ |
| 73 | file://0040-nios2-Define-MUSL_DYNAMIC_LINKER.patch \ | 73 | file://0040-nios2-Define-MUSL_DYNAMIC_LINKER.patch \ |
| 74 | file://0041-ssp_nonshared.patch \ | 74 | file://0041-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch \ |
| 75 | file://0042-gcc-libcpp-support-ffile-prefix-map-old-new.patch \ | 75 | file://0042-gcc-libcpp-support-ffile-prefix-map-old-new.patch \ |
| 76 | file://0043-Reuse-fdebug-prefix-map-to-replace-ffile-prefix-map.patch \ | 76 | file://0043-Reuse-fdebug-prefix-map-to-replace-ffile-prefix-map.patch \ |
| 77 | file://0044-gcc-final.c-fdebug-prefix-map-support-to-remap-sourc.patch \ | 77 | file://0044-gcc-final.c-fdebug-prefix-map-support-to-remap-sourc.patch \ |
diff --git a/meta/recipes-devtools/gcc/gcc-6.3/0041-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch b/meta/recipes-devtools/gcc/gcc-6.3/0041-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch new file mode 100644 index 0000000000..310f7aacba --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-6.3/0041-Add-ssp_nonshared-to-link-commandline-for-musl-targe.patch | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | From 75a42d6d0f1f9784327f74882195a5c24843d5a8 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Tue, 27 Jun 2017 18:10:54 -0700 | ||
| 4 | Subject: [PATCH 40/49] 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 | 6 ++++++ | ||
| 21 | 1 file changed, 6 insertions(+) | ||
| 22 | |||
| 23 | diff --git a/gcc/config/linux.h b/gcc/config/linux.h | ||
| 24 | index 2e683d0c430..5ff0a2cb2ff 100644 | ||
| 25 | --- a/gcc/config/linux.h | ||
| 26 | +++ b/gcc/config/linux.h | ||
| 27 | @@ -182,6 +182,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | ||
| 28 | { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \ | ||
| 29 | { 0, 0, 0, 0, 0, 0 } \ | ||
| 30 | } | ||
| 31 | +#ifdef TARGET_LIBC_PROVIDES_SSP | ||
| 32 | +#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ | ||
| 33 | + "|fstack-protector-strong|fstack-protector-explicit" \ | ||
| 34 | + ":-lssp_nonshared}" | ||
| 35 | +#endif | ||
| 36 | + | ||
| 37 | #endif | ||
| 38 | |||
| 39 | #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */ | ||
| 40 | -- | ||
| 41 | 2.13.2 | ||
| 42 | |||
diff --git a/meta/recipes-devtools/gcc/gcc-6.3/0041-ssp_nonshared.patch b/meta/recipes-devtools/gcc/gcc-6.3/0041-ssp_nonshared.patch deleted file mode 100644 index 0744529741..0000000000 --- a/meta/recipes-devtools/gcc/gcc-6.3/0041-ssp_nonshared.patch +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | From 551a5db7acb56e085a101f1c222d51b2c1b039a4 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Szabolcs Nagy <nsz@port70.net> | ||
| 3 | Date: Sat, 7 Nov 2015 14:58:40 +0000 | ||
| 4 | Subject: [PATCH 41/46] ssp_nonshared | ||
| 5 | |||
| 6 | --- | ||
| 7 | Upstream-Status: Inappropriate [OE Configuration] | ||
| 8 | |||
| 9 | gcc/gcc.c | 3 ++- | ||
| 10 | 1 file changed, 2 insertions(+), 1 deletion(-) | ||
| 11 | |||
| 12 | diff --git a/gcc/gcc.c b/gcc/gcc.c | ||
| 13 | index 2812819..9de96ee 100644 | ||
| 14 | --- a/gcc/gcc.c | ||
| 15 | +++ b/gcc/gcc.c | ||
| 16 | @@ -863,7 +863,8 @@ proper position among the other output files. */ | ||
| 17 | #ifndef LINK_SSP_SPEC | ||
| 18 | #ifdef TARGET_LIBC_PROVIDES_SSP | ||
| 19 | #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ | ||
| 20 | - "|fstack-protector-strong|fstack-protector-explicit:}" | ||
| 21 | + "|fstack-protector-strong|fstack-protector-explicit" \ | ||
| 22 | + ":-lssp_nonshared}" | ||
| 23 | #else | ||
| 24 | #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ | ||
| 25 | "|fstack-protector-strong|fstack-protector-explicit" \ | ||
| 26 | -- | ||
| 27 | 2.8.2 | ||
| 28 | |||
