libunwind: Fix build with fstack-protector on musl

libunwind makery inserts -nostdlib during linking
which fails the build on musl when security flags are enabled
since it remove ssp from linking, so add them explicitly
to SECURITY_LDFLAGS

disable tests for musl targets, tests use obsolete
posix APIs e.g. getcontext

patchout x86_local_resume() on x86, gets a working
linunwind on x86, it seems that it wont work even
in glibc case but lets leave it as it is for glibc
and apply the patch only for musl

(From OE-Core rev: c8ac9d483f6e1cfca82dad8cf3e0745935e96214)

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 2016-03-22 17:06:07 +00:00 committed by Richard Purdie
parent 4aa08b8976
commit 4fe64d79a0
4 changed files with 99 additions and 11 deletions

View File

@ -0,0 +1,31 @@
From b07435a90bd636ee718e2238fb46c74a6dd5e069 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 22 Mar 2016 16:41:13 +0000
Subject: [PATCH] disable tests
Tests use getcontext() API which is
not there on musl
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Inappropriate [MUSL-only]
Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile.am b/Makefile.am
index e24fe1e..15380e4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -39,7 +39,7 @@ endif
nodist_include_HEADERS = include/libunwind-common.h
-SUBDIRS = src tests doc
+SUBDIRS = src doc
noinst_HEADERS = include/dwarf.h include/dwarf_i.h include/dwarf-eh.h \
include/compiler.h include/libunwind_i.h include/mempool.h \
--
1.8.3.1

View File

@ -0,0 +1,54 @@
From f5df01655a4b76d4fe415747de581d94ac593e6a Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 22 Mar 2016 16:19:29 +0000
Subject: [PATCH] x86: Stub out x86_local_resume()
its purpose seems
to be unwinding across signal handler boundaries, which cannot happen
in correct programs anyway. Replacing the whole function with
something like *(volatile char *)0=0; (i.e. crash), gets a working
libunwind
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
src/x86/Gos-linux.c | 22 +---------------------
1 file changed, 1 insertion(+), 21 deletions(-)
diff --git a/src/x86/Gos-linux.c b/src/x86/Gos-linux.c
index 31f83ba..3aaa34e 100644
--- a/src/x86/Gos-linux.c
+++ b/src/x86/Gos-linux.c
@@ -281,27 +281,7 @@ x86_r_uc_addr (ucontext_t *uc, int reg)
HIDDEN int
x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
{
- struct cursor *c = (struct cursor *) cursor;
- ucontext_t *uc = c->uc;
-
- /* Ensure c->pi is up-to-date. On x86, it's relatively common to be
- missing DWARF unwind info. We don't want to fail in that case,
- because the frame-chain still would let us do a backtrace at
- least. */
- dwarf_make_proc_info (&c->dwarf);
-
- if (unlikely (c->sigcontext_format != X86_SCF_NONE))
- {
- struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr;
-
- Debug (8, "resuming at ip=%x via sigreturn(%p)\n", c->dwarf.ip, sc);
- sigreturn (sc);
- }
- else
- {
- Debug (8, "resuming at ip=%x via setcontext()\n", c->dwarf.ip);
- setcontext (uc);
- }
+ *(volatile char *)0=0;
return -UNW_EINVAL;
}
#endif
--
1.8.3.1

View File

@ -5,8 +5,6 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3fced11d6df719b47505837a51c16ae5"
DEPENDS += "libatomic-ops"
SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz"
inherit autotools
PACKAGECONFIG ??= ""
@ -29,4 +27,6 @@ LDFLAGS_append_aarch64 = " -fuse-ld=gold"
LDFLAGS_append_powerpc = " -fuse-ld=gold -mbss-plt"
LDFLAGS_append_powerpc64 = " -fuse-ld=gold -mbss-plt"
SECURITY_LDFLAGS_append_libc-musl = " -lssp_nonshared -lssp"
BBCLASSEXTEND = "native"

View File

@ -1,15 +1,18 @@
require libunwind.inc
SRC_URI += "\
file://Support-building-with-older-compilers.patch \
file://AArch64-port.patch \
file://Fix-test-case-link-failure-on-PowerPC-systems-with-Altivec.patch \
file://Link-libunwind-to-libgcc_s-rather-than-libgcc.patch \
file://0001-Invalid-dwarf-opcodes-can-cause-references-beyond-th.patch \
file://Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch \
file://0001-backtrace-Use-only-with-glibc-and-uclibc.patch \
SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \
file://Support-building-with-older-compilers.patch \
file://AArch64-port.patch \
file://Fix-test-case-link-failure-on-PowerPC-systems-with-Altivec.patch \
file://Link-libunwind-to-libgcc_s-rather-than-libgcc.patch \
file://0001-Invalid-dwarf-opcodes-can-cause-references-beyond-th.patch \
file://Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch \
file://0001-backtrace-Use-only-with-glibc-and-uclibc.patch \
"
SRC_URI_append_libc-musl = "\
file://0001-x86-Stub-out-x86_local_resume.patch \
file://0001-disable-tests.patch \
"
SRC_URI[md5sum] = "fb4ea2f6fbbe45bf032cd36e586883ce"
SRC_URI[sha256sum] = "9dfe0fcae2a866de9d3942c66995e4b460230446887dbdab302d41a8aee8d09a"