summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-03-01 01:44:33 +0000
committerLang Hames <lhames@gmail.com>2018-03-01 01:44:33 +0000
commit811343cfd8bb8dfbd4756bed3f3ecda2cf407fad (patch)
tree5cb71a39185b907294a2c6a15ba93761e5cef5e8
parent4579bad86c68e664282618339cd2ea1ae17686ad (diff)
downloadbcm5719-llvm-811343cfd8bb8dfbd4756bed3f3ecda2cf407fad.tar.gz
bcm5719-llvm-811343cfd8bb8dfbd4756bed3f3ecda2cf407fad.zip
[RuntimeDyld][MachO] Fix assertion in encodeAddend, add missing directive to
test case. r326290 fixed the assertion for decodeAddend, but not encodeAddend. The regression test failed to catch this because it was missing the subsections_via_symbols flag, so the desired relocation was not applied. This patch also fixes the formatting of the assertion from r326290. llvm-svn: 326406
-rw-r--r--llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h8
-rw-r--r--llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s2
2 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
index 86acf513de3..31cedffa15b 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h
@@ -69,8 +69,8 @@ public:
// Verify that the relocation points to a B/BL instruction.
auto *p = reinterpret_cast<support::aligned_ulittle32_t *>(LocalAddress);
assert(((*p & 0xFC000000) == 0x14000000 ||
- (*p & 0xFC000000) == 0x94000000)
- && "Expected branch instruction.");
+ (*p & 0xFC000000) == 0x94000000) &&
+ "Expected branch instruction.");
// Get the 26 bit addend encoded in the branch instruction and sign-extend
// to 64 bit. The lower 2 bits are always zeros and are therefore implicit
@@ -166,7 +166,9 @@ public:
case MachO::ARM64_RELOC_BRANCH26: {
auto *p = reinterpret_cast<support::aligned_ulittle32_t *>(LocalAddress);
// Verify that the relocation points to the expected branch instruction.
- assert((*p & 0xFC000000) == 0x14000000 && "Expected branch instruction.");
+ assert(((*p & 0xFC000000) == 0x14000000 ||
+ (*p & 0xFC000000) == 0x94000000) &&
+ "Expected branch instruction.");
// Verify addend value.
assert((Addend & 0x3) == 0 && "Branch target is not aligned");
diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s b/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
index 49928dd9d8e..64c4a6dce88 100644
--- a/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
+++ b/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/MachO_ARM64_relocations.s
@@ -90,3 +90,5 @@ _ptr:
# rtdyld-check: *{8}_subtractor_result = _test_branch_reloc - _foo
_subtractor_result:
.quad _test_branch_reloc - _foo
+
+.subsections_via_symbols \ No newline at end of file
OpenPOWER on IntegriCloud