[lld] r257731 - [ELF/AArch64] Support R_AARCH64_LDST128_ABS_LO12_NC relocation.

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 13 17:30:21 PST 2016


Author: davide
Date: Wed Jan 13 19:30:21 2016
New Revision: 257731

URL: http://llvm.org/viewvc/llvm-project?rev=257731&view=rev
Log:
[ELF/AArch64] Support R_AARCH64_LDST128_ABS_LO12_NC relocation.

Modified:
    lld/trunk/ELF/Target.cpp
    lld/trunk/test/ELF/aarch64-relocs.s

Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=257731&r1=257730&r2=257731&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Wed Jan 13 19:30:21 2016
@@ -1269,6 +1269,7 @@ bool AArch64TargetInfo::needsCopyRel(uin
   case R_AARCH64_LDST8_ABS_LO12_NC:
   case R_AARCH64_LDST32_ABS_LO12_NC:
   case R_AARCH64_LDST64_ABS_LO12_NC:
+  case R_AARCH64_LDST128_ABS_LO12_NC:
     if (auto *SS = dyn_cast<SharedSymbol<ELF64LE>>(&S))
       return SS->Sym.getType() == STT_OBJECT;
     return false;
@@ -1376,6 +1377,9 @@ void AArch64TargetInfo::relocateOne(uint
     checkAlignment<8>(SA, Type);
     or32le(Loc, (SA & 0xFF8) << 7);
     break;
+  case R_AARCH64_LDST128_ABS_LO12_NC:
+    or32le(Loc, (SA & 0x0FF8) << 6);
+    break;
   case R_AARCH64_LDST8_ABS_LO12_NC:
     or32le(Loc, (SA & 0xFFF) << 10);
     break;

Modified: lld/trunk/test/ELF/aarch64-relocs.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/aarch64-relocs.s?rev=257731&r1=257730&r2=257731&view=diff
==============================================================================
--- lld/trunk/test/ELF/aarch64-relocs.s (original)
+++ lld/trunk/test/ELF/aarch64-relocs.s Wed Jan 13 19:30:21 2016
@@ -120,3 +120,19 @@ foo8:
 # CHECK: Disassembly of section .R_AARCH64_LDST8_ABS_LO12_NC:
 # CHECK-NEXT: ldst8:
 # CHECK-NEXT:   11044:       ab 21 81 39     ldrsb x11, [x13, #72]
+
+.section .R_AARCH64_LDST128_ABS_LO12_NC,"ax", at progbits
+ldst128:
+  ldr q20, [x19, #:lo12:foo128]
+foo128:
+  .asciz "foo"
+  .size mystr, 3
+
+# S = 0x1104c, A = 0x4
+# R = ((S + A) & 0xFF8) << 6 = 0x00001400
+# 0x00001400 | 0x3dc00274 = 0x3dc01674
+# CHECK: Disassembly of section .R_AARCH64_LDST128_ABS_LO12_NC:
+# CHECK: ldst128:
+# CHECK:   1104c:       74 16 c0 3d     ldr     q20, [x19, #80]
+#foo128:
+#   11050:       66 6f 6f 00     .word




More information about the llvm-commits mailing list