diff options
author | Fangrui Song <maskray@google.com> | 2022-03-08 17:17:05 -0800 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2022-03-08 17:17:05 -0800 |
commit | 1c6cc29baf9a4c7129ab2e94b0d4022bfa4f3299 (patch) | |
tree | 008312335cd84ecfcc73c38b72ba836d06e3ca2f /configure.ac | |
parent | edc696a73a7cb07b1aa68792a845a98d036ee7eb (diff) | |
download | glibc-1c6cc29baf9a4c7129ab2e94b0d4022bfa4f3299.tar.gz glibc-1c6cc29baf9a4c7129ab2e94b0d4022bfa4f3299.tar.xz glibc-1c6cc29baf9a4c7129ab2e94b0d4022bfa4f3299.zip |
elf: Support DT_RELR relative relocation format [BZ #27924] maskray/relr
PIE and shared objects usually have many relative relocations. In 2017/2018, SHT_RELR/DT_RELR was proposed on https://groups.google.com/g/generic-abi/c/bX460iggiKg/m/GxjM0L-PBAAJ ("Proposal for a new section type SHT_RELR") and is a pre-standard. RELR usually takes 3% or smaller space than R_*_RELATIVE relocations. The virtual memory size of a mostly statically linked PIE is typically 5~10% smaller. This patch adds ELF_DYNAMIC_DO_RELR to ELF_DYNAMIC_RELOCATE. ELF_DYNAMIC_DO_RELR is ordered before ELF_DYNAMIC_DO_REL[A] so that ifunc resolvers that require relocated got entries have them relocated. This is needed for ppc64 according to Alan Modra.
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 87f67d25ec..d6bb323fa6 100644 --- a/configure.ac +++ b/configure.ac @@ -1367,6 +1367,10 @@ LIBC_LINKER_FEATURE([--depaudit], [-Wl,--depaudit,x], [libc_cv_depaudit=yes], [libc_cv_depaudit=no]) LIBC_CONFIG_VAR([have-depaudit], [$libc_cv_depaudit]) +LIBC_LINKER_FEATURE([-z pack-relative-relocs], [-Wl,-z,pack-relative-relocs], + [libc_cv_relr=yes], [libc_cv_relr=no]) +LIBC_CONFIG_VAR([have-relr], [$libc_cv_relr]) + LIBC_LINKER_FEATURE([--no-dynamic-linker], [-Wl,--no-dynamic-linker], [libc_cv_no_dynamic_linker=yes], |