diff options
author | Fangrui Song <maskray@google.com> | 2021-11-24 18:05:45 -0800 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2021-12-03 14:59:51 -0800 |
commit | f48364f97320ffc60dd4b567dd4e4f2336c5e619 (patch) | |
tree | fb1125ae7212902da6f886238aa9ebb02e0c2b46 /gold/testsuite/relr_arm.sh | |
parent | 92228a334ba2a775277fc4a8441dd926c26d33c1 (diff) | |
download | binutils-gdb-f48364f97320ffc60dd4b567dd4e4f2336c5e619.tar.gz |
gold: Add --pack-dyn-relocs=relr for arm/aarch64/x86-64 [PR 28601]users/maskray/gold-relr
elfcpp/
* elfcpp.h (SHT): New constant SHT_RELR.
(DT): New constants DT_SYMTAB_SHNDX/DT_RELRSZ/DT_RELR/DT_RELRENT.
(Elf_sizes): New static data member relr_size.
gold/
* options.h (class General_options): Add pack_dyn_relocs,
Pack_dyn_relocs, relr_relocs, and pack_dyn_relocs_enum_.
* options.cc (General_options::relr_relocs): Define.
* reloc-types.h (Reloc_types<elfcpp::SHT_RELR, size, big_endian>):
New.
* layout.h (Layout::add_target_dynamic_tags): Add dyn_relr.
* layout.cc (Layout::add_target_dynamic_tags): Add dyn_relr.
* output.h (set_current_data_size_for_child): Remove assert.
(Output_reloc<elfcpp::SHT_RELR, dynamic, size, big_endian>): New.
(Output_data_reloc<elfcpp::SHT_RELR, dynamic, size, big_endian>): New.
* output.cc (Output_data_reloc_base): Set entsize for SHT_RELR.
(do_write): Define.
(Output_data_reloc<elfcpp::SHT_RELR, true, *, *>): Instantiate.
* aarch64.cc (Target_aarch64): Add Relr_section,
relr_dyn_section, and relr_dyn_.
(do_relax): Check SHT_RELR.
(Target_aarch64::Scan::local): Check SHT_RELR.
(Target_aarch64::Scan::global): Check SHT_RELR.
* arm.cc (Target_arm): Add Relr_section,
relr_dyn_section, and relr_dyn_.
(do_relax): Check SHT_RELR.
(Target_arm::Scan::local): Check SHT_RELR.
(Target_arm::Scan::global): Check SHT_RELR.
* x86_64.cc (Target_x86_64): Add Relr_section,
relr_dyn_section, and relr_dyn_.
(do_relax): Check SHT_RELR.
(Target_x86_64::Scan::local): Check SHT_RELR.
(Target_x86_64::Scan::global): Check SHT_RELR.
* testsuite/Makefile.am: New tests relr_arm.sh relr_aarch64.sh
relr_x86_64.sh.
* testsuite/relr_1.s: New.
Diffstat (limited to 'gold/testsuite/relr_arm.sh')
-rwxr-xr-x | gold/testsuite/relr_arm.sh | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gold/testsuite/relr_arm.sh b/gold/testsuite/relr_arm.sh new file mode 100755 index 00000000000..79fc477ef4f --- /dev/null +++ b/gold/testsuite/relr_arm.sh @@ -0,0 +1,20 @@ +#!/bin/sh +awk 'BEGIN { + i = 0 + ps[i++] = "\\(RELR\\)" + ps[i++] = "\\(RELRSZ\\) *8 \\(bytes\\)" + ps[i++] = "\\(RELRENT\\) *4 \\(bytes\\)" + + ps[i++] = ".relr.dyn.* contains 2 entries" + ps[i++] = "4 offsets" + ps[i++] = "00002000" + ps[i++] = "00002008" + ps[i++] = "0000200c" + ps[i++] = "00002010" + + ps[i++] = ".rel.dyn.* contains 1 entry:" + ps[i++] = "00002015 .*R_ARM_RELATIVE" + i = 0 +} +i in ps && $0 ~ ps[i] {i++} +END { if (i in ps) { print ps[i] " is not found"; exit 1 } }' relr_arm.out |