mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
ld: Add --enable-mark-plt configure option
Add --enable-mark-plt linker configure option to mark PLT entries with DT_X86_64_PLT, DT_X86_64_PLTSZ and DT_X86_64_PLTENT dynamic tags by default. * NEWS: Mention -z mark-plt/-z nomark-plt and --enable-mark-plt. * config.in: Regenerated. * configure: Likewise. * configure.ac: Add --enable-mark-plt. (DEFAULT_LD_Z_MARK_PLT): New AC_DEFINE_UNQUOTED. * emulparams/x86-64-plt.sh (PARSE_AND_LIST_OPTIONS_X86_64_PLT): Support DEFAULT_LD_Z_MARK_PLT. * emultempl/elf-x86.em (elf_x86_64_before_parse): New function. (LDEMUL_BEFORE_PARSE): New. Set to elf_x86_64_before_parse for x86-64 targets.
This commit is contained in:
parent
9167304255
commit
f68c9d09a3
5
ld/NEWS
5
ld/NEWS
@ -1,5 +1,10 @@
|
||||
-*- text -*-
|
||||
|
||||
* Add -z mark-plt/-z nomark-plt options to x86-64 ELF linker to mark PLT
|
||||
entries with DT_X86_64_PLT, DT_X86_64_PLTSZ and DT_X86_64_PLTENT dynamic
|
||||
tags. Also added --enable-mark-plt configure option to mark PLT entries
|
||||
by default.
|
||||
|
||||
* Support Intel APX relocations.
|
||||
|
||||
* On RISC-V, add ld target option --[no-]check-uleb128. Should rebuild the
|
||||
|
@ -45,6 +45,10 @@
|
||||
default. */
|
||||
#undef DEFAULT_LD_WARN_RWX_SEGMENTS
|
||||
|
||||
/* Define to 1 if you want to enable -z mark-plt in ELF x86-64 linker by
|
||||
default. */
|
||||
#undef DEFAULT_LD_Z_MARK_PLT
|
||||
|
||||
/* Define to 1 if you want to enable -z relro in ELF linker by default. */
|
||||
#undef DEFAULT_LD_Z_RELRO
|
||||
|
||||
|
26
ld/configure
vendored
26
ld/configure
vendored
@ -852,6 +852,7 @@ enable_new_dtags
|
||||
enable_relro
|
||||
enable_textrel_check
|
||||
enable_separate_code
|
||||
enable_mark_plt
|
||||
enable_warn_execstack
|
||||
enable_error_execstack
|
||||
enable_warn_rwx_segments
|
||||
@ -1546,6 +1547,7 @@ Optional Features:
|
||||
--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-mark-plt enable -z mark-plt in ELF x86-64 linker by default
|
||||
--enable-warn-execstack enable warnings when creating an executable stack
|
||||
--enable-error-execstack
|
||||
turn executable stack warnings into errors
|
||||
@ -11681,7 +11683,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 11684 "configure"
|
||||
#line 11686 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@ -11787,7 +11789,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 11790 "configure"
|
||||
#line 11792 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@ -15682,6 +15684,17 @@ esac
|
||||
fi
|
||||
|
||||
|
||||
# Decide if -z mark-plt should be enabled in ELF x86-64 linker by default.
|
||||
ac_default_ld_z_mark_plt=unset
|
||||
# Check whether --enable-mark-plt was given.
|
||||
if test "${enable_mark_plt+set}" = set; then :
|
||||
enableval=$enable_mark_plt; case "${enableval}" in
|
||||
yes) ac_default_ld_z_mark_plt=1 ;;
|
||||
no) ac_default_ld_z_mark_plt=0 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# By default warn when an executable stack is created due to object files
|
||||
# requesting such, not when the user specifies -z execstack.
|
||||
@ -19365,6 +19378,15 @@ cat >>confdefs.h <<_ACEOF
|
||||
_ACEOF
|
||||
|
||||
|
||||
if test "${ac_default_ld_z_mark_plt}" = unset; then
|
||||
ac_default_ld_z_mark_plt=0
|
||||
fi
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define DEFAULT_LD_Z_MARK_PLT $ac_default_ld_z_mark_plt
|
||||
_ACEOF
|
||||
|
||||
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -213,6 +213,16 @@ AC_ARG_ENABLE(separate-code,
|
||||
no) ac_default_ld_z_separate_code=0 ;;
|
||||
esac])
|
||||
|
||||
# Decide if -z mark-plt should be enabled in ELF x86-64 linker by default.
|
||||
ac_default_ld_z_mark_plt=unset
|
||||
AC_ARG_ENABLE(mark-plt,
|
||||
AS_HELP_STRING([--enable-mark-plt],
|
||||
[enable -z mark-plt in ELF x86-64 linker by default]),
|
||||
[case "${enableval}" in
|
||||
yes) ac_default_ld_z_mark_plt=1 ;;
|
||||
no) ac_default_ld_z_mark_plt=0 ;;
|
||||
esac])
|
||||
|
||||
|
||||
# By default warn when an executable stack is created due to object files
|
||||
# requesting such, not when the user specifies -z execstack.
|
||||
@ -562,6 +572,13 @@ AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_SEPARATE_CODE,
|
||||
$ac_default_ld_z_separate_code,
|
||||
[Define to 1 if you want to enable -z separate-code in ELF linker by default.])
|
||||
|
||||
if test "${ac_default_ld_z_mark_plt}" = unset; then
|
||||
ac_default_ld_z_mark_plt=0
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_MARK_PLT,
|
||||
$ac_default_ld_z_mark_plt,
|
||||
[Define to 1 if you want to enable -z mark-plt in ELF x86-64 linker by default.])
|
||||
|
||||
|
||||
AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_EXECSTACK,
|
||||
$ac_default_ld_warn_execstack,
|
||||
|
@ -1,5 +1,10 @@
|
||||
PARSE_AND_LIST_OPTIONS_X86_64_PLT='
|
||||
fprintf (file, _("\
|
||||
if (DEFAULT_LD_Z_MARK_PLT != 0)
|
||||
fprintf (file, _("\
|
||||
-z mark-plt Mark PLT with dynamic tags (default)\n\
|
||||
-z nomark-plt Do not mark PLT with dynamic tags\n"));
|
||||
else
|
||||
fprintf (file, _("\
|
||||
-z mark-plt Mark PLT with dynamic tags\n\
|
||||
-z nomark-plt Do not mark PLT with dynamic tags (default)\n"));
|
||||
'
|
||||
|
@ -56,3 +56,20 @@ EOF
|
||||
|
||||
LDEMUL_BEFORE_PARSE=elf_x86_before_parse
|
||||
fi
|
||||
|
||||
case x${OUTPUT_FORMAT}${CALL_NOP_BYTE} in
|
||||
x*x86-64*0x67)
|
||||
fragment <<EOF
|
||||
|
||||
static void
|
||||
elf_x86_64_before_parse (void)
|
||||
{
|
||||
params.mark_plt = DEFAULT_LD_Z_MARK_PLT;
|
||||
|
||||
elf_x86_before_parse ();
|
||||
}
|
||||
EOF
|
||||
|
||||
LDEMUL_BEFORE_PARSE=elf_x86_64_before_parse
|
||||
;;
|
||||
esac
|
||||
|
Loading…
Reference in New Issue
Block a user