[PATCH v2 0/2] Improve -z mark-plt
H.J. Lu
hjl.tools@gmail.com
Sat Jan 6 22:09:59 GMT 2024
Changes in v2:
1. Fix typos. It should be --enable-mark-plt, not --enable-make-plt.
2. Remove tests changes for -z mark-plt.
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.
When -z mark-plt is used to add DT_X86_64_PLT, DT_X86_64_PLTSZ and
DT_X86_64_PLTENT, the r_addend field of the R_X86_64_JUMP_SLOT relocation
stores the offset of the indirect branch instruction. However, glibc
versions which don't have this commit in glibc 2.36:
commit f8587a61892cbafd98ce599131bf4f103466f084
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Fri May 20 19:21:48 2022 -0700
x86-64: Ignore r_addend for R_X86_64_GLOB_DAT/R_X86_64_JUMP_SLOT
According to x86-64 psABI, r_addend should be ignored for R_X86_64_GLOB_DAT
and R_X86_64_JUMP_SLOT. Since linkers always set their r_addends to 0, we
can ignore their r_addends.
Reviewed-by: Fangrui Song <maskray@google.com>
won't ignore the r_addend value in the R_X86_64_JUMP_SLOT relocation.
Although this commit has been backported to glibc 2.33/2.34/2.35 release
branches, it is safer to require glibc 2.36 for such binaries.
Extend the glibc version dependency of GLIBC_ABI_DT_RELR for DT_RELR to
also add GLIBC_2.36 version dependency for -z mark-plt on the the shared C
library if it provides a GLIBC_2.XX symbol version.
H.J. Lu (2):
elf: Add elf_backend_add_glibc_version_dependency
ld: Add --enable-mark-plt configure option
bfd/elf-bfd.h | 23 ++++
bfd/elf64-x86-64.c | 27 +++++
bfd/elflink.c | 146 +++++++++++++++-----------
bfd/elfxx-target.h | 5 +
ld/NEWS | 5 +
ld/config.in | 4 +
ld/configure | 26 ++++-
ld/configure.ac | 17 +++
ld/emulparams/x86-64-plt.sh | 7 +-
ld/emultempl/elf-x86.em | 17 +++
ld/testsuite/ld-x86-64/mark-plt-1a.rd | 7 ++
ld/testsuite/ld-x86-64/mark-plt-1b.rd | 7 ++
ld/testsuite/ld-x86-64/x86-64.exp | 14 +++
13 files changed, 240 insertions(+), 65 deletions(-)
create mode 100644 ld/testsuite/ld-x86-64/mark-plt-1a.rd
create mode 100644 ld/testsuite/ld-x86-64/mark-plt-1b.rd
--
2.43.0
More information about the Binutils
mailing list