[AArch64][2/8] GAS support BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21
authorJiong Wang <jiong.wang@arm.com>
Tue, 11 Aug 2015 15:58:20 +0000 (16:58 +0100)
committerJiong Wang <jiong.wang@arm.com>
Tue, 11 Aug 2015 20:24:38 +0000 (21:24 +0100)
2015-08-11  Jiong Wang  <jiong.wang@arm.com>

bfd/
  * reloc.c (BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21): New entry.
  * bfd-in2.h: Regenerate.
  * libbfd.h: Regenerate.
  * elfnn-aarch64.c (elfNN_aarch64_howto_table): New entry for
  BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.

gas/
  * config/tc-aarch64.c (reloc_table): New relocation modifiers.
  (md_apply_fix): Support BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.
  (aarch64_force_relocation): Likewise.

gas/testsuite/
  * gas/aarch64/reloc-tlsldm-page-1.s: New testcase.
  * gas/aarch64/reloc-tlsldm-page-ilp32-1.s: Likewise.
  * gas/aarch64/reloc-tlsldm-page-1.d: New expectation file.
  * gas/aarch64/reloc-tlsldm-page-ilp32-1.d: Likewise.

12 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/elfnn-aarch64.c
bfd/libbfd.h
bfd/reloc.c
gas/ChangeLog
gas/config/tc-aarch64.c
gas/testsuite/ChangeLog
gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.s [new file with mode: 0644]

index 7912368cb7df7b381a4064c5c16ff8fff4b183c9..666b3cd99d9b65e6eaa2530f7b07398434d51cdc 100644 (file)
@@ -1,3 +1,11 @@
+2015-08-11  Jiong Wang  <jiong.wang@arm.com>
+
+       * reloc.c (BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21): New entry.
+       * bfd-in2.h: Regenerate.
+       * libbfd.h: Regenerate.
+       * elfnn-aarch64.c (elfNN_aarch64_howto_table): New entry for
+       BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.
+
 2015-08-11  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/18808
index c27db8dc95da2068fc72442e4e60d57387a5ed9e..43e1324cced755e84fc42c3d26f398df4cc1e765 100644 (file)
@@ -5794,6 +5794,10 @@ BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.  */
 /* AArch64 TLS INITIAL EXEC relocation.  */
   BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19,
 
+/* GOT entry page address for AArch64 TLS Local Dynamic, used with ADRP
+instruction.  */
+  BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21,
+
 /* GOT entry address for AArch64 TLS Local Dynamic, used with ADR instruction.  */
   BFD_RELOC_AARCH64_TLSLD_ADR_PREL21,
 
index 97122535d27a774a17cf9dddceed185d1197850f..16769bc3f2464bd3957363ba3f3bd0b568610f7f 100644 (file)
@@ -1025,6 +1025,22 @@ static reloc_howto_type elfNN_aarch64_howto_table[] =
         0x1ffffc,              /* dst_mask */
         FALSE),                /* pcrel_offset */
 
