[RuntimeDyld][AArch64] Add explicit addends before calling relocationValueRef.

relocationValueRef uses the addend, so it has to be set before the call.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244574 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Lang Hames 2015-08-11 06:27:53 +00:00
parent 1cca7d1ed6
commit f52c83762e
2 changed files with 16 additions and 5 deletions

View File

@ -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)

View File

@ -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.