From 3b957e5b074407e18782a9592754c732671df8ed Mon Sep 17 00:00:00 2001 From: Renlin Li Date: Fri, 2 Oct 2015 16:59:46 +0100 Subject: [PATCH] [Binutils][AARCH64]Add TLS IE large memory support. bfd/ 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. gas/ 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. gas/testsuite/ 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. ld/testsuite/ 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. --- bfd/ChangeLog | 17 ++++++ bfd/bfd-in2.h | 12 ++--- bfd/elfnn-aarch64.c | 66 ++++++++++++++---------- bfd/elfxx-aarch64.c | 4 ++ bfd/libbfd.h | 4 +- bfd/reloc.c | 12 ++--- gas/ChangeLog | 8 +++ gas/config/tc-aarch64.c | 26 +++++++++- gas/testsuite/ChangeLog | 7 +++ gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d | 9 ++++ gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.s | 4 ++ gas/testsuite/gas/aarch64/reloc-gottprel_g1.d | 9 ++++ gas/testsuite/gas/aarch64/reloc-gottprel_g1.s | 4 ++ ld/testsuite/ChangeLog | 6 +++ ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 + ld/testsuite/ld-aarch64/tls-large-ie.d | 19 +++++++ ld/testsuite/ld-aarch64/tls-large-ie.s | 15 ++++++ 17 files changed, 180 insertions(+), 43 deletions(-) create mode 100644 gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.d create mode 100644 gas/testsuite/gas/aarch64/reloc-gottprel_g0_nc.s create mode 100644 gas/testsuite/gas/aarch64/reloc-gottprel_g1.d create mode 100644 gas/testsuite/gas/aarch64/reloc-gottprel_g1.s create mode 100644 ld/testsuite/ld-aarch64/tls-large-ie.d create mode 100644 ld/testsuite/ld-aarch64/tls-large-ie.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a028589..7a9ba59 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,22 @@ 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 BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC support. (elfNN_aarch64_final_link_relocate): Likewise. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 036bbbb..f4f98af 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -5793,12 +5793,6 @@ BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21. */ 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, /* AArch64 TLS INITIAL EXEC relocation. */ @@ -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 7c9310f..2bbdf65 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 b57471e..47e1977 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 3d3d586..03bb057 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 a080191..18ca7bb 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -6838,27 +6838,27 @@ ENUM ENUMDOC AArch64 TLS General Dynamic relocation. ENUM - BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1 + BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 ENUMDOC AArch64 TLS INITIAL EXEC relocation. ENUM - BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC + BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC ENUMDOC AArch64 TLS INITIAL EXEC relocation. ENUM - BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 + BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC ENUMDOC AArch64 TLS INITIAL EXEC relocation. ENUM - BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC + BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19 ENUMDOC AArch64 TLS INITIAL EXEC relocation. ENUM - BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC ENUMDOC AArch64 TLS INITIAL EXEC relocation. ENUM - BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19 + BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1 ENUMDOC AArch64 TLS INITIAL EXEC relocation. ENUM diff --git a/gas/ChangeLog b/gas/ChangeLog index 5fc9cae..38175b1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,13 @@ 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. (process_movw_reloc_info): Support BFD_RELOC_AARCH64_TLSGD_MOVW_G1. (md_apply_fix): Likewise. diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index a13ba55..8d6f1f9 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -2483,6 +2483,24 @@ static struct reloc_table_entry reloc_table[] = { 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 */ BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21, @@ -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 cbc37a8..ce49c44 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,5 +1,12 @@ 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. * gas/aarch64/reloc-tlsgd_g0_nc.s: 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 0000000..07c78c3 --- /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 0000000..c8178ff --- /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 0000000..4da88cf --- /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 0000000..64491f7 --- /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 e755b8a..e486bba 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,5 +1,11 @@ 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. * ld-aarch64/emit-relocs-516.s: New. * ld-aarch64/aarch64-elf.exp: Run new test. diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 3cafff3..d0da92f 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 0000000..dd0a14d --- /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 0000000..89a2e6b --- /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_ - . -- 2.7.4