diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a028589662..7a9ba59c43 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,20 @@ +2015-10-02 Renlin Li + + * reloc.c: Make AARCH64_TLSIE_MOVW_GOTTPREL_G1 and + AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC defined in alphabetical order. + * libbfd.h: Regenerate. + * bfd-in2.h: Likewise. + * elfnn-aarch64.c (elfNN_aarch64_howto_table): Make + TLSIE_MOVW_GOTTPREL_G1 check overflow. + (aarch64_reloc_got_type): Add support for TLSIE_MOVW_GOTTPREL_G1 + and TLSIE_MOVW_GOTTPREL_G0_NC. + (elfNN_aarch64_final_link_relocate): Likewise. + (elfNN_aarch64_relocate_section): Likewise. + (elfNN_aarch64_gc_sweep_hook): Likewise. + (elfNN_aarch64_check_relocs): Likewise. + * elfxx-aarch64.c (_bfd_aarch64_elf_put_addend): Likewise. + (_bfd_aarch64_elf_resolve_relocation): Likewise. + 2015-10-02 Renlin Li * elfnn-aarch64.c (aarch64_reloc_got_type): Add diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 036bbbbbf9..f4f98af40d 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -5792,12 +5792,6 @@ BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21. */ /* AArch64 TLS General Dynamic relocation. */ BFD_RELOC_AARCH64_TLSGD_MOVW_G1, -/* AArch64 TLS INITIAL EXEC relocation. */ - BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1, - -/* AArch64 TLS INITIAL EXEC relocation. */ - BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, - /* AArch64 TLS INITIAL EXEC relocation. */ BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21, @@ -5810,6 +5804,12 @@ BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21. */ /* AArch64 TLS INITIAL EXEC relocation. */ BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19, +/* AArch64 TLS INITIAL EXEC relocation. */ + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, + +/* AArch64 TLS INITIAL EXEC relocation. */ + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1, + /* bit[23:12] of byte offset to module TLS base address. */ BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12, diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 7c9310f684..2bbdf65097 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -1038,34 +1038,6 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - HOWTO64 (AARCH64_R (TLSIE_MOVW_GOTTPREL_G1), /* type */ - 16, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G1), /* name */ - FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - - HOWTO64 (AARCH64_R (TLSIE_MOVW_GOTTPREL_G0_NC), /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - FALSE, /* pc_relative */ - 0, /* bitpos */ - complain_overflow_dont, /* complain_on_overflow */ - bfd_elf_generic_reloc, /* special_function */ - AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G0_NC), /* name */ - FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ - FALSE), /* pcrel_offset */ - HOWTO (AARCH64_R (TLSIE_ADR_GOTTPREL_PAGE21), /* type */ 12, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1122,6 +1094,34 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = 0x1ffffc, /* dst_mask */ FALSE), /* pcrel_offset */ + HOWTO64 (AARCH64_R (TLSIE_MOVW_GOTTPREL_G0_NC), /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G0_NC), /* name */ + FALSE, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO64 (AARCH64_R (TLSIE_MOVW_GOTTPREL_G1), /* type */ + 16, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_unsigned, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G1), /* name */ + FALSE, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* ADD: bit[23:12] of byte offset to module TLS base address. */ HOWTO (AARCH64_R (TLSLD_ADD_DTPREL_HI12), /* type */ 12, /* rightshift */ @@ -4506,6 +4506,8 @@ aarch64_reloc_got_type (bfd_reloc_code_real_type r_type) case BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: return GOT_TLS_IE; default: @@ -5476,6 +5478,8 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto, case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: case BFD_RELOC_AARCH64_TLSGD_MOVW_G1: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: if (globals->root.sgot == NULL) return bfd_reloc_notsupported; @@ -6120,6 +6124,8 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, case BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: case BFD_RELOC_AARCH64_TLSIE_LDNN_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: if (! symbol_got_offset_mark_p (input_bfd, h, r_symndx)) { bfd_boolean need_relocs = FALSE; @@ -6566,6 +6572,8 @@ elfNN_aarch64_gc_sweep_hook (bfd *abfd, case BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: case BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: case BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21: case BFD_RELOC_AARCH64_TLSLD_ADR_PREL21: @@ -7041,6 +7049,8 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, case BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: case BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: case BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21: case BFD_RELOC_AARCH64_TLSLD_ADR_PREL21: diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c index b57471e381..47e19779e1 100644 --- a/bfd/elfxx-aarch64.c +++ b/bfd/elfxx-aarch64.c @@ -335,6 +335,8 @@ _bfd_aarch64_elf_put_addend (bfd *abfd, case BFD_RELOC_AARCH64_MOVW_GOTOFF_G1: case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: case BFD_RELOC_AARCH64_TLSGD_MOVW_G1: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: case BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: case BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: @@ -492,6 +494,7 @@ _bfd_aarch64_elf_resolve_relocation (bfd_reloc_code_real_type r_type, value = value + addend; break; + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC: value = (value + addend) & (bfd_vma) 0xffff0000; @@ -502,6 +505,7 @@ _bfd_aarch64_elf_resolve_relocation (bfd_reloc_code_real_type r_type, value = (value + addend) & ~(bfd_vma) 0xfff; break; + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC: value = (value + addend) & (bfd_vma) 0xffff; diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 3d3d586c12..03bb05770e 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -2757,12 +2757,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC", "BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC", "BFD_RELOC_AARCH64_TLSGD_MOVW_G1", - "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_LD64_GOTTPREL_LO12_NC", "BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC", "BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19", + "BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC", + "BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1", "BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12", "BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12", "BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC", diff --git a/bfd/reloc.c b/bfd/reloc.c index a08019169d..18ca7bbf38 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -6837,14 +6837,6 @@ ENUM BFD_RELOC_AARCH64_TLSGD_MOVW_G1 ENUMDOC AArch64 TLS General Dynamic relocation. -ENUM - BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1 -ENUMDOC - AArch64 TLS INITIAL EXEC relocation. -ENUM - BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC -ENUMDOC - AArch64 TLS INITIAL EXEC relocation. ENUM BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 ENUMDOC @@ -6861,6 +6853,14 @@ ENUM BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19 ENUMDOC AArch64 TLS INITIAL EXEC relocation. +ENUM + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC +ENUMDOC + AArch64 TLS INITIAL EXEC relocation. +ENUM + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1 +ENUMDOC + AArch64 TLS INITIAL EXEC relocation. ENUM BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12 ENUMDOC diff --git a/gas/ChangeLog b/gas/ChangeLog index 5fc9cae3cc..38175b1efd 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2015-10-02 Renlin Li + + * config/tc-aarch64.c (reloc_table): Add two entries for + gottprel_g0_nc and gottprel_g1. + (process_movw_reloc_info): Add support. + (md_apply_fix): Likewise. + (aarch64_force_relocation): Likewise. + 2015-10-02 Renlin Li * config/tc-aarch64.c (reloc_table): New relocation modifier tlsgd_g0_nc. diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index a13ba55c1a..8d6f1f9e01 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -2482,6 +2482,24 @@ static struct reloc_table_entry reloc_table[] = { BFD_RELOC_AARCH64_LD64_GOTOFF_LO15, 0}, + /* Get to the page containing GOT TLS entry for a symbol */ + {"gottprel_g0_nc", 0, + 0, /* adr_type */ + 0, + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, + 0, + 0, + 0}, + + /* Get to the page containing GOT TLS entry for a symbol */ + {"gottprel_g1", 0, + 0, /* adr_type */ + 0, + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1, + 0, + 0, + 0}, + /* Get to the page containing GOT TLS entry for a symbol */ {"tlsgd", 0, BFD_RELOC_AARCH64_TLSGD_ADR_PREL21, /* adr_type */ @@ -4706,6 +4724,7 @@ process_movw_reloc_info (void) case BFD_RELOC_AARCH64_MOVW_G0_S: case BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC: case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: case BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0: case BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC: case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0: @@ -4717,6 +4736,7 @@ process_movw_reloc_info (void) case BFD_RELOC_AARCH64_MOVW_G1_S: case BFD_RELOC_AARCH64_MOVW_GOTOFF_G1: case BFD_RELOC_AARCH64_TLSGD_MOVW_G1: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: case BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1: case BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC: case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1: @@ -6942,6 +6962,8 @@ md_apply_fix (fixS * fixP, valueT * valP, segT seg) case BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: @@ -7172,7 +7194,9 @@ aarch64_force_relocation (struct fix *fixp) case BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: - case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC: + case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1: + case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12: case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12: case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC: case BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index cbc37a86eb..ce49c444cf 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-10-02 Renlin Li + + * gas/aarch64/reloc-gottprel_g0_nc.d: New. + * gas/aarch64/reloc-gottprel_g0_nc.s: New. + * gas/aarch64/reloc-gottprel_g1.d: New. + * gas/aarch64/reloc-gottprel_g1.s: New. + 2015-10-02 Renlin Li * gas/aarch64/reloc-tlsgd_g0_nc.d: New. diff --git a/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d b/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d new file mode 100644 index 0000000000..07c78c3efb --- /dev/null +++ b/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d @@ -0,0 +1,9 @@ +#objdump: -dr + +.*: file format .* + +Disassembly of section \.text: + +0000000000000000 <.*>: + 0: f280001c movk x28, #0x0 + 0: R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC x diff --git a/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.s b/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.s new file mode 100644 index 0000000000..c8178ff8d2 --- /dev/null +++ b/gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.s @@ -0,0 +1,4 @@ +// Test file for AArch64 GAS -- gottprel_g0_nc + +func: + movk x28, #:gottprel_g0_nc:x diff --git a/gas/testsuite/gas/aarch64/reloc-gottprel_g1.d b/gas/testsuite/gas/aarch64/reloc-gottprel_g1.d new file mode 100644 index 0000000000..4da88cf729 --- /dev/null +++ b/gas/testsuite/gas/aarch64/reloc-gottprel_g1.d @@ -0,0 +1,9 @@ +#objdump: -dr + +.*: file format .* + +Disassembly of section \.text: + +0000000000000000 <.*>: + 0: d2a0001c movz x28, #0x0, lsl #16 + 0: R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 x diff --git a/gas/testsuite/gas/aarch64/reloc-gottprel_g1.s b/gas/testsuite/gas/aarch64/reloc-gottprel_g1.s new file mode 100644 index 0000000000..64491f7223 --- /dev/null +++ b/gas/testsuite/gas/aarch64/reloc-gottprel_g1.s @@ -0,0 +1,4 @@ +// Test file for AArch64 GAS -- gottprel_g1 + +func: + movz x28, #:gottprel_g1:x diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index e755b8a58a..e486bbaf10 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-10-02 Renlin Li + + * ld-aarch64/tls-large-ie.d: New. + * ld-aarch64/tls-large-ie.s: New. + * ld-aarch64/aarch64-elf.exp: Run new test. + 2015-10-02 Renlin Li * ld-aarch64/emit-relocs-516.d: New. diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 3cafff3fe3..d0da92f46f 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -197,6 +197,7 @@ run_dump_test "tls-tiny-desc" run_dump_test "tls-tiny-desc-ie" run_dump_test "tls-tiny-desc-le" run_dump_test "tls-tiny-ie" +run_dump_test "tls-large-ie" run_dump_test "tls-tiny-ld" run_dump_test "tls-small-ld" run_dump_test "tlsle" diff --git a/ld/testsuite/ld-aarch64/tls-large-ie.d b/ld/testsuite/ld-aarch64/tls-large-ie.d new file mode 100644 index 0000000000..dd0a14d8f3 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-large-ie.d @@ -0,0 +1,19 @@ +#source: tls-large-ie.s +#ld: -shared -T relocs.ld -e0 +#objdump: -dr +#... + +Disassembly of section .text: + +0000000000010000 \: + 10000: 58000121 ldr x1, 10024 \ + 10004: 10000102 adr x2, 10024 \ + 10008: 8b020021 add x1, x1, x2 + 1000c: d53bd042 mrs x2, tpidr_el0 + 10010: d2a00000 movz x0, #0x0, lsl #16 + 10014: f2800100 movk x0, #0x8 + 10018: f8606820 ldr x0, \[x1,x0\] + 1001c: 8b020000 add x0, x0, x2 + 10020: d503201f nop + 10024: 0000ffdc .word 0x0000ffdc + 10028: 00000000 .word 0x00000000 diff --git a/ld/testsuite/ld-aarch64/tls-large-ie.s b/ld/testsuite/ld-aarch64/tls-large-ie.s new file mode 100644 index 0000000000..89a2e6bf14 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-large-ie.s @@ -0,0 +1,15 @@ + .global var + .text +test: + ldr x1, .Lgot + adr x2, .Lgot + add x1, x1, x2 + + mrs x2, tpidr_el0 + movz x0, #:gottprel_g1:var + movk x0, #:gottprel_g0_nc:var + ldr x0, [x1, x0] + add x0, x0, x2 + nop + +.Lgot: .xword _GLOBAL_OFFSET_TABLE_ - .