This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[11/16][binutils][AARCH64]Add relocation support for large memory model. [Binutils]Add TLS IE large memory support


Hi all,

This patch adds the missing TLS IE support for large memory model.

The following access sequence is used to access TLS IE variable:

mrs  tp, tpidr_el0
movz t0, #:gottprel_g1:x1 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1      x1
movk t0, #:gottprel_g0_nc:x1 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC   x1
ldr  t0, [gp, t0]
add  t0, t0, tp

Basically, the following two relocations are already defined, but not fully supported.

AARCH64_TLSIE_MOVW_GOTTPREL_G1
AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC

This patch add the missing GAS and LD support. Testcases are also provided.

Binutils regression test Okay. Okay to commit?

Regards,
Renlin

bfd/ChangeLog:

2015-09-08  Renlin Li <renlin.li@arm.com>

    * 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/ChangeLog:

2015-09-08  Renlin Li <renlin.li@arm.com>

    * 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/ChangeLog:

2015-09-08  Renlin Li <renlin.li@arm.com>

    * 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/ChangeLog:

2015-09-08  Renlin Li <renlin.li@arm.com>

    * ld-aarch64/tls-large-ie.d: New.
    * ld-aarch64/tls-large-ie.s: New.
    * ld-aarch64/aarch64-elf.exp: Run new test.
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index ac2fa7f..5e20d5f 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -5791,12 +5791,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.  */
@@ -5808,6 +5802,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,
+
 /* Unsigned 12 bit byte offset to module TLS base address.  */
   BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12,
 
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 874f07e..5d113fd 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -1020,34 +1020,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) */
@@ -1104,6 +1076,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 */
+
   /* Unsigned 12 bit byte offset to module TLS base address.  */
   HOWTO (AARCH64_R (TLSLD_ADD_DTPREL_LO12),	/* type */
 	 0,			/* rightshift */
@@ -4258,6 +4258,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:
@@ -5228,6 +5230,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;
 
@@ -5812,6 +5816,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;
@@ -6258,6 +6264,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:
@@ -6733,6 +6741,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 2707bde..083880a 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -322,6 +322,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_TLSLE_MOVW_TPREL_G0_NC:
     case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC:
       contents = reencode_movw_imm (contents, addend);
@@ -462,6 +464,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;
@@ -472,6 +475,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 40e4118..1a2cf5f 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_LO12",
   "BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC",
   "BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21",
diff --git a/bfd/reloc.c b/bfd/reloc.c
index f408a97..f50c30f 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/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 0b7d92e..c0c5d8a 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,
@@ -4643,6 +4661,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_TLSLE_MOVW_TPREL_G0:
     case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC:
       shift = 0;
@@ -4652,6 +4671,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_TLSLE_MOVW_TPREL_G1:
     case BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC:
       shift = 16;
@@ -6842,6 +6862,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_LO12:
     case BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC:
     case BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21:
@@ -7057,6 +7079,8 @@ 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_TLSIE_MOVW_GOTTPREL_G0_NC:
+    case BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1:
     case BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12:
     case BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC:
     case BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21:
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/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index 66cc7bb..3d7b846 100644
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
@@ -167,6 +167,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 \<test\>:
+   10000:	58000121 	ldr	x1, 10024 \<test\+0x24\>
+   10004:	10000102 	adr	x2, 10024 \<test\+0x24\>
+   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_ - .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]