Commit: Allow relro to be enabled by default on AArch64, ARM and Score.

Nick Clifton nickc@redhat.com
Fri Aug 19 08:27:00 GMT 2016


Hi Guys,

  Despite the linker's configure script enabling relro by default for
  most linux targets, and supporting a --enable-relro option for all
  targets, a few were not in fact enabling relro unless the "-z relro"
  command line option was used.  This was due to the fact that these
  targets define their own before_parse() emulation function, and they
  were not initializing the relro field in the link_info structure.

  Fixed with the following patch, tested all over the place.

Cheers
  Nick
  
ld/ChangeLog
2016-08-19  Nick Clifton  <nickc@redhat.com>

	* emultempl/aarch64elf.em (before_parse): Initialise the relro
	field in the link_info structure.
	* emultempl/armelf.em (before_parse): Likewise.
	* emultempl/linux.em (before_parse): Likewise.
	* emultempl/scoreelf.em (before_parse): Likewise.

diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index a17553a..9f2c349 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -43,6 +43,7 @@ gld${EMULATION_NAME}_before_parse (void)
   input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
   config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
   config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`;
+  link_info.relro = DEFAULT_LD_Z_RELRO;
 }
 
 static void
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em
index c21f6a8..2678740 100644
--- a/ld/emultempl/armelf.em
+++ b/ld/emultempl/armelf.em
@@ -53,6 +53,7 @@ gld${EMULATION_NAME}_before_parse (void)
   input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
   config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
   config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`;
+  link_info.relro = DEFAULT_LD_Z_RELRO;
 }
 
 static void
diff --git a/ld/emultempl/linux.em b/ld/emultempl/linux.em
index c28e978..64a9130 100644
--- a/ld/emultempl/linux.em
+++ b/ld/emultempl/linux.em
@@ -50,6 +50,7 @@ gld${EMULATION_NAME}_before_parse (void)
   ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
   input_flags.dynamic = TRUE;
   config.has_shared = TRUE;
+  link_info.relro = DEFAULT_LD_Z_RELRO;
 }
 
 /* Try to open a dynamic archive.  This is where we know that Linux
diff --git a/ld/emultempl/scoreelf.em b/ld/emultempl/scoreelf.em
index 6433365..7df7f5f 100644
--- a/ld/emultempl/scoreelf.em
+++ b/ld/emultempl/scoreelf.em
@@ -39,6 +39,7 @@ gld${EMULATION_NAME}_before_parse (void)
   input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
   config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
   config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`;
+  link_info.relro = DEFAULT_LD_Z_RELRO;
 }
 
 static void



More information about the Binutils mailing list