aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain/musl
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2015-06-22 10:31:07 +0000
committerSteven Barth <steven@midlink.org>2015-06-22 10:31:07 +0000
commitf13f59d31b606458ace4432053c12f1e8006d82f (patch)
tree5d92f3ef03e6183fa5cff49627eaf3dabd2f86cd /toolchain/musl
parente1722c400783c9c622ae6eb31e50dbbaab1b0b44 (diff)
downloadmaster-187ad058-f13f59d31b606458ace4432053c12f1e8006d82f.tar.gz
master-187ad058-f13f59d31b606458ace4432053c12f1e8006d82f.tar.bz2
master-187ad058-f13f59d31b606458ace4432053c12f1e8006d82f.zip
gcc/musl: rework SSP-support
Make musl provide libssp_nonshared.a and make GCC link it unconditionally if musl is used. This should be a no-op if SSP is disabled and seems to be the only reliable way of dealing with SSP over all packages due to the mess that is linkerflags handling in packages. Signed-off-by: Steven Barth <steven@midlink.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@46108 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'toolchain/musl')
-rw-r--r--toolchain/musl/patches/200-add_libssp_nonshared.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/toolchain/musl/patches/200-add_libssp_nonshared.patch b/toolchain/musl/patches/200-add_libssp_nonshared.patch
new file mode 100644
index 0000000000..af0576585e
--- /dev/null
+++ b/toolchain/musl/patches/200-add_libssp_nonshared.patch
@@ -0,0 +1,58 @@
+From 7ec87fbbc3cac99b4173d082dd6195f47c9a32e7 Mon Sep 17 00:00:00 2001
+From: Steven Barth <steven@midlink.org>
+Date: Mon, 22 Jun 2015 11:01:56 +0200
+Subject: [PATCH] Add libssp_nonshared.a so GCC's is not needed
+
+Signed-off-by: Steven Barth <steven@midlink.org>
+---
+ Makefile | 10 ++++++++--
+ libssp_nonshared/__stack_chk_fail_local.c | 2 ++
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+ create mode 100644 libssp_nonshared/__stack_chk_fail_local.c
+
+diff --git a/Makefile b/Makefile
+index 2eb7b30..bfcabf7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -48,7 +48,7 @@ CRT_LIBS = lib/crt1.o lib/Scrt1.o lib/rcrt1.o lib/crti.o lib/crtn.o
+ STATIC_LIBS = lib/libc.a
+ SHARED_LIBS = lib/libc.so
+ TOOL_LIBS = lib/musl-gcc.specs
+-ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(SHARED_LIBS) $(EMPTY_LIBS) $(TOOL_LIBS)
++ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(SHARED_LIBS) $(EMPTY_LIBS) $(TOOL_LIBS) lib/libssp_nonshared.a
+ ALL_TOOLS = tools/musl-gcc
+
+ LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH)$(SUBARCH).so.1
+@@ -103,7 +103,8 @@ NOSSP_SRCS = $(wildcard crt/*.c) \
+ src/env/__libc_start_main.c src/env/__init_tls.c \
+ src/thread/__set_thread_area.c src/env/__stack_chk_fail.c \
+ src/string/memset.c src/string/memcpy.c \
+- src/ldso/dlstart.c src/ldso/dynlink.c
++ src/ldso/dlstart.c src/ldso/dynlink.c \
++ libssp_nonshared/__stack_chk_fail_local.c
+ $(NOSSP_SRCS:%.c=%.o) $(NOSSP_SRCS:%.c=%.lo): CFLAGS += $(CFLAGS_NOSSP)
+
+ $(CRT_LIBS:lib/%=crt/%): CFLAGS += -DCRT
+@@ -144,6 +145,11 @@ lib/libc.a: $(OBJS)
+ $(AR) rc $@ $(OBJS)
+ $(RANLIB) $@
+
++lib/libssp_nonshared.a: libssp_nonshared/__stack_chk_fail_local.o
++ rm -f $@
++ $(AR) rc $@ $<
++ $(RANLIB) $@
++
+ $(EMPTY_LIBS):
+ rm -f $@
+ $(AR) rc $@
+diff --git a/libssp_nonshared/__stack_chk_fail_local.c b/libssp_nonshared/__stack_chk_fail_local.c
+new file mode 100644
+index 0000000..2b403a6
+--- /dev/null
++++ b/libssp_nonshared/__stack_chk_fail_local.c
+@@ -0,0 +1,2 @@
++extern void __stack_chk_fail(void);
++void __attribute__((visibility ("hidden"))) __stack_chk_fail_local(void) { __stack_chk_fail(); }
+--
+2.1.4
+