diff options
author | Marcus Shawcroft <marcus.shawcroft@arm.com> | 2015-11-12 15:15:28 +0000 |
---|---|---|
committer | Marcus Shawcroft <marcus.shawcroft@arm.com> | 2015-11-12 15:16:40 +0000 |
commit | 06d2788cefa3dc24ce0e92e795cf3987a6c630ed (patch) | |
tree | 8553c89dbd220ab78f765667f6bf900ea031b701 /bfd | |
parent | 9c352f1c234efabd0e60a0927ae3f25009e4932b (diff) | |
download | gdb-06d2788cefa3dc24ce0e92e795cf3987a6c630ed.zip gdb-06d2788cefa3dc24ce0e92e795cf3987a6c630ed.tar.gz gdb-06d2788cefa3dc24ce0e92e795cf3987a6c630ed.tar.bz2 |
Revert "[LD][AARCH64]Add TLSIE relaxation support under large memory model."
This reverts commit 3ebe65c0ff9f8f76c9971b1cc078273298f0c693.
Reverted due to PR19188
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 12 | ||||
-rw-r--r-- | bfd/elfnn-aarch64.c | 53 |
2 files changed, 2 insertions, 63 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index bde7118..5fcaaef 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -461,18 +461,6 @@ 2015-10-02 Renlin Li <renlin.li@arm.com> - * elfnn-aarch64.c (IS_AARCH64_TLS_RELAX_RELOC): Add - TLSIE_MOVW_GOTTPREL_G1. - (aarch64_tls_transition_without_check): Add - TLSIE_MOVW_GOTTPREL_G1 to TLSLE_MOVW_TPREL_G2 - transition for local symbol. - (elfNN_aarch64_tls_relax): Add a argument to pass tp offset. - Add TLSIE_MOVW_GOTTPREL_G1 relaxation. - (elfNN_aarch64_relocate_section): Call elfNN_aarch64_tls_relax - with new argument. - -2015-10-02 Renlin Li <renlin.li@arm.com> - * elfnn-aarch64.c (aarch64_tls_transition_without_check): Add relax transitions for TLSDESC_ADD, TLSDESC_LDR, TLSDESC_OFF_G0_NC, TLSDESC_OFF_G1. diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 5558bf7..59c51cc 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -228,7 +228,6 @@ || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_LDNN_GOTTPREL_LO12_NC \ - || (R_TYPE) == BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21 \ || (R_TYPE) == BFD_RELOC_AARCH64_TLSLD_ADR_PREL21) @@ -4494,11 +4493,6 @@ aarch64_tls_transition_without_check (bfd_reloc_code_real_type r_type, return is_local ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2 : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1; - - case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: - return is_local - ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2 - : r_type; #endif default: @@ -5633,8 +5627,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, static bfd_reloc_status_type elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, bfd *input_bfd, bfd_byte *contents, - Elf_Internal_Rela *rel, struct elf_link_hash_entry *h, - bfd_vma relocation ATTRIBUTE_UNUSED) + Elf_Internal_Rela *rel, struct elf_link_hash_entry *h) { bfd_boolean is_local = h == NULL; unsigned int r_type = ELFNN_R_TYPE (rel->r_info); @@ -5800,47 +5793,6 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: return bfd_reloc_continue; - - case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: - if (is_local) - { - /* Large IE->LE relaxation: - mrs tp, tpidr_el0 - movz tx, #:gottprel_g1:var => movz tx, #:tprel_g2:var, lsl #32 - movk tx, #:gottprel_g0_nc:var => movk tx, #:tprel_g1_nc:var, lsl #16 - ldr tx, [gp, tx] => movk tx, #:tprel_g0_nc:var - add tx, tx, tp - */ - uint32_t value; - BFD_ASSERT (ELFNN_R_TYPE (rel[1].r_info) - == AARCH64_R (TLSIE_MOVW_GOTTPREL_G0_NC)); - BFD_ASSERT (rel->r_offset + 4 == rel[1].r_offset); - - value = (relocation & ~(bfd_vma) 0xffffffff) >> 32; - insn = bfd_getl32 (contents + rel->r_offset); - insn &= 0xff80001f; - insn |= (0x400000 + (value << 5)); - bfd_putl32 (insn, contents + rel->r_offset + 0); - - value = (relocation & (bfd_vma) 0xffff0000) >> 16; - insn = bfd_getl32 (contents + rel->r_offset + 4); - insn &= 0xff80001f; - insn |= (0x200000 + (value << 5)); - bfd_putl32 (insn, contents + rel->r_offset + 4); - - value = relocation & (bfd_vma) 0xffff; - insn = bfd_getl32 (contents + rel->r_offset + 4); - insn &= 0xff80001f; - insn |= (value << 5); - bfd_putl32 (insn, contents + rel->r_offset + 8); - - /* Relocations are already resolved here. */ - rel->r_info = ELFNN_R_INFO (STN_UNDEF, R_AARCH64_NONE); - rel[1].r_info = ELFNN_R_INFO (STN_UNDEF, R_AARCH64_NONE); - return bfd_reloc_ok; - } - - return bfd_reloc_continue; #endif case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: @@ -6199,8 +6151,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, howto = elfNN_aarch64_howto_from_bfd_reloc (bfd_r_type); BFD_ASSERT (howto != NULL); r_type = howto->type; - r = elfNN_aarch64_tls_relax (globals, input_bfd, contents, rel, h, - relocation - tpoff_base (info)); + r = elfNN_aarch64_tls_relax (globals, input_bfd, contents, rel, h); unresolved_reloc = 0; } else |