diff options
author | Jiong Wang <jiong.wang@arm.com> | 2015-08-11 21:55:52 +0100 |
---|---|---|
committer | Jiong Wang <jiong.wang@arm.com> | 2015-08-11 21:55:52 +0100 |
commit | f678ded748f994a16e27fc3ac1d1c9451b98f608 (patch) | |
tree | b11d639f6672535887d9ddeb9dadd01454dafb33 | |
parent | 07f9ddfeba5b572451471f905473f7ddbba1d472 (diff) | |
download | gdb-f678ded748f994a16e27fc3ac1d1c9451b98f608.zip gdb-f678ded748f994a16e27fc3ac1d1c9451b98f608.tar.gz gdb-f678ded748f994a16e27fc3ac1d1c9451b98f608.tar.bz2 |
[AArch64] Long branch veneer support far symbol defined by --defsym
2015-08-11 Jiong Wang <jiong.wang@arm.com>
bfd/
* bfd/elfnn-aarch64.c (aarch64_type_of_stub): New parameter "sym_sec".
Loose the check for symbol from ABS section.
(elfNN_aarch64_size_stubs): Pass sym_sec.
ld/testsuite/
* ld-aarch64/farcall-b-defsym.s: New test.
* ld-aarch64/farcall-bl-defsym.s: Likewise.
* ld-aarch64/farcall-b-defsym.d: New expectation.
* ld-aarch64/farcall-bl-defsym.d: Likewise.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elfnn-aarch64.c | 6 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-aarch64/aarch64-elf.exp | 2 |
4 files changed, 19 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e2378fe..f4acd03 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,11 @@ 2015-08-11 Jiong Wang <jiong.wang@arm.com> + * bfd/elfnn-aarch64.c (aarch64_type_of_stub): New parameter "sym_sec". + Loose the check for symbol from ABS section. + (elfNN_aarch64_size_stubs): Pass sym_sec. + +2015-08-11 Jiong Wang <jiong.wang@arm.com> + PR ld/18668 * elfnn-aarch64.c (aarch64_type_of_stub): Update destination for calls go through plt stub. diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 097a275..37fe1a6 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -2316,6 +2316,7 @@ static enum elf_aarch64_stub_type aarch64_type_of_stub (struct bfd_link_info *info, asection *input_sec, const Elf_Internal_Rela *rel, + asection *sym_sec, unsigned char st_type, struct elf_aarch64_link_hash_entry *hash, bfd_vma destination) @@ -2327,7 +2328,8 @@ aarch64_type_of_stub (struct bfd_link_info *info, enum elf_aarch64_stub_type stub_type = aarch64_stub_none; bfd_boolean via_plt_p; - if (st_type != STT_FUNC) + if (st_type != STT_FUNC + && (sym_sec != bfd_abs_section_ptr)) return stub_type; globals = elf_aarch64_hash_table (info); @@ -3815,7 +3817,7 @@ elfNN_aarch64_size_stubs (bfd *output_bfd, /* Determine what (if any) linker stub is needed. */ stub_type = aarch64_type_of_stub - (info, section, irela, st_type, hash, destination); + (info, section, irela, sym_sec, st_type, hash, destination); if (stub_type == aarch64_stub_none) continue; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 9b16f25..bb6ece6 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2015-08-11 Jiong Wang <jiong.wang@arm.com> + * ld-aarch64/farcall-b-defsym.s: New test. + * ld-aarch64/farcall-bl-defsym.s: Likewise. + * ld-aarch64/farcall-b-defsym.d: New expectation. + * ld-aarch64/farcall-bl-defsym.d: Likewise. + +2015-08-11 Jiong Wang <jiong.wang@arm.com> + * ld-aarch64/farcall-b-gsym.s: New test. * ld-aarch64/farcall-b-plt.s: Likewise. * ld-aarch64/farcall-bl-plt.s: Likewise. diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index b87b198..9554ea1 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -127,6 +127,8 @@ run_dump_test "limit-b" run_dump_test "limit-bl" run_dump_test "farcall-section" run_dump_test "farcall-back" +run_dump_test "farcall-b-defsym" +run_dump_test "farcall-bl-defsym" run_dump_test "farcall-b-gsym" run_dump_test "farcall-b-plt" run_dump_test "farcall-bl-plt" |