ld: Add --enable-textrel-check=[no|yes|warning|error]
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 28 May 2020 11:21:04 +0000 (04:21 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 28 May 2020 11:21:16 +0000 (04:21 -0700)
Add a configure option, --enable-textrel-check=[no|yes|warning|error],
to decide what ELF linker should do by default with DT_TEXTREL in an
executable or shared library.

PR ld/20824
* NEWS: Mention --enable-textrel-check=[no|yes|warning|error].
* configure.ac: Add --enable-textrel-check=[no|yes|warning|error].
(DEFAULT_LD_TEXTREL_CHECK): New AC_DEFINE_UNQUOTED.
(DEFAULT_LD_TEXTREL_CHECK_WARNING): Likewise.
* ldmain.c (main): Initialize link_info.textrel_check to
DEFAULT_LD_TEXTREL_CHECK.
* lexsup.c (ld_options): Check DEFAULT_LD_TEXTREL_CHECK_WARNING.
* config.in: Regenerated.
* configure: Likewise.

ld/ChangeLog
ld/NEWS
ld/config.in
ld/configure
ld/configure.ac
ld/ldmain.c
ld/lexsup.c

index 580f1473aad14d0d33fe7f08924808ed4496e8fa..aac749cadaad116bab6a504852728fb4b2c4f621 100644 (file)
@@ -1,3 +1,16 @@
+2020-05-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/20824
+       * NEWS: Mention --enable-textrel-check=[no|yes|warning|error].
+       * configure.ac: Add --enable-textrel-check=[no|yes|warning|error].
+       (DEFAULT_LD_TEXTREL_CHECK): New AC_DEFINE_UNQUOTED.
+       (DEFAULT_LD_TEXTREL_CHECK_WARNING): Likewise.
+       * ldmain.c (main): Initialize link_info.textrel_check to
+       DEFAULT_LD_TEXTREL_CHECK.
+       * lexsup.c (ld_options): Check DEFAULT_LD_TEXTREL_CHECK_WARNING.
+       * config.in: Regenerated.
+       * configure: Likewise.
+
 2020-05-28  Nick Clifton  <nickc@redhat.com>
 
        * lexsup.c (parse_args): Generate an error if a name is not
diff --git a/ld/NEWS b/ld/NEWS
index 2240aeb788a8bc133a38543ac1d880a712e24429..62b74b1ac9f44ab701ea624ecc7cb954c3465b98 100644 (file)
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,5 +1,9 @@
 -*- text -*-
 
+* Add a configure option, --enable-textrel-check=[no|yes|warning|error],
+  to decide what ELF linker should do by default with DT_TEXTREL in an
+  executable or shared library.
+
 * The -Map=<filename> command line option has been extended so that if
   <filename> is a directory then <filename>/<output-filename>.map will be
   created.
index d93c9b0830087f19475c5011779d80f7c1d17ab0..8cadcba60f1ccd213e4c8e48cd8eefa25b8c5e74 100644 (file)
 /* Define if you want compressed debug sections by default. */
 #undef DEFAULT_FLAG_COMPRESS_DEBUG
 
+/* The default method for DT_TEXTREL check in ELF linker. */
+#undef DEFAULT_LD_TEXTREL_CHECK
+
+/* Define to 1 if DT_TEXTREL check is warning in ELF linker by default. */
+#undef DEFAULT_LD_TEXTREL_CHECK_WARNING
+
 /* Define to 1 if you want to enable -z relro in ELF linker by default. */
 #undef DEFAULT_LD_Z_RELRO
 
index e1dbc9574773d09d5efa0ad6022c14109463d1e0..e70e7c304b13c9e20fcf758c8e0a1aa9b87dd91b 100755 (executable)
@@ -831,6 +831,7 @@ enable_got
 enable_compressed_debug_sections
 enable_new_dtags
 enable_relro
+enable_textrel_check
 enable_separate_code
 enable_default_hash_style
 enable_werror
@@ -1498,6 +1499,8 @@ Optional Features:
                           compress debug sections by default]
   --enable-new-dtags      set DT_RUNPATH instead of DT_RPATH by default]
   --enable-relro          enable -z relro in ELF linker by default
+  --enable-textrel-check=[yes|no|warning|error]
+                          enable DT_TEXTREL check in ELF linker
   --enable-separate-code  enable -z separate-code in ELF linker by default
   --enable-default-hash-style={sysv,gnu,both}
                           use this default hash style
@@ -12032,7 +12035,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12035 "configure"
+#line 12038 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12138,7 +12141,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12141 "configure"
+#line 12144 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -15876,6 +15879,16 @@ if test "${enable_relro+set}" = set; then :
 esac
 fi
 
+# Decide if DT_TEXTREL check should be enabled in ELF linker.
+ac_default_ld_textrel_check=unset
+# Check whether --enable-textrel-check was given.
+if test "${enable_textrel_check+set}" = set; then :
+  enableval=$enable_textrel_check; case "${enableval}" in
+  yes|no|warning|error) ac_default_ld_textrel_check=${enableval} ;;
+esac
+fi
+
+
 # Decide if -z separate-code should be enabled in ELF linker by default.
 ac_default_ld_z_separate_code=unset
 # Check whether --enable-separate-code was given.
@@ -17618,6 +17631,30 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+ac_default_ld_textrel_check_warning=0
+case "${ac_default_ld_textrel_check}" in
+  unset|no)
+    ac_default_ld_textrel_check=textrel_check_none
+    ;;
+  yes|warning)
+    ac_default_ld_textrel_check=textrel_check_warning
+    ac_default_ld_textrel_check_warning=1
+    ;;
+  error)
+    ac_default_ld_textrel_check=textrel_check_error
+    ;;
+esac
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_LD_TEXTREL_CHECK $ac_default_ld_textrel_check
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_LD_TEXTREL_CHECK_WARNING $ac_default_ld_textrel_check_warning
+_ACEOF
+
+
 if test "${ac_default_ld_z_separate_code}" = unset; then
   ac_default_ld_z_separate_code=0
 fi
index b5e849d84abc5eef74a4ad2b72028adfb7e1e5dd..99957df3763bd3e1587fe71070553873dce30b42 100644 (file)
@@ -176,6 +176,15 @@ AC_ARG_ENABLE(relro,
   no)  ac_default_ld_z_relro=0 ;;
 esac])dnl
 
+# Decide if DT_TEXTREL check should be enabled in ELF linker.
+ac_default_ld_textrel_check=unset
+AC_ARG_ENABLE([textrel-check],
+             AC_HELP_STRING([--enable-textrel-check=@<:@yes|no|warning|error@:>@],
+                            [enable DT_TEXTREL check in ELF linker]),
+[case "${enableval}" in
+  yes|no|warning|error) ac_default_ld_textrel_check=${enableval} ;;
+esac])
+
 # Decide if -z separate-code should be enabled in ELF linker by default.
 ac_default_ld_z_separate_code=unset
 AC_ARG_ENABLE(separate-code,
@@ -447,6 +456,26 @@ 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_default_ld_textrel_check_warning=0
+case "${ac_default_ld_textrel_check}" in
+  unset|no)
+    ac_default_ld_textrel_check=textrel_check_none
+    ;;
+  yes|warning)
+    ac_default_ld_textrel_check=textrel_check_warning
+    ac_default_ld_textrel_check_warning=1
+    ;;
+  error)
+    ac_default_ld_textrel_check=textrel_check_error
+    ;;
+esac
+AC_DEFINE_UNQUOTED(DEFAULT_LD_TEXTREL_CHECK,
+  $ac_default_ld_textrel_check,
+  [The default method for DT_TEXTREL check in ELF linker.])
+AC_DEFINE_UNQUOTED(DEFAULT_LD_TEXTREL_CHECK_WARNING,
+  $ac_default_ld_textrel_check_warning,
+  [Define to 1 if DT_TEXTREL check is warning in ELF linker by default.])
+
 if test "${ac_default_ld_z_separate_code}" = unset; then
   ac_default_ld_z_separate_code=0
 fi
index 3499e7c784ed0c77dd566cab6df02bb5eb634b69..e2c559ea3e03fc7d8250ba2327f70d293c788455 100644 (file)
@@ -286,6 +286,7 @@ main (int argc, char **argv)
   link_info.combreloc = TRUE;
   link_info.strip_discarded = TRUE;
   link_info.prohibit_multiple_definition_absolute = FALSE;
+  link_info.textrel_check = DEFAULT_LD_TEXTREL_CHECK;
   link_info.emit_hash = DEFAULT_EMIT_SYSV_HASH;
   link_info.emit_gnu_hash = DEFAULT_EMIT_GNU_HASH;
   link_info.callbacks = &link_callbacks;
index 781f58aff7379b1363320eb4f36e2c5372aee05c..412e2e60267119192073359c87ec904371130011 100644 (file)
@@ -517,7 +517,12 @@ static const struct ld_option ld_options[] =
     '\0', NULL, N_("Warn if start of section changes due to alignment"),
     TWO_DASHES },
   { {"warn-textrel", no_argument, NULL, OPTION_WARN_TEXTREL},
-    '\0', NULL, N_("Warn if outpout has DT_TEXTREL"),
+    '\0', NULL,
+#if DEFAULT_LD_TEXTREL_CHECK_WARNING
+    N_("Warn if outpout has DT_TEXTREL (default)"),
+#else
+    N_("Warn if outpout has DT_TEXTREL"),
+#endif
     TWO_DASHES },
   { {"warn-shared-textrel", no_argument, NULL, OPTION_WARN_TEXTREL},
     '\0', NULL, NULL, NO_HELP },