aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GNUmakefile2
-rwxr-xr-xconfigure10
2 files changed, 9 insertions, 3 deletions
diff --git a/GNUmakefile b/GNUmakefile
index 015ca92..99a2f75 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -51,6 +51,8 @@ dependency/build/libmusl-extract: dependency/sources/$(LIBMUSL).tar.gz | depende
touch $@
dependency/build/libmusl-configure: dependency/build/libmusl-extract
+ # tweak musl gcc wrapper/spec file to support static PIE linking
+ sed -i 's#%{pie:S}crt1.o#%{pie:%{static:rcrt1.o%s;:Scrt1.o%s};:crt1.o%s}#' $(dir $<)/$(LIBMUSL)/tools/musl-gcc.specs.sh
cd $(dir $<)/$(LIBMUSL) && ./configure --prefix=$(DEPS_PREFIX) --syslibdir=$(DEPS_PREFIX)/lib
touch $@
diff --git a/configure b/configure
index 112a027..dfb8386 100755
--- a/configure
+++ b/configure
@@ -227,9 +227,13 @@ tryflag CFLAGS -fPIE
tryflag CFLAGS_AUTO -fstack-protector-all
tryldflag LDFLAGS -Wl,-z,now
tryldflag LDFLAGS -Wl,-z,relro
-# You can not link libraries with -pie (unless you add a main() function).
-# So keep this a vis-only flag.
-if test "$static" != "yes" ; then
+# in theory it should be perfectly fine to produce a staticically linked PIE
+# however in practice it is not yet properly supported by gcc:
+#
+# cc -fPIE -pie --static
+#
+# will always add a PT_INTERP referencing the dynamic loader/linker
+if test "$static" != "yes" || tryldflag LDFLAGS_AUTO -Wl,--no-dynamic-linker ; then
tryldflag LDFLAGS_AUTO -pie
fi