]> granicus.if.org Git - llvm/commitdiff
RuntimeDyldELF: add LDST128_ABS_LO12_NC reloc
authorEugene Leviant <eleviant@accesssoftek.com>
Mon, 23 Jan 2017 13:52:08 +0000 (13:52 +0000)
committerEugene Leviant <eleviant@accesssoftek.com>
Mon, 23 Jan 2017 13:52:08 +0000 (13:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292788 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_relocations.s

index d2f30deff926c20726ca63f8d41a251a5e6fc595..56b7c49164fe7e10efa2a66232d6bac0a3fb20d5 100644 (file)
@@ -443,6 +443,12 @@ void RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &Section,
     // from bits 11:3 of X
     or32AArch64Imm(TargetPtr, getBits(Value + Addend, 3, 11));
     break;
+  case ELF::R_AARCH64_LDST128_ABS_LO12_NC:
+    // Operation: S + A
+    // Immediate goes in bits 21:10 of LD/ST instruction, taken
+    // from bits 11:4 of X
+    or32AArch64Imm(TargetPtr, getBits(Value + Addend, 4, 11));
+    break;
   }
 }
 
index 9f21f974da9205bed3a8ade31ab9c962b8deb210..1e356ea200f8056864ccb98ff9d74db19e1f917a 100644 (file)
@@ -28,6 +28,8 @@ l:
         ldr s4, [x5, :lo12:a]
 # R_AARCH64_LDST64_ABS_LO12_NC
         ldr x4, [x5, :lo12:a]
+# R_AARCH64_LDST128_ABS_LO12_NC
+        ldr q4, [x5, :lo12:a]
 p:
 # R_AARCH64_ADR_PREL_PG_HI21
 # Test both low and high immediate values
@@ -66,6 +68,7 @@ r:
 # rtdyld-check: (*{4}(l+4))[21:10] = (a+2)[11:1]
 # rtdyld-check: (*{4}(l+8))[21:10] = a[11:2]
 # rtdyld-check: (*{4}(l+12))[21:10] = a[11:3]
+# rtdyld-check: (*{4}(l+16))[21:10] = a[11:4]
 
 ## Check ADR_PREL_PG_HI21. Low order bits of immediate value
 ## go to bits 30:29. High order bits go to bits 23:5