From 73524045d3a3b95bb0437386bba2a1583791ea42 Mon Sep 17 00:00:00 2001 From: Renlin Li Date: Thu, 1 Oct 2015 14:12:37 +0100 Subject: [PATCH] [BFD][AARCH64]Emit single AARCH64_MAP_INSN symbol for the whole plt. bfd/ 2015-10-01 Renlin Li * elfnn-aarch64.c (elfNN_aarch64_output_plt_map): Remove. (elfNN_aarch64_output_arch_local_syms): Emit AARCH64_MAP_INSN once. ld/testsuite/ 2015-10-01 Renlin Li * ld-aarch64/plt_mapping_symbol.d: New. * ld-aarch64/plt_mapping_symbol.s: New. * ld-aarch64/aarch64-elf.exp: Run the new test. --- bfd/ChangeLog | 5 +++ bfd/elfnn-aarch64.c | 36 +------------------- ld/testsuite/ChangeLog | 6 ++++ ld/testsuite/ld-aarch64/aarch64-elf.exp | 2 ++ ld/testsuite/ld-aarch64/plt_mapping_symbol.d | 10 ++++++ ld/testsuite/ld-aarch64/plt_mapping_symbol.s | 6 ++++ 6 files changed, 30 insertions(+), 35 deletions(-) create mode 100644 ld/testsuite/ld-aarch64/plt_mapping_symbol.d create mode 100644 ld/testsuite/ld-aarch64/plt_mapping_symbol.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 33e0ef7917..55cfa5334b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2015-10-01 Renlin Li + + * elfnn-aarch64.c (elfNN_aarch64_output_plt_map): Remove. + (elfNN_aarch64_output_arch_local_syms): Emit AARCH64_MAP_INSN once. + 2015-10-01 Kaz Kojima * config.bfd (targ_selvecs): Remove sh_elf32_vec and diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 24ef79f568..90ab3f8a7e 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -7310,38 +7310,6 @@ elfNN_aarch64_output_map_sym (output_arch_syminfo *osi, return osi->func (osi->finfo, names[type], &sym, osi->sec, NULL) == 1; } - - -/* Output mapping symbols for PLT entries associated with H. */ - -static bfd_boolean -elfNN_aarch64_output_plt_map (struct elf_link_hash_entry *h, void *inf) -{ - output_arch_syminfo *osi = (output_arch_syminfo *) inf; - bfd_vma addr; - - if (h->root.type == bfd_link_hash_indirect) - return TRUE; - - if (h->root.type == bfd_link_hash_warning) - /* When warning symbols are created, they **replace** the "real" - entry in the hash table, thus we never get to see the real - symbol in a hash traversal. So look at it now. */ - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - if (h->plt.offset == (bfd_vma) - 1) - return TRUE; - - addr = h->plt.offset; - if (addr == 32) - { - if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_INSN, addr)) - return FALSE; - } - return TRUE; -} - - /* Output a single local symbol for a generated stub. */ static bfd_boolean @@ -7474,13 +7442,11 @@ elfNN_aarch64_output_arch_local_syms (bfd *output_bfd, if (!htab->root.splt || htab->root.splt->size == 0) return TRUE; - /* For now live without mapping symbols for the plt. */ osi.sec_shndx = _bfd_elf_section_from_bfd_section (output_bfd, htab->root.splt->output_section); osi.sec = htab->root.splt; - elf_link_hash_traverse (&htab->root, elfNN_aarch64_output_plt_map, - (void *) &osi); + elfNN_aarch64_output_map_sym (&osi, AARCH64_MAP_INSN, 0); return TRUE; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 9bfc8234c4..fdf4b3c21e 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-10-01 Renlin Li + + * ld-aarch64/aarch64-elf.exp: Run the new test. + * ld-aarch64/plt_mapping_symbol.d: New. + * ld-aarch64/plt_mapping_symbol.s: New. + 2015-10-01 Alan Modra * ld-x86-64/pr19013-x32.d: Update. diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 955484e1f5..6f00961db9 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -254,6 +254,8 @@ run_dump_test "relocs-1027-symbolic-func" run_dump_test "dt_textrel" +run_dump_test "plt_mapping_symbol" + set aarch64elflinktests { {"ld-aarch64/so with global symbol" "-shared" "" "" {copy-reloc-so.s} {} "copy-reloc-so.so"} diff --git a/ld/testsuite/ld-aarch64/plt_mapping_symbol.d b/ld/testsuite/ld-aarch64/plt_mapping_symbol.d new file mode 100644 index 0000000000..3b86cff47e --- /dev/null +++ b/ld/testsuite/ld-aarch64/plt_mapping_symbol.d @@ -0,0 +1,10 @@ +#source: plt_mapping_symbol.s +#ld: -shared -T relocs.ld -e0 +#objdump: --syms --special-syms +#name: AArch64 mapping symbol for plt section test. +#... + +SYMBOL TABLE: +#... +[0]+10010 l .plt 0[0]+00 \$x +#... diff --git a/ld/testsuite/ld-aarch64/plt_mapping_symbol.s b/ld/testsuite/ld-aarch64/plt_mapping_symbol.s new file mode 100644 index 0000000000..ac20482ec3 --- /dev/null +++ b/ld/testsuite/ld-aarch64/plt_mapping_symbol.s @@ -0,0 +1,6 @@ + .text +test: + bl __tls_get_addr + nop + + .xword 0xffee