diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2024-01-04 20:19:39 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2024-01-05 05:49:49 -0800 |
commit | 848746e88ec2aa22e8dea25f2110e2b2c59c712e (patch) | |
tree | 33db2fa3d1b4dc68fec06609cb6bacc4d680a38e /manual | |
parent | 520b1df08de68a3de328b65a25b86300a7ddf512 (diff) | |
download | glibc-848746e88ec2aa22e8dea25f2110e2b2c59c712e.tar glibc-848746e88ec2aa22e8dea25f2110e2b2c59c712e.tar.gz glibc-848746e88ec2aa22e8dea25f2110e2b2c59c712e.tar.bz2 glibc-848746e88ec2aa22e8dea25f2110e2b2c59c712e.zip |
elf: Add ELF_DYNAMIC_AFTER_RELOC to rewrite PLT
Add ELF_DYNAMIC_AFTER_RELOC to allow target specific processing after
relocation.
For x86-64, add
#define DT_X86_64_PLT (DT_LOPROC + 0)
#define DT_X86_64_PLTSZ (DT_LOPROC + 1)
#define DT_X86_64_PLTENT (DT_LOPROC + 3)
1. DT_X86_64_PLT: The address of the procedure linkage table.
2. DT_X86_64_PLTSZ: The total size, in bytes, of the procedure linkage
table.
3. DT_X86_64_PLTENT: The size, in bytes, of a procedure linkage table
entry.
With the r_addend field of the R_X86_64_JUMP_SLOT relocation set to the
memory offset of the indirect branch instruction.
Define ELF_DYNAMIC_AFTER_RELOC for x86-64 to rewrite the PLT section
with direct branch after relocation when the lazy binding is disabled.
PLT rewrite is disabled by default since SELinux may disallow modifying
code pages and ld.so can't detect it in all cases. Use
$ export GLIBC_TUNABLES=glibc.cpu.plt_rewrite=1
to enable PLT rewrite with 32-bit direct jump at run-time or
$ export GLIBC_TUNABLES=glibc.cpu.plt_rewrite=2
to enable PLT rewrite with 32-bit direct jump and on APX processors with
64-bit absolute jump at run-time.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
Diffstat (limited to 'manual')
-rw-r--r-- | manual/tunables.texi | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/manual/tunables.texi b/manual/tunables.texi index b31f16da84..be97190d67 100644 --- a/manual/tunables.texi +++ b/manual/tunables.texi @@ -57,6 +57,7 @@ glibc.pthread.stack_cache_size: 0x2800000 (min: 0x0, max: 0xffffffffffffffff) glibc.cpu.hwcap_mask: 0x6 (min: 0x0, max: 0xffffffffffffffff) glibc.malloc.mmap_max: 0 (min: 0, max: 2147483647) glibc.elision.skip_trylock_internal_abort: 3 (min: 0, max: 2147483647) +glibc.cpu.plt_rewrite: 0 (min: 0, max: 2) glibc.malloc.tcache_unsorted_limit: 0x0 (min: 0x0, max: 0xffffffffffffffff) glibc.cpu.x86_ibt: glibc.cpu.hwcaps: @@ -614,6 +615,16 @@ this tunable. This tunable is specific to 64-bit x86-64. @end deftp +@deftp Tunable glibc.cpu.plt_rewrite +When this tunable is set to @code{1}, the dynamic linker will rewrite +the PLT section with 32-bit direct jump. When it is set to @code{2}, +the dynamic linker will rewrite the PLT section with 32-bit direct +jump and on APX processors with 64-bit absolute jump. + +This tunable is specific to x86-64 and effective only when the lazy +binding is disabled. +@end deftp + @node Memory Related Tunables @section Memory Related Tunables @cindex memory related tunables |