mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
[AArch64] Optimize .gnu.hash table size for executable
bfd/ * elfnn-aarch64.c (elf_aarch64_hash_symbol): New function. (elf_backend_hash_symbol): Define. ld/ * testsuite/ld-aarch64/aarch64-elf.exp (aarch64elflinktests): New tests. * testsuite/ld-aarch64/func-in-so.s: New test source file. * testsuite/ld-aarch64/func-sym-hash-opt.s: Likewise. * testsuite/ld-aarch64/func-sym-hash-opt.d: New expected test result.
This commit is contained in:
parent
add3afb219
commit
7f784814df
@ -1,3 +1,8 @@
|
||||
2017-01-20 Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
* elfnn-aarch64.c (elf_aarch64_hash_symbol): New function.
|
||||
(elf_backend_hash_symbol): Define.
|
||||
|
||||
2017-01-18 Maciej W. Rozycki <macro@imgtec.com>
|
||||
|
||||
PR ld/20828
|
||||
|
@ -2708,6 +2708,22 @@ elfNN_aarch64_stub_name (const asection *input_section,
|
||||
return stub_name;
|
||||
}
|
||||
|
||||
/* Return TRUE if symbol H should be hashed in the `.gnu.hash' section. For
|
||||
executable PLT slots where the executable never takes the address of those
|
||||
functions, the function symbols are not added to the hash table. */
|
||||
|
||||
static bfd_boolean
|
||||
elf_aarch64_hash_symbol (struct elf_link_hash_entry *h)
|
||||
{
|
||||
if (h->plt.offset != (bfd_vma) -1
|
||||
&& !h->def_regular
|
||||
&& !h->pointer_equality_needed)
|
||||
return FALSE;
|
||||
|
||||
return _bfd_elf_hash_symbol (h);
|
||||
}
|
||||
|
||||
|
||||
/* Look up an entry in the stub hash. Stub entries are cached because
|
||||
creating the stub name takes a bit of time. */
|
||||
|
||||
@ -9412,6 +9428,7 @@ const struct elf_size_info elfNN_aarch64_size_info =
|
||||
#define elf_backend_got_header_size (GOT_ENTRY_SIZE * 3)
|
||||
#define elf_backend_default_execstack 0
|
||||
#define elf_backend_extern_protected_data 1
|
||||
#define elf_backend_hash_symbol elf_aarch64_hash_symbol
|
||||
|
||||
#undef elf_backend_obj_attrs_section
|
||||
#define elf_backend_obj_attrs_section ".ARM.attributes"
|
||||
|
@ -1,3 +1,10 @@
|
||||
2017-01-20 Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
* testsuite/ld-aarch64/aarch64-elf.exp (aarch64elflinktests): New tests.
|
||||
* testsuite/ld-aarch64/func-in-so.s: New test source file.
|
||||
* testsuite/ld-aarch64/func-sym-hash-opt.s: Likewise.
|
||||
* testsuite/ld-aarch64/func-sym-hash-opt.d: New expected test result.
|
||||
|
||||
2017-01-20 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* testsuite/ld-elf/eh-frame-hdr.d: Update expected results.
|
||||
|
@ -323,6 +323,11 @@ set aarch64elflinktests {
|
||||
{} "copy-reloc-so.so"}
|
||||
{"ld-aarch64/exe with copy relocation" "-e0 tmpdir/copy-reloc-so.so" "" ""
|
||||
{copy-reloc-exe.s} {{objdump -R copy-reloc.d}} "copy-reloc"}
|
||||
{"ld-aarch64/so with global func" "-shared" "" "" {func-in-so.s}
|
||||
{} "func-in-so.so"}
|
||||
{"ld-aarch64/func sym hash opt for exe"
|
||||
"-e0 --hash-style=gnu tmpdir/func-in-so.so" "" ""
|
||||
{func-sym-hash-opt.s} {{readelf --dyn-sym func-sym-hash-opt.d}} "hash-opt"}
|
||||
}
|
||||
|
||||
run_ld_link_tests $aarch64elflinktests
|
||||
|
6
ld/testsuite/ld-aarch64/func-in-so.s
Normal file
6
ld/testsuite/ld-aarch64/func-in-so.s
Normal file
@ -0,0 +1,6 @@
|
||||
.text
|
||||
.align 2
|
||||
.global dec
|
||||
.type dec, %function
|
||||
dec:
|
||||
ret
|
6
ld/testsuite/ld-aarch64/func-sym-hash-opt.d
Normal file
6
ld/testsuite/ld-aarch64/func-sym-hash-opt.d
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
Symbol table '.dynsym' contains .* entries:
|
||||
Num: Value Size Type Bind Vis Ndx Name
|
||||
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
|
||||
1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dec
|
||||
#...
|
7
ld/testsuite/ld-aarch64/func-sym-hash-opt.s
Normal file
7
ld/testsuite/ld-aarch64/func-sym-hash-opt.s
Normal file
@ -0,0 +1,7 @@
|
||||
.text
|
||||
.align 2
|
||||
.global main
|
||||
.type main, %function
|
||||
main:
|
||||
bl dec
|
||||
ret
|
Loading…
Reference in New Issue
Block a user