+  /* Get to the page for the GOT entry for the symbol
+     (G(S) - P) using an ADRP instruction.  */
+  HOWTO (AARCH64_R (TLSLD_ADR_PAGE21), /* type */
+        12,                    /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        21,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed,      /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        AARCH64_R_STR (TLSLD_ADR_PAGE21),      /* name */
+        FALSE,                 /* partial_inplace */
+        0x1fffff,              /* src_mask */
+        0x1fffff,              /* dst_mask */
+        TRUE),                 /* pcrel_offset */
+
   HOWTO (AARCH64_R (TLSLD_ADR_PREL21), /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
index 18e3c4025a0a495961fdac8c0aba054af12f99bd..03e9393cfe53132f3eb54770ff9873d9acbfe7b4 100644 (file)
@@ -2759,6 +2759,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "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_TLSLD_ADR_PAGE21",
   "BFD_RELOC_AARCH64_TLSLD_ADR_PREL21",
   "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2",
   "BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1",
index 34780068ded4729137a3dcf7f1b2ed9ab5d45ea1..d6252c850677a560e45efb9b841f8258e0e53d9a 100644 (file)
@@ -6843,6 +6843,11 @@ ENUM
   BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19
 ENUMDOC
   AArch64 TLS INITIAL EXEC relocation.
+ENUM
+  BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21
+ENUMDOC
+  GOT entry page address for AArch64 TLS Local Dynamic, used with ADRP
+  instruction.
 ENUM
   BFD_RELOC_AARCH64_TLSLD_ADR_PREL21
 ENUMDOC
index 9cf4ab4ffad594a9d2a5b6cc70c698c125a24584..a97108a5f25db6dea7c62de04a69a3fe00fb3a78 100644 (file)
@@ -1,3 +1,9 @@
+2015-08-11  Jiong Wang  <jiong.wang@arm.com>
+
+       * config/tc-aarch64.c (reloc_table): New relocation modifiers.
+       (md_apply_fix): Support BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.
+       (aarch64_force_relocation): Likewise.
+
 2015-08-11  Nick Clifton  <nickc@redhat.com>
 
        PR gas/18765
index 8d403f3bd64e34405cef417fc91b63db655eb7e9..c01ec6dbd0f549d5c703069d69a2bc6f2aa2b956 100644 (file)
@@ -2507,7 +2507,7 @@ static struct reloc_table_entry reloc_table[] = {
      zero without any outstanding runtime relocation. */
   {"tlsldm", 0,
    BFD_RELOC_AARCH64_TLSLD_ADR_PREL21, /* adr_type */
-   0,
+   BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21,
    0,
    0,
    0,
@@ -6778,6 +6778,7 @@ 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_TLSLD_ADR_PAGE21:
     case BFD_RELOC_AARCH64_TLSLD_ADR_PREL21:
     case BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12:
     case BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12:
@@ -6988,6 +6989,7 @@ 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_ADR_PAGE21:
     case BFD_RELOC_AARCH64_TLSLD_ADR_PREL21:
     case BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12:
     case BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12:
index e2e3fd49ded9d334d7db13d6eb4ba7024f1bced3..b790d4a8adffded78b6d342f56f786ce8527c67e 100644 (file)
@@ -1,3 +1,10 @@
+2015-08-11  Jiong Wang  <jiong.wang@arm.com>
+
+       * gas/aarch64/reloc-tlsldm-page-1.s: New testcase.
+       * gas/aarch64/reloc-tlsldm-page-ilp32-1.s: Likewise.
+       * gas/aarch64/reloc-tlsldm-page-1.d: New expectation file.
+       * gas/aarch64/reloc-tlsldm-page-ilp32-1.d: Likewise.
+
 2015-08-10  Robert Suchanek  <robert.suchanek@imgtec.com>
 
        * gas/mips/r6.s: Add tests for "sigrie".
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.d
new file mode 100644 (file)
index 0000000..5d757a4
--- /dev/null
@@ -0,0 +1,10 @@
+#objdump: -dr
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+0000000000000000 <.*>:
+   0:  8b030041        add     x1, x2, x3
+   4:  90000000        adrp    x0, 0 <dummy>
+                       4: R_AARCH64_TLSLD_ADR_PAGE21   dummy
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.s b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-1.s
new file mode 100644 (file)
index 0000000..8e7ffab
--- /dev/null
@@ -0,0 +1,6 @@
+// Test file for AArch64 GAS -- tlsldm page
+
+func:
+       add     x1, x2, x3
+       // BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21
+       adrp    x0, :tlsldm:dummy
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.d
new file mode 100644 (file)
index 0000000..e2c81ef
--- /dev/null
@@ -0,0 +1,12 @@
+#as: -mabi=ilp32
+#objdump: -dr
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+00000000 <.*>:
+   0:  0b030041        add     w1, w2, w3
+   4:  90000000        adrp    x0, 0 <dummy>
+                       4: R_AARCH64_P32_TLSLD_ADR_PAGE21       dummy
+
diff --git a/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.s b/gas/testsuite/gas/aarch64/reloc-tlsldm-page-ilp32-1.s
new file mode 100644 (file)
index 0000000..ad9d29b
--- /dev/null
@@ -0,0 +1,6 @@
+// Test file for AArch64 GAS -- tlsldm page ILP32
+
+func:
+       add     w1, w2, w3
+       // BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21
+       adrp    x0, :tlsldm:dummy