From 458bfefecdd2b5e2efa743f29d3dc8b3471e6df1 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 14 Oct 2015 17:43:12 -0700 Subject: uclibc: Fix build with gcc5 An agressive optimization in gcc5 meant that we get linking errors with uclibc build, this patch fixes the issue by letting gcc know that these funcitons are used. Change-Id: I8ecf3999a0855b3bbf4bc2df576be5351f9be5b0 Signed-off-by: Khem Raj Signed-off-by: Ross Burton --- meta/recipes-core/uclibc/uclibc-git.inc | 1 + ...zes-away-the-write-only-static-functions-.patch | 51 ++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 meta/recipes-core/uclibc/uclibc-git/0001-gcc5-optimizes-away-the-write-only-static-functions-.patch diff --git a/meta/recipes-core/uclibc/uclibc-git.inc b/meta/recipes-core/uclibc/uclibc-git.inc index 14a577f432..9e3d64408c 100644 --- a/meta/recipes-core/uclibc/uclibc-git.inc +++ b/meta/recipes-core/uclibc/uclibc-git.inc @@ -16,5 +16,6 @@ SRC_URI = "git://uclibc.org/uClibc.git;branch=master \ file://0005-Always-use-O2-for-compiling-fork.c.patch \ file://0006-ldso-limited-support-for-ORIGIN-in-rpath.patch \ file://0007-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch \ + file://0001-gcc5-optimizes-away-the-write-only-static-functions-.patch \ " S = "${WORKDIR}/git" diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-gcc5-optimizes-away-the-write-only-static-functions-.patch b/meta/recipes-core/uclibc/uclibc-git/0001-gcc5-optimizes-away-the-write-only-static-functions-.patch new file mode 100644 index 0000000000..e622f87ba9 --- /dev/null +++ b/meta/recipes-core/uclibc/uclibc-git/0001-gcc5-optimizes-away-the-write-only-static-functions-.patch @@ -0,0 +1,51 @@ +From 2659fb25d32f4b29c1c96aa5730fe40e19d53ab0 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 14 Oct 2015 17:38:37 -0700 +Subject: [PATCH] gcc5 optimizes away the write only static functions and we + end up with + + librt/librt_so.a(rt-unwind-resume.oS): In function `_Unwind_Resume': + rt-unwind-resume.c:(.text+0x3c): undefined reference to `libgcc_s_resume' + collect2: error: ld returned 1 exit status + make[2]: *** [lib/librt.so] Error 1 + +marking these functions explicitly used with __attribute_used__ avoids +that optimization. + +Signed-off-by: Khem Raj +--- +Upstream-Status: Pending + + libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 2 +- + libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c +index f4d6f41..0c2edd7 100644 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c +@@ -27,7 +27,7 @@ + #define __libc_fatal(x) {/*write(STDERR_FILENO, x, strlen(x));*/ abort();} + + static void *libgcc_s_handle; +-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc); ++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__; + static _Unwind_Reason_Code (*libgcc_s_personality) + (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *); + static _Unwind_Reason_Code (*libgcc_s_forcedunwind) +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c +index f9a4ffb..f0c3047 100644 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/unwind-resume.c +@@ -25,7 +25,7 @@ + #define __libc_dlclose dlclose + #define __libc_fatal(x) {/*write(STDERR_FILENO, x, strlen(x));*/ abort();} + +-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc); ++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc) __attribute_used__; + static _Unwind_Reason_Code (*libgcc_s_personality) + (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *); + +-- +2.6.1 + -- cgit v1.2.3