diff options
author | Jiong Wang <jiong.wang@arm.com> | 2015-06-01 10:22:15 +0100 |
---|---|---|
committer | Jiong Wang <jiong.wang@arm.com> | 2015-06-01 10:22:15 +0100 |
commit | a921b5bd708cc6e8afa3cf33443cda54b4e8cae6 (patch) | |
tree | e55f41343d77f83e9bcfb1347dccbae2aa83dc9b /bfd | |
parent | 3a8547d2fb5319890dda877fb313822053083c3a (diff) | |
download | gdb-a921b5bd708cc6e8afa3cf33443cda54b4e8cae6.zip gdb-a921b5bd708cc6e8afa3cf33443cda54b4e8cae6.tar.gz gdb-a921b5bd708cc6e8afa3cf33443cda54b4e8cae6.tar.bz2 |
[AArch64] GAS Support BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15
2015-06-01 Jiong.Wang <jiong.wang@arm.com>
bfd/
* reloc.c (BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15): New entry.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* elfnn-aarch64.c (elfNN_aarch64_howto_table): New entry for
BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15.
gas/
* config/tc-aarch64.c (reloc_table): New relocation modifiers.
(md_apply_fix): Support BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15.
(aarch64_force_relocation): Ditto.
gas/testsuite/
* gas/aarch64/reloc-insn.s: New testcase.
* gas/aarch64/reloc-insn.d: Ditto.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 3 | ||||
-rw-r--r-- | bfd/elfnn-aarch64.c | 16 | ||||
-rw-r--r-- | bfd/libbfd.h | 1 | ||||
-rw-r--r-- | bfd/reloc.c | 4 |
5 files changed, 32 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 48a3228..ccb2928 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2015-06-01 Jiong Wang <jiong.wang@arm.com> + + * reloc.c (BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15): New entry. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + * elfnn-aarch64.c (elfNN_aarch64_howto_table): New entry for + BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15. + 2015-05-28 Catherine Moore <clm@codesourcery.com> Bernd Schmidt <bernds@codesourcery.com> Paul Brook <paul@codesourcery.com> diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index ee67340..804820e 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -5737,6 +5737,9 @@ the GOT entry for this symbol. Used in conjunction with BFD_RELOC_AARCH64_ADR_GOTPAGE. Valid in ILP32 ABI only. */ BFD_RELOC_AARCH64_LD32_GOT_LO12_NC, +/* Scaled 15 bit byte offset to the page base of the global offset table. */ + BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15, + /* Get to the page base of the global offset table entry for a symbols tls_index structure as part of an adrp instruction using a 21 bit PC relative value. Used in conjunction with diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 725775d..2615f248 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -848,6 +848,22 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = 0xffc, /* dst_mask */ FALSE), /* pcrel_offset */ + /* LD64: GOT offset to the page address of GOT table. + (G(S) - PAGE (_GLOBAL_OFFSET_TABLE_)) & 0x7ff8. */ + HOWTO64 (AARCH64_R (LD64_GOTPAGE_LO15), /* type */ + 3, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 12, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_unsigned, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + AARCH64_R_STR (LD64_GOTPAGE_LO15), /* name */ + FALSE, /* partial_inplace */ + 0x7ff8, /* src_mask */ + 0x7ff8, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* Get to the page for the GOT entry for the symbol (G(S) - P) using an ADRP instruction. */ HOWTO (AARCH64_R (TLSGD_ADR_PAGE21), /* type */ diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 14600aa..73a5803 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -2733,6 +2733,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_AARCH64_ADR_GOT_PAGE", "BFD_RELOC_AARCH64_LD64_GOT_LO12_NC", "BFD_RELOC_AARCH64_LD32_GOT_LO12_NC", + "BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15", "BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21", "BFD_RELOC_AARCH64_TLSGD_ADR_PREL21", "BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC", diff --git a/bfd/reloc.c b/bfd/reloc.c index 8c4a88a..4ee384f 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -6762,6 +6762,10 @@ ENUMDOC the GOT entry for this symbol. Used in conjunction with BFD_RELOC_AARCH64_ADR_GOTPAGE. Valid in ILP32 ABI only. ENUM + BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15 +ENUMDOC + Scaled 15 bit byte offset to the page base of the global offset table. +ENUM BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21 ENUMDOC Get to the page base of the global offset table entry for a symbols |