[lld] r257854 - [ELF/AArch64] Add support for R_AARCH64_LDST16_ABS_LO12_NC relocation.

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 14 17:49:52 PST 2016


Author: davide
Date: Thu Jan 14 19:49:51 2016
New Revision: 257854

URL: http://llvm.org/viewvc/llvm-project?rev=257854&view=rev
Log:
[ELF/AArch64] Add support for R_AARCH64_LDST16_ABS_LO12_NC relocation.

Found while trying to self-host the toolchain that libLTO needs it.

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=257854&r1=257853&r2=257854&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Thu Jan 14 19:49:51 2016
@@ -1271,6 +1271,7 @@ bool AArch64TargetInfo::needsCopyRel(uin
   case R_AARCH64_ADR_PREL_LO21:
   case R_AARCH64_ADR_PREL_PG_HI21:
   case R_AARCH64_LDST8_ABS_LO12_NC:
+  case R_AARCH64_LDST16_ABS_LO12_NC:
   case R_AARCH64_LDST32_ABS_LO12_NC:
   case R_AARCH64_LDST64_ABS_LO12_NC:
   case R_AARCH64_LDST128_ABS_LO12_NC:
@@ -1384,6 +1385,9 @@ void AArch64TargetInfo::relocateOne(uint
   case R_AARCH64_LDST128_ABS_LO12_NC:
     or32le(Loc, (SA & 0x0FF8) << 6);
     break;
+  case R_AARCH64_LDST16_ABS_LO12_NC:
+    or32le(Loc, (SA & 0x0FFC) << 9);
+    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=257854&r1=257853&r2=257854&view=diff
==============================================================================
--- lld/trunk/test/ELF/aarch64-relocs.s (original)
+++ lld/trunk/test/ELF/aarch64-relocs.s Thu Jan 14 19:49:51 2016
@@ -136,3 +136,17 @@ foo128:
 # CHECK:   1104c:       74 16 c0 3d     ldr     q20, [x19, #80]
 #foo128:
 #   11050:       66 6f 6f 00     .word
+
+.section .R_AARCH64_LDST16_ABS_LO12_NC,"ax", at progbits
+ldst16:
+  ldr h17, [x19, :lo12:foo16]
+foo16:
+  .asciz "foo"
+  .size mystr, 3
+
+# S = 0x11054, A = 0x4
+# R = ((S + A) & 0x0FFC) << 9 = 0xb000
+# 0xb000 | 0x7d400271 = 0x7d40b271
+# CHECK: Disassembly of section .R_AARCH64_LDST16_ABS_LO12_NC:
+# CHECK-NEXT: ldst16:
+# CHECK-NEXT:   11054:       71 b2 40 7d     ldr     h17, [x19, #88]




More information about the llvm-commits mailing list