We have kbind(2), so we can do RELRO process *ALWAYS*, and not just when
-znow is used to perform all relocations at load-time.
So, teach ld to just test for -zrelro.
ok?
Philip
Index: gnu/usr.bin/binutils-2.17/ld/genscripts.sh
===================================================================
RCS file: /cvs/src/gnu/usr.bin/binutils-2.17/ld/genscripts.sh,v
retrieving revision 1.2
diff -u -p -r1.2 genscripts.sh
--- gnu/usr.bin/binutils-2.17/ld/genscripts.sh 24 Apr 2011 20:19:25 -0000
1.2
+++ gnu/usr.bin/binutils-2.17/ld/genscripts.sh 7 Aug 2016 03:18:36 -0000
@@ -278,7 +278,7 @@ if test -n "$GENERATE_COMBRELOC_SCRIPT";
LD_FLAG=w
RELRO_NOW=" "
COMBRELOC=ldscripts/${EMULATION_NAME}.xw.tmp
- ( echo "/* Script for -z combreloc -z now -z relro: combine and sort reloc
sections */"
+ ( echo "/* Script for -z combreloc -z relro: combine and sort reloc sections
*/"
. ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME}
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xw
@@ -309,7 +309,7 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; the
LD_FLAG=wshared
RELRO_NOW=" "
COMBRELOC=ldscripts/${EMULATION_NAME}.xsw.tmp
- ( echo "/* Script for --shared -z combreloc -z now -z relro: shared
library, combine & sort relocs */"
+ ( echo "/* Script for --shared -z combreloc -z relro: shared library,
combine & sort relocs */"
. ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME}
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsw
@@ -342,7 +342,7 @@ if test -n "$GENERATE_PIE_SCRIPT"; then
LD_FLAG=wpie
RELRO_NOW=" "
COMBRELOC=ldscripts/${EMULATION_NAME}.xdw.tmp
- ( echo "/* Script for -pie -z combreloc -z now -z relro: position
independent executable, combine & sort relocs */"
+ ( echo "/* Script for -pie -z combreloc -z relro: position independent
executable, combine & sort relocs */"
. ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME}
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdw
Index: gnu/usr.bin/binutils-2.17/ld/emultempl/elf32.em
===================================================================
RCS file: /cvs/src/gnu/usr.bin/binutils-2.17/ld/emultempl/elf32.em,v
retrieving revision 1.7
diff -u -p -r1.7 elf32.em
--- gnu/usr.bin/binutils-2.17/ld/emultempl/elf32.em 21 Jun 2016 02:55:57
-0000 1.7
+++ gnu/usr.bin/binutils-2.17/ld/emultempl/elf32.em 7 Aug 2016 03:18:38
-0000
@@ -1940,8 +1940,7 @@ fi
if test -n "$GENERATE_PIE_SCRIPT" ; then
if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
echo ' ; else if (link_info.pie && link_info.combreloc' >>
e${EMULATION_NAME}.c
-echo ' && link_info.relro' >> e${EMULATION_NAME}.c
-echo ' && (link_info.flags & DF_BIND_NOW)) return' >>
e${EMULATION_NAME}.c
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xdw >>
e${EMULATION_NAME}.c
echo ' ; else if (link_info.pie && link_info.combreloc &&
config.data_bss_contig == TRUE) return' >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xdcz >> e${EMULATION_NAME}.c
@@ -1956,8 +1955,7 @@ fi
if test -n "$GENERATE_SHLIB_SCRIPT" ; then
if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
echo ' ; else if (link_info.shared && link_info.combreloc' >>
e${EMULATION_NAME}.c
-echo ' && link_info.relro' >> e${EMULATION_NAME}.c
-echo ' && (link_info.flags & DF_BIND_NOW)) return' >>
e${EMULATION_NAME}.c
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xsw >>
e${EMULATION_NAME}.c
echo ' ; else if (link_info.shared && link_info.combreloc) return' >>
e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xsc >>
e${EMULATION_NAME}.c
@@ -1968,8 +1966,7 @@ fi
echo ' ; else if (config.data_bss_contig == TRUE) return' >>
e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xz >> e${EMULATION_NAME}.c
if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
-echo ' ; else if (link_info.combreloc && link_info.relro' >>
e${EMULATION_NAME}.c
-echo ' && (link_info.flags & DF_BIND_NOW)) return' >>
e${EMULATION_NAME}.c
+echo ' ; else if (link_info.combreloc && link_info.relro) return' >>
e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
echo ' ; else if (link_info.combreloc) return' >>
e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
@@ -2002,8 +1999,7 @@ fi
if test -n "$GENERATE_PIE_SCRIPT" ; then
if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
cat >>e${EMULATION_NAME}.c <<EOF
- else if (link_info.pie && link_info.combreloc
- && link_info.relro && (link_info.flags & DF_BIND_NOW))
+ else if (link_info.pie && link_info.combreloc && link_info.relro)
return "ldscripts/${EMULATION_NAME}.xdw";
else if (link_info.pie && link_info.combreloc && config.data_bss_contig ==
TRUE)
return "ldscripts/${EMULATION_NAME}.xdcz";
@@ -2021,8 +2017,7 @@ fi
if test -n "$GENERATE_SHLIB_SCRIPT" ; then
if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
cat >>e${EMULATION_NAME}.c <<EOF
- else if (link_info.shared && link_info.combreloc
- && link_info.relro && (link_info.flags & DF_BIND_NOW))
+ else if (link_info.shared && link_info.combreloc && link_info.relro)
return "ldscripts/${EMULATION_NAME}.xsw";
else if (link_info.shared && link_info.combreloc)
return "ldscripts/${EMULATION_NAME}.xsc";
@@ -2039,8 +2034,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
EOF
if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
cat >>e${EMULATION_NAME}.c <<EOF
- else if (link_info.combreloc && link_info.relro
- && (link_info.flags & DF_BIND_NOW))
+ else if (link_info.combreloc && link_info.relro)
return "ldscripts/${EMULATION_NAME}.xw";
else if (link_info.combreloc)
return "ldscripts/${EMULATION_NAME}.xc";