[oe-commits] Andre McCurdy : uclibc: backport upstream fix for SH4

git at git.openembedded.org git at git.openembedded.org
Mon Aug 10 19:41:53 UTC 2015


Module: openembedded-core.git
Branch: master-next
Commit: aa20c3dc33d93a9bd8c81a3b7c1f8f6bbb354d0b
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=aa20c3dc33d93a9bd8c81a3b7c1f8f6bbb354d0b

Author: Andre McCurdy <armccurdy at gmail.com>
Date:   Wed Aug  5 17:30:26 2015 -0700

uclibc: backport upstream fix for SH4

Backport upstream fix for building uclibc for SH4 with recent gcc:

  http://git.uclibc.org/uClibc/commit/?id=2c8a7766681b704e710f51c0817534e3f9a952d1

Signed-off-by: Andre McCurdy <armccurdy at gmail.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>

---

 meta/recipes-core/uclibc/uclibc-git.inc            |  1 +
 .../ldso-mark-_dl_exit-as-noreturn.patch           | 48 ++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/meta/recipes-core/uclibc/uclibc-git.inc b/meta/recipes-core/uclibc/uclibc-git.inc
index 8308e60..3c48940 100644
--- a/meta/recipes-core/uclibc/uclibc-git.inc
+++ b/meta/recipes-core/uclibc/uclibc-git.inc
@@ -25,5 +25,6 @@ SRC_URI = "git://uclibc.org/uClibc.git;branch=master \
 	file://0002-wire-setns-syscall.patch \
 	file://0001-Define-IPTOS_CLASS_-macros-according-to-RFC-2474.patch \
 	file://0001-timex-Sync-with-glibc.patch \
+	file://ldso-mark-_dl_exit-as-noreturn.patch \
 	"
 S = "${WORKDIR}/git"
diff --git a/meta/recipes-core/uclibc/uclibc-git/ldso-mark-_dl_exit-as-noreturn.patch b/meta/recipes-core/uclibc/uclibc-git/ldso-mark-_dl_exit-as-noreturn.patch
new file mode 100644
index 0000000..5279f8a
--- /dev/null
+++ b/meta/recipes-core/uclibc/uclibc-git/ldso-mark-_dl_exit-as-noreturn.patch
@@ -0,0 +1,48 @@
+From 2c8a7766681b704e710f51c0817534e3f9a952d1 Mon Sep 17 00:00:00 2001
+From: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
+Date: Thu, 26 Mar 2015 00:02:58 +0100
+Subject: [PATCH] ldso: mark _dl_exit as noreturn
+
+Otherwise gcc might not understand that oom() ended control-flow and
+might emit an (untaken) reference to abort() in _dl_update_slotinfo()
+on e.g. SH4 which breaks linking ld-uClibc.so.
+Arguably -ffreestanding should prevent GCC from emitting this
+'.global abort' but alas, it does not, which is another bug..
+
+Also mark the function cold to further lower the incoming frequency and
+branch probability.
+
+Upstream-Status: Backport
+
+  http://git.uclibc.org/uClibc/commit/?id=2c8a7766681b704e710f51c0817534e3f9a952d1
+
+Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
+Signed-off-by: Andre McCurdy <armccurdy at gmail.com>
+---
+ ldso/include/dl-syscall.h | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h
+index 675b93a..e556f7b 100644
+--- a/ldso/include/dl-syscall.h
++++ b/ldso/include/dl-syscall.h
+@@ -52,7 +52,15 @@ extern int _dl_errno;
+    dynamic linking at all, so we cannot return any error codes.
+    We just punt if there is an error. */
+ #define __NR__dl_exit __NR_exit
+-static __always_inline _syscall1(void, _dl_exit, int, status)
++static __always_inline attribute_noreturn __cold void _dl_exit(int status)
++{
++	INLINE_SYSCALL(_dl_exit, 1, status);
++#if defined __GNUC__
++	__builtin_unreachable(); /* shut up warning: 'noreturn' function does return*/
++#else
++	while (1);
++#endif
++}
+ 
+ #define __NR__dl_close __NR_close
+ static __always_inline _syscall1(int, _dl_close, int, fd)
+-- 
+1.9.1
+



More information about the Openembedded-commits mailing list