aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorJiong Wang <jiong.wang@arm.com>2015-08-11 21:55:52 +0100
committerJiong Wang <jiong.wang@arm.com>2015-08-11 21:55:52 +0100
commitf678ded748f994a16e27fc3ac1d1c9451b98f608 (patch)
treeb11d639f6672535887d9ddeb9dadd01454dafb33 /bfd
parent07f9ddfeba5b572451471f905473f7ddbba1d472 (diff)
downloadgdb-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.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elfnn-aarch64.c6
2 files changed, 10 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;