[PATCH] D18031: [lld] [ELF/AArch64] Simplify AArch64 isRelRelative

Adhemerval Zanella via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 10 01:34:48 PST 2016


zatrazz created this revision.
zatrazz added reviewers: ruiu, rafael.
zatrazz added subscribers: llvm-commits, grimar, rengolin, emaste.
zatrazz set the repository for this revision to rL LLVM.
zatrazz added a project: lld.
Herald added a subscriber: aemerson.

This patch simplifies the isRelRelative for AArch64 to just handle the
cases where it is not relative, instead of list all the relocations
that is.  It also adds more testing for shared objects creation.

Repository:
  rL LLVM

http://reviews.llvm.org/D18031

Files:
  ELF/Target.cpp
  test/ELF/aarch64-relative.s

Index: test/ELF/aarch64-relative.s
===================================================================
--- test/ELF/aarch64-relative.s
+++ test/ELF/aarch64-relative.s
@@ -2,13 +2,20 @@
 // RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t.o
 // RUN: ld.lld %t.o -o %t.so -shared
 // RUN: llvm-readobj -r %t.so | FileCheck %s
-        adrp    x8, .Lfoo
-        strb    w9, [x8, :lo12:.Lfoo]
-        ldr     w0, [x8, :lo12:.Lfoo]
-        ldr     x0, [x8, :lo12:.Lfoo]
-        add     x0, x0, :lo12:.Lfoo
-        bl      .Lfoo
 
+        adr     x8, .Lfoo                 // R_AARCH64_ADR_PREL_LO21
+        adrp    x8, .Lfoo                 // R_AARCH64_ADR_PREL_PG_HI21
+        strb    w9, [x8, :lo12:.Lfoo]     // R_AARCH64_LDST8_ABS_LO12_NC
+        ldr     h17, [x19, :lo12:.Lfoo]   // R_AARCH64_LDST16_ABS_LO12_NC
+        ldr     w0, [x8, :lo12:.Lfoo]     // R_AARCH64_LDST32_ABS_LO12_NC
+        ldr     x0, [x8, :lo12:.Lfoo]     // R_AARCH64_LDST64_ABS_LO12_NC
+        ldr     q20, [x19, #:lo12:.Lfoo]  // R_AARCH64_LDST128_ABS_LO12_NC
+        add     x0, x0, :lo12:.Lfoo       // R_AARCH64_ADD_ABS_LO12_NC
+        bl      .Lfoo                     // R_AARCH64_CALL26
+        b       .Lfoo                     // R_AARCH64_JUMP26
+        beq     .Lfoo                     // R_AARCH64_CONDBR19
+        adr     x1, .Lfoo                 // R_AARCH64_ADR_PREL_LO21
+        tbz     x1, 7, .Lfoo              // R_AARCH64_TSTBR14
         .data
         .Lfoo:
 
Index: ELF/Target.cpp
===================================================================
--- ELF/Target.cpp
+++ ELF/Target.cpp
@@ -1223,11 +1223,14 @@
 }
 
 bool AArch64TargetInfo::isRelRelative(uint32_t Type) const {
-  return Type == R_AARCH64_PREL32 || Type == R_AARCH64_ADR_PREL_PG_HI21 ||
-         Type == R_AARCH64_LDST8_ABS_LO12_NC ||
-         Type == R_AARCH64_LDST32_ABS_LO12_NC ||
-         Type == R_AARCH64_LDST64_ABS_LO12_NC ||
-         Type == R_AARCH64_ADD_ABS_LO12_NC || Type == R_AARCH64_CALL26;
+  switch (Type) {
+  default:
+    return true;
+  case R_AARCH64_ABS64:
+  case R_AARCH64_ADR_GOT_PAGE:
+  case R_AARCH64_LD64_GOT_LO12_NC:
+    return !Config->Shared;
+  }
 }
 
 bool AArch64TargetInfo::isTlsInitialExecRel(uint32_t Type) const {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18031.50247.patch
Type: text/x-patch
Size: 2263 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160310/e70c11a9/attachment.bin>


More information about the llvm-commits mailing list