This is the mail archive of the
binutils-cvs@sourceware.org
mailing list for the binutils project.
[binutils-gdb] [AArch64] Long branch veneer support far symbol defined by --defsym
- From: Jiong Wang <jiwang at sourceware dot org>
- To: bfd-cvs at sourceware dot org
- Date: 11 Aug 2015 21:00:00 -0000
- Subject: [binutils-gdb] [AArch64] Long branch veneer support far symbol defined by --defsym
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f678ded748f994a16e27fc3ac1d1c9451b98f608
commit f678ded748f994a16e27fc3ac1d1c9451b98f608
Author: Jiong Wang <jiong.wang@arm.com>
Date: Tue Aug 11 21:55:52 2015 +0100
[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.
Diff:
---
bfd/ChangeLog | 6 ++++++
bfd/elfnn-aarch64.c | 6 ++++--
ld/testsuite/ChangeLog | 7 +++++++
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"