+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
-*- 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.
/* 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
enable_compressed_debug_sections
enable_new_dtags
enable_relro
+enable_textrel_check
enable_separate_code
enable_default_hash_style
enable_werror
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
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
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
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.
_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
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,
$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
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;
'\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 },