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
(From OE-Core rev: 458bfefecdd2b5e2efa743f29d3dc8b3471e6df1)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2015-10-14 17:43:12 -07:00 committed by Richard Purdie
parent e5e8fce81a
commit 8bb6436295
2 changed files with 52 additions and 0 deletions

View File

@ -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"

View File

@ -0,0 +1,51 @@
From 2659fb25d32f4b29c1c96aa5730fe40e19d53ab0 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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