diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-04-14 04:12:55 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-04-14 04:13:11 -0700 |
commit | 889c2a67967f7047c245779a0a0fd8ba8796846e (patch) | |
tree | c6b6b56e0438ab85f6f508a13ac5287ed113b395 /ld/ld.texinfo | |
parent | 887bddbcad907021f4cb98168cd51f2631e6cfc8 (diff) | |
download | gdb-889c2a67967f7047c245779a0a0fd8ba8796846e.zip gdb-889c2a67967f7047c245779a0a0fd8ba8796846e.tar.gz gdb-889c2a67967f7047c245779a0a0fd8ba8796846e.tar.bz2 |
Add -z noextern-protected-data to ld for ELF/x86
Address of protected data defined in the shared library may be external,
i.e., due to copy relocation. By default, linker backend checks if
relocations against protected data symbols are valid for building shared
library and issues an error if relocation isn't allowed. The new option
override linker backend default. When -z noextern-protected-data is used,
updates on protected data symbols by another module won't be visibile
to the resulting shared library. This option is specific to ELF/i386
and ELF/x86-64.
bfd/
PR ld/pr17709
* elflink.c (_bfd_elf_adjust_dynamic_copy): Check
info->extern_protected_data when warning copy relocs against
protected symbols.
(_bfd_elf_symbol_refs_local_p): Check info->extern_protected_data
when checking protected non-function symbols.
include/
PR ld/pr17709
* bfdlink.h (bfd_link_info): Add extern_protected_data.
ld/
PR ld/pr17709
* ld.texinfo: Document "-z noextern-protected-data".
* ldmain.c (main): Initialize link_info.extern_protected_data
to -1.
* lexsup.c (elf_shlib_list_options): Add
"-z [no]extern-protected-data".
* emulparams/elf32_x86_64.sh: Source extern_protected_data.sh.
* emulparams/elf_i386.sh: Likewise.
* emulparams/elf_i386_be.sh: Likewise.
* emulparams/elf_i386_chaos.sh: Likewise.
* emulparams/elf_i386_ldso.sh: Likewise.
* emulparams/elf_i386_vxworks.sh: Likewise.
* emulparams/elf_k1om.sh: Likewise.
* emulparams/elf_l1om.sh: Likewise.
* emulparams/elf_x86_64.sh: Source extern_protected_data.sh.
(PARSE_AND_LIST_OPTIONS): Renamed to ...
(PARSE_AND_LIST_OPTIONS_BNDPLT): This.
(PARSE_AND_LIST_ARGS_CASE_Z): Renamed to ...
(PARSE_AND_LIST_ARGS_CASE_Z_BNDPLT): This.
(PARSE_AND_LIST_OPTIONS): Append $PARSE_AND_LIST_OPTIONS_BNDPLT.
(PARSE_AND_LIST_ARGS_CASE_Z): Append
$PARSE_AND_LIST_ARGS_CASE_Z_BNDPLT.
* emulparams/extern_protected_data.sh: New file.
ld/testsuite/
PR ld/pr17709
* ld-i386/i386.exp: Run protected6b.
* ld-i386/protected6b.d: New file.
* ld-x86-64/protected6b.d: Likewise.
* ld-x86-64/x86-64.exp: Run protected6b.
Diffstat (limited to 'ld/ld.texinfo')
-rw-r--r-- | ld/ld.texinfo | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 5384c98..4348c88 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -1146,6 +1146,14 @@ Specifying zero will override any default non-zero sized @item bndplt Always generate BND prefix in PLT entries. Supported for Linux/x86_64. +@item noextern-protected-data +Don't treat protected data symbol as external when building shared +library. This option overrides linker backend default. It can be used +to workaround incorrect relocations against protected data symbols +generated by compiler. Updates on protected data symbols by another +module aren't visibile to the resulting shared library. Supported for +i386 and x86-64. + @end table Other keywords are ignored for Solaris compatibility. |