summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2015-08-11 06:27:53 +0000
committerLang Hames <lhames@gmail.com>2015-08-11 06:27:53 +0000
commit0fd3610e6dde8e04e51da4a747e120bcbc9ca097 (patch)
tree52fef9ff1c772f0eabc5c42bb6b8fc9f5470f77c
parentd7f932a8c8f16939f154980b783043243a52a79f (diff)
downloadbcm5719-llvm-0fd3610e6dde8e04e51da4a747e120bcbc9ca097.tar.gz
bcm5719-llvm-0fd3610e6dde8e04e51da4a747e120bcbc9ca097.zip
[RuntimeDyld][AArch64] Add explicit addends before calling relocationValueRef.
relocationValueRef uses the addend, so it has to be set before the call. llvm-svn: 244574
-rw-r--r--llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h9
-rw-r--r--llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s12
2 files changed, 16 insertions, 5 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
index 7bf764114ba..929639cecce 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
@@ -272,15 +272,14 @@ public:
RelocationEntry RE(getRelocationEntry(SectionID, Obj, RelI));
RE.Addend = decodeAddend(RE);
- RelocationValueRef Value(
- getRelocationValueRef(Obj, RelI, RE, ObjSectionToID));
assert((ExplicitAddend == 0 || RE.Addend == 0) && "Relocation has "\
"ARM64_RELOC_ADDEND and embedded addend in the instruction.");
- if (ExplicitAddend) {
+ if (ExplicitAddend)
RE.Addend = ExplicitAddend;
- Value.Offset = ExplicitAddend;
- }
+
+ RelocationValueRef Value(
+ getRelocationValueRef(Obj, RelI, RE, ObjSectionToID));
bool IsExtern = Obj.getPlainRelocationExternal(RelInfo);
if (!IsExtern && RE.IsPCRel)
diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s b/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
index 04d269e2aeb..0387b932f1c 100644
--- a/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
+++ b/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
@@ -55,6 +55,18 @@ ldr2:
ldr x0, [x0, _ptr@GOTPAGEOFF]
ret
+# rtdyld-check: decode_operand(add1, 2) = (tgt+8)[11:2] << 2
+ .globl _test_explicit_addend_reloc
+ .align 4
+_test_explicit_addend_reloc:
+add1:
+ add x0, x0, tgt@PAGEOFF+8
+
+ .align 3
+tgt:
+ .long 0
+ .long 0
+ .long 7
# Test ARM64_RELOC_UNSIGNED relocation. The absolute 64-bit address of the
# function should be stored at the 8-byte memory location.
OpenPOWER on IntegriCloud