[PATCH 0/2] Improve -z mark-plt
H.J. Lu
hjl.tools@gmail.com
Fri Jan 5 21:50:13 GMT 2024
Add --enable-make-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-make-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-elf/indirect-extern-access-2.rd | 2 +-
ld/testsuite/ld-elf/pr23161d.rd | 2 +-
ld/testsuite/ld-ifunc/ifunc-16-x86-64-now.d | 2 +-
ld/testsuite/ld-ifunc/ifunc-16-x86-64.d | 2 +-
.../ld-ifunc/ifunc-2-local-x86-64-now.d | 2 +-
ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d | 2 +-
ld/testsuite/ld-ifunc/ifunc-2-x86-64-now.d | 2 +-
ld/testsuite/ld-ifunc/ifunc-2-x86-64.d | 2 +-
ld/testsuite/ld-ifunc/ifunc-20-x86-64.d | 2 +-
ld/testsuite/ld-ifunc/ifunc-25c-x86.d | 2 +-
ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d | 2 +-
ld/testsuite/ld-ifunc/pr17154-x86-64-now.d | 2 +-
ld/testsuite/ld-ifunc/pr17154-x86-64.d | 2 +-
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 | 47 +++++-
26 files changed, 281 insertions(+), 83 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