diff options
author | Yufeng Zhang <yufeng.zhang@arm.com> | 2013-06-26 10:47:06 +0000 |
---|---|---|
committer | Yufeng Zhang <yufeng.zhang@arm.com> | 2013-06-26 10:47:06 +0000 |
commit | a6bb11b2df1b69d79828a52a44eaf29ebc4d4955 (patch) | |
tree | ac8dfcd70bc509af34e0d0d4452e1c2c19860410 /bfd/libbfd.h | |
parent | cec5225bd81f750984856603755854f0f5796ab1 (diff) | |
download | fsf-binutils-gdb-a6bb11b2df1b69d79828a52a44eaf29ebc4d4955.zip fsf-binutils-gdb-a6bb11b2df1b69d79828a52a44eaf29ebc4d4955.tar.gz fsf-binutils-gdb-a6bb11b2df1b69d79828a52a44eaf29ebc4d4955.tar.bz2 |
[AArch64, ILP32] 3/6 Support for ELF32 relocs and refactor reloc handling
bfd/
* bfd-in2.h: Re-generated.
* elfnn-aarch64.c (HOWTO64, HOWTO32): New define.
(IS_AARCH64_TLS_RELOC): Change to be based on the
bfd reloc enumerators.
(IS_AARCH64_TLSDESC_RELOC): Likewise.
(PG, PG_OFFSET): Cast literal to bfd_vma.
(elf64_aarch64_howto_table): Removed.
(elf64_aarch64_howto_dynrelocs): Removed.
(elf64_aarch64_tls_howto_table): Removed.
(elf64_aarch64_tlsdesc_howto_table): Removed.
(elfNN_aarch64_howto_table): New table to host all howto entires..
(R_AARCH64_*): Replaced by AARCH64_R (*) and AARCH64_R_STR (*).
(elfNN_aarch64_bfd_reloc_from_howto): New function.
(elfNN_aarch64_bfd_reloc_from_type): Ditto.
(struct elf_aarch64_reloc_map): New.
(elf_aarch64_reloc_map): New table.
(elfNN_aarch64_howto_from_bfd_reloc): New function.
(elfNN_aarch64_howto_from_type): Update to look up the new table
elfNN_aarch64_howto_table.
(struct elf64_aarch64_reloc_map): Remove.
(elf64_aarch64_reloc_map): Remove.
(elfNN_aarch64_reloc_type_lookup): Change to call
elfNN_aarch64_howto_from_bfd_reloc.
(elfNN_aarch64_reloc_name_lookup): Change to look up the new table
elfNN_aarch64_howto_table.
(aarch64_resolve_relocation): Refactor to switch on the bfd
reloc enumerators.
(bfd_elf_aarch64_put_addend): Likewise.
(elfNN_aarch64_final_link_relocate): Likewise.
(aarch64_tls_transition_without_check): Likewise.
(aarch64_reloc_got_type): Likewise.
(aarch64_can_relax_tls): Likewise.
(aarch64_tls_transition): Likewise.
(elfNN_aarch64_tls_relax): Likewise.
(elfNN_aarch64_final_link_relocate): Likewise.
(elfNN_aarch64_relocate_section): Likewise.
(elfNN_aarch64_gc_sweep_hook): Likewise.
(elfNN_aarch64_check_relocs): Likewise.
(aarch64_tls_transition): Change to return a bfd reloc enumerator.
* libbfd.h: Re-generated.
* reloc.c: Re-order the AArch64 bfd reloc enumerators.
(BFD_RELOC_AARCH64_RELOC_START)
(BFD_RELOC_AARCH64_RELOC_END)
(BFD_RELOC_AARCH64_LD_GOT_LO12_NC)
(BFD_RELOC_AARCH64_LD32_GOT_LO12_NC)
(BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC)
(BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC)
(BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC)
(BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC)
(BFD_RELOC_AARCH64_IRELATIVE): New relocs.
gas/
* config/tc-aarch64.c (reloc_table): Replace
BFD_RELOC_AARCH64_LD64_GOT_LO12_NC with
BFD_RELOC_AARCH64_LD_GOT_LO12_NC; likewise to
BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC and
BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC.
(md_apply_fix): Handle BFD_RELOC_AARCH64_LD_GOT_LO12_NC,
BFD_RELOC_AARCH64_LD32_GOT_LO12_NC,
BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC,
BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC,
BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC and
BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC.
(aarch64_force_relocation): Likewise.
gas/testsuite/
* gas/aarch64/ilp32-basic.d: New file.
* gas/aarch64/ilp32-basic.s: New file.
include/elf/
* aarch64.h: Add ELF32 reloc codes and remove fake ELF64 ones.
(R_AARCH64_IRELATIVE): New reloc.
Diffstat (limited to 'bfd/libbfd.h')
-rw-r--r-- | bfd/libbfd.h | 108 |
1 files changed, 64 insertions, 44 deletions
diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 9450729..274b49d 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -2524,64 +2524,84 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_MICROBLAZE_64_TLSDTPREL", "BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL", "BFD_RELOC_MICROBLAZE_64_TLSTPREL", - "BFD_RELOC_AARCH64_ADD_LO12", - "BFD_RELOC_AARCH64_GOT_LD_PREL19", - "BFD_RELOC_AARCH64_ADR_GOT_PAGE", + "BFD_RELOC_AARCH64_RELOC_START", + "BFD_RELOC_AARCH64_NONE", + "BFD_RELOC_AARCH64_64", + "BFD_RELOC_AARCH64_32", + "BFD_RELOC_AARCH64_16", + "BFD_RELOC_AARCH64_64_PCREL", + "BFD_RELOC_AARCH64_32_PCREL", + "BFD_RELOC_AARCH64_16_PCREL", + "BFD_RELOC_AARCH64_MOVW_G0", + "BFD_RELOC_AARCH64_MOVW_G0_NC", + "BFD_RELOC_AARCH64_MOVW_G1", + "BFD_RELOC_AARCH64_MOVW_G1_NC", + "BFD_RELOC_AARCH64_MOVW_G2", + "BFD_RELOC_AARCH64_MOVW_G2_NC", + "BFD_RELOC_AARCH64_MOVW_G3", + "BFD_RELOC_AARCH64_MOVW_G0_S", + "BFD_RELOC_AARCH64_MOVW_G1_S", + "BFD_RELOC_AARCH64_MOVW_G2_S", + "BFD_RELOC_AARCH64_LD_LO19_PCREL", + "BFD_RELOC_AARCH64_ADR_LO21_PCREL", "BFD_RELOC_AARCH64_ADR_HI21_PCREL", "BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL", - "BFD_RELOC_AARCH64_ADR_LO21_PCREL", + "BFD_RELOC_AARCH64_ADD_LO12", + "BFD_RELOC_AARCH64_LDST8_LO12", + "BFD_RELOC_AARCH64_TSTBR14", "BFD_RELOC_AARCH64_BRANCH19", - "BFD_RELOC_AARCH64_CALL26", - "BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP", "BFD_RELOC_AARCH64_JUMP26", - "BFD_RELOC_AARCH64_LD_LO19_PCREL", - "BFD_RELOC_AARCH64_LD64_GOT_LO12_NC", - "BFD_RELOC_AARCH64_LDST_LO12", - "BFD_RELOC_AARCH64_LDST8_LO12", + "BFD_RELOC_AARCH64_CALL26", "BFD_RELOC_AARCH64_LDST16_LO12", "BFD_RELOC_AARCH64_LDST32_LO12", "BFD_RELOC_AARCH64_LDST64_LO12", "BFD_RELOC_AARCH64_LDST128_LO12", - "BFD_RELOC_AARCH64_MOVW_G0", - "BFD_RELOC_AARCH64_MOVW_G0_S", - "BFD_RELOC_AARCH64_MOVW_G0_NC", - "BFD_RELOC_AARCH64_MOVW_G1", - "BFD_RELOC_AARCH64_MOVW_G1_NC", - "BFD_RELOC_AARCH64_MOVW_G1_S", - "BFD_RELOC_AARCH64_MOVW_G2", - "BFD_RELOC_AARCH64_MOVW_G2_NC", - "BFD_RELOC_AARCH64_MOVW_G2_S", - "BFD_RELOC_AARCH64_MOVW_G3", - "BFD_RELOC_AARCH64_TLSDESC", - "BFD_RELOC_AARCH64_TLSDESC_ADD", - "BFD_RELOC_AARCH64_TLSDESC_ADD_LO12_NC", - "BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21", - "BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21", - "BFD_RELOC_AARCH64_TLSDESC_CALL", - "BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC", - "BFD_RELOC_AARCH64_TLSDESC_LD_PREL19", - "BFD_RELOC_AARCH64_TLSDESC_LDR", - "BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC", - "BFD_RELOC_AARCH64_TLSDESC_OFF_G1", - "BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC", + "BFD_RELOC_AARCH64_GOT_LD_PREL19", + "BFD_RELOC_AARCH64_ADR_GOT_PAGE", + "BFD_RELOC_AARCH64_LD64_GOT_LO12_NC", + "BFD_RELOC_AARCH64_LD32_GOT_LO12_NC", "BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21", + "BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC", + "BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1", + "BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", "BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21", - "BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19", "BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", - "BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", - "BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1", + "BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC", + "BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19", + "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2", + "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1", + "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC", + "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0", + "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC", "BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12", "BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12", "BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC", - "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0", - "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC", - "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1", - "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC", - "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2", - "BFD_RELOC_AARCH64_TLS_DTPMOD64", - "BFD_RELOC_AARCH64_TLS_DTPREL64", - "BFD_RELOC_AARCH64_TLS_TPREL64", - "BFD_RELOC_AARCH64_TSTBR14", + "BFD_RELOC_AARCH64_TLSDESC_LD_PREL19", + "BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21", + "BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21", + "BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC", + "BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC", + "BFD_RELOC_AARCH64_TLSDESC_ADD_LO12_NC", + "BFD_RELOC_AARCH64_TLSDESC_OFF_G1", + "BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC", + "BFD_RELOC_AARCH64_TLSDESC_LDR", + "BFD_RELOC_AARCH64_TLSDESC_ADD", + "BFD_RELOC_AARCH64_TLSDESC_CALL", + "BFD_RELOC_AARCH64_COPY", + "BFD_RELOC_AARCH64_GLOB_DAT", + "BFD_RELOC_AARCH64_JUMP_SLOT", + "BFD_RELOC_AARCH64_RELATIVE", + "BFD_RELOC_AARCH64_TLS_DTPMOD", + "BFD_RELOC_AARCH64_TLS_DTPREL", + "BFD_RELOC_AARCH64_TLS_TPREL", + "BFD_RELOC_AARCH64_TLSDESC", + "BFD_RELOC_AARCH64_IRELATIVE", + "BFD_RELOC_AARCH64_RELOC_END", + "BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP", + "BFD_RELOC_AARCH64_LDST_LO12", + "BFD_RELOC_AARCH64_LD_GOT_LO12_NC", + "BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC", + "BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC", "BFD_RELOC_TILEPRO_COPY", "BFD_RELOC_TILEPRO_GLOB_DAT", "BFD_RELOC_TILEPRO_JMP_SLOT", |