diff options
author | Alexander Kabaev <kan@FreeBSD.org> | 2009-07-14 21:19:13 +0000 |
---|---|---|
committer | Alexander Kabaev <kan@FreeBSD.org> | 2009-07-14 21:19:13 +0000 |
commit | 2286fe763592aa13d320186bf3e233a560af749b (patch) | |
tree | 50c2540e7067c9b377ade1910cd0348aeab454e7 /gnu/lib | |
parent | 0fe0ed8bf88b8aed13fc4533e97b94d2919ac6d5 (diff) | |
download | src-2286fe763592aa13d320186bf3e233a560af749b.tar.gz src-2286fe763592aa13d320186bf3e233a560af749b.zip |
Second attempt at eliminating .text relocations in shared libraries
compiled with stack protector.
Use libssp_nonshared library to pull __stack_chk_fail_local symbol into
each library that needs it instead of pulling it from libc. GCC
generates local calls to this function which result in absolute
relocations put into position-independent code segment, making dynamic
loader do extra work every time given shared library is being relocated
and making affected text pages non-shareable.
Reviewed by: kib
Approved by: re (kib)
Notes
Notes:
svn path=/head/; revision=195697
Diffstat (limited to 'gnu/lib')
-rw-r--r-- | gnu/lib/libgcc/Makefile | 6 | ||||
-rw-r--r-- | gnu/lib/libssp/libssp_nonshared/Makefile | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/gnu/lib/libgcc/Makefile b/gnu/lib/libgcc/Makefile index 49b96e6e3a03..399aff85bb0b 100644 --- a/gnu/lib/libgcc/Makefile +++ b/gnu/lib/libgcc/Makefile @@ -7,6 +7,12 @@ SHLIB_NAME= libgcc_s.so.1 SHLIBDIR?= /lib .include <bsd.own.mk> +# +# libgcc is linked in last and thus cannot depend on ssp symbols coming +# from earlier libraries. Disable stack protection for this library. +# +MK_SSP= no + .include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt" .PATH: ${GCCDIR}/config/${GCC_CPU} ${GCCDIR}/config ${GCCDIR} diff --git a/gnu/lib/libssp/libssp_nonshared/Makefile b/gnu/lib/libssp/libssp_nonshared/Makefile index 1dcd54f6d557..94544951fdfd 100644 --- a/gnu/lib/libssp/libssp_nonshared/Makefile +++ b/gnu/lib/libssp/libssp_nonshared/Makefile @@ -13,6 +13,6 @@ SRCS= ssp-local.c CFLAGS+= -DHAVE_CONFIG_H CFLAGS+= -I${.CURDIR}/.. -I${GCCLIB}/libssp -I${GCCLIB}/include -CFLAGS+= -fPIC -DPIC +CFLAGS+= -fPIC -DPIC -fvisibility=hidden .include <bsd.lib.mk> |