diff options
| author | Lang Hames <lhames@gmail.com> | 2015-08-11 06:27:53 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2015-08-11 06:27:53 +0000 |
| commit | 0fd3610e6dde8e04e51da4a747e120bcbc9ca097 (patch) | |
| tree | 52fef9ff1c772f0eabc5c42bb6b8fc9f5470f77c | |
| parent | d7f932a8c8f16939f154980b783043243a52a79f (diff) | |
| download | bcm5719-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.h | 9 | ||||
| -rw-r--r-- | llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s | 12 |
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. |

