From 6b1edb94fedc7103b4929354d27304d0bd756f49 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 22 Jun 2016 05:39:22 -0700 Subject: [PATCH] gold: Add a linker configure option --enable-relro Add a configure option --enable-relro to decide whether -z relro should be enabled by default. Default to yes. PR ld/20283 * NEWS: Mention --enable-relro. * configure.ac: Add --enable-relro. (DEFAULT_LD_Z_RELRO): New. Set by --enable-relro and default to 1. * config.in: Regenerated. * configure: Likewise. * options.h (General_options::relro): Default to DEFAULT_LD_Z_RELRO. --- gold/ChangeLog | 12 ++++++++++++ gold/NEWS | 3 +++ gold/config.in | 3 +++ gold/configure | 21 +++++++++++++++++++++ gold/configure.ac | 17 +++++++++++++++++ gold/options.h | 2 +- 6 files changed, 57 insertions(+), 1 deletion(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 5177da2..e8980b3 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,15 @@ +2016-06-22 H.J. Lu + + PR ld/20283 + * NEWS: Mention --enable-relro. + * configure.ac: Add --enable-relro. + (DEFAULT_LD_Z_RELRO): New. Set by --enable-relro and default + to 1. + * config.in: Regenerated. + * configure: Likewise. + * options.h (General_options::relro): Default to + DEFAULT_LD_Z_RELRO. + 2016-06-20 Cary Coutant * NEWS: Add new features in 1.12. diff --git a/gold/NEWS b/gold/NEWS index 6f2cf3f..a400489 100644 --- a/gold/NEWS +++ b/gold/NEWS @@ -1,5 +1,8 @@ Changes in 1.12: +* Add a configure option --enable-relro to decide whether -z relro should + be enabled by default. Default to yes. + * Add support for s390, MIPS, AArch64, and TILE-Gx architectures. * Add support for STT_GNU_IFUNC symbols. diff --git a/gold/config.in b/gold/config.in index 88e8712..d9f7b76 100644 --- a/gold/config.in +++ b/gold/config.in @@ -10,6 +10,9 @@ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD +/* Define to 1 if you want to enable -z relro in ELF linker by default. */ +#undef DEFAULT_LD_Z_RELRO + /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS diff --git a/gold/configure b/gold/configure index 6d4f234..a40b2b5 100755 --- a/gold/configure +++ b/gold/configure @@ -792,6 +792,7 @@ with_sysroot enable_gold enable_threads enable_plugins +enable_relro enable_targets with_lib_path enable_dependency_tracking @@ -1441,6 +1442,7 @@ Optional Features: --enable-gold[=ARG] build gold [ARG={default,yes,no}] --enable-threads multi-threaded linking --enable-plugins linker plugins + --enable-relro enable -z relro in ELF linker by default --enable-targets alternative target configurations --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors @@ -3353,6 +3355,25 @@ else fi +# Decide if -z relro should be enabled in ELF linker by default. +ac_default_ld_z_relro=unset +# Provide a configure time option to override our default. +# Check whether --enable-relro was given. +if test "${enable_relro+set}" = set; then : + enableval=$enable_relro; case "${enableval}" in + yes) ac_default_ld_z_relro=1 ;; + no) ac_default_ld_z_relro=0 ;; +esac +fi +if test "${ac_default_ld_z_relro}" = unset; then + ac_default_ld_z_relro=1 +fi + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LD_Z_RELRO $ac_default_ld_z_relro +_ACEOF + + # Check whether --enable-targets was given. if test "${enable_targets+set}" = set; then : enableval=$enable_targets; case "${enableval}" in diff --git a/gold/configure.ac b/gold/configure.ac index 695a2fd..90e2c22 100644 --- a/gold/configure.ac +++ b/gold/configure.ac @@ -114,6 +114,23 @@ if test "$plugins" = "yes"; then fi AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes") +# Decide if -z relro should be enabled in ELF linker by default. +ac_default_ld_z_relro=unset +# Provide a configure time option to override our default. +AC_ARG_ENABLE(relro, + AS_HELP_STRING([--enable-relro], + [enable -z relro in ELF linker by default]), +[case "${enableval}" in + yes) ac_default_ld_z_relro=1 ;; + no) ac_default_ld_z_relro=0 ;; +esac])dnl +if test "${ac_default_ld_z_relro}" = unset; then + ac_default_ld_z_relro=1 +fi +AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_RELRO, + $ac_default_ld_z_relro, + [Define to 1 if you want to enable -z relro in ELF linker by default.]) + AC_ARG_ENABLE([targets], [ --enable-targets alternative target configurations], [case "${enableval}" in diff --git a/gold/options.h b/gold/options.h index 877e6d1..23c9658 100644 --- a/gold/options.h +++ b/gold/options.h @@ -1336,7 +1336,7 @@ class General_options DEFINE_bool(origin, options::DASH_Z, '\0', false, N_("Mark DSO to indicate that needs immediate $ORIGIN " "processing at runtime"), NULL); - DEFINE_bool(relro, options::DASH_Z, '\0', false, + DEFINE_bool(relro, options::DASH_Z, '\0', DEFAULT_LD_Z_RELRO, N_("Where possible mark variables read-only after relocation"), N_("Don't mark variables read-only after relocation")); DEFINE_bool(text, options::DASH_Z, '\0', false, -- 2.7.4