summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2019-10-11 01:50:31 +0000
committerLang Hames <lhames@gmail.com>2019-10-11 01:50:31 +0000
commitb45359387092a01bb60fdd3b27cadcb91868b508 (patch)
treee5231e151513996b7adeeff27af97cceb9e1b114 /llvm/lib/ExecutionEngine
parent8fa56c49dfc7c219ba37281145d73fd724941715 (diff)
downloadbcm5719-llvm-b45359387092a01bb60fdd3b27cadcb91868b508.tar.gz
bcm5719-llvm-b45359387092a01bb60fdd3b27cadcb91868b508.zip
[JITLink] Fix MachO/arm64 GOTPAGEOFF encoding.
The original implementation failed to shift the immediate down. This should fix some of the bot failures due to r374476. llvm-svn: 374499
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
index ab33631ceeb..945343bff89 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
@@ -614,12 +614,15 @@ private:
}
case GOTPageOffset12: {
assert(E.getAddend() == 0 && "GOTPAGEOF12 with non-zero addend");
- uint64_t TargetOffset = E.getTarget().getAddress() & 0xfff;
uint32_t RawInstr = *(ulittle32_t *)FixupPtr;
assert((RawInstr & 0xfffffc00) == 0xf9400000 &&
"RawInstr isn't a 64-bit LDR immediate");
- uint32_t FixedInstr = RawInstr | (TargetOffset << 10);
+
+ uint32_t TargetOffset = E.getTarget().getAddress() & 0xfff;
+ assert((TargetOffset & 0x7) == 0 && "GOT entry is not 8-byte aligned");
+ uint32_t EncodedImm = (TargetOffset >> 3) << 10;
+ uint32_t FixedInstr = RawInstr | EncodedImm;
*(ulittle32_t *)FixupPtr = FixedInstr;
break;
}
OpenPOWER on IntegriCloud