[llvm] r374499 - [JITLink] Fix MachO/arm64 GOTPAGEOFF encoding.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 10 18:50:31 PDT 2019
Author: lhames
Date: Thu Oct 10 18:50:31 2019
New Revision: 374499
URL: http://llvm.org/viewvc/llvm-project?rev=374499&view=rev
Log:
[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.
Modified:
llvm/trunk/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
Modified: llvm/trunk/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/MachO_arm64.cpp?rev=374499&r1=374498&r2=374499&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/JITLink/MachO_arm64.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/JITLink/MachO_arm64.cpp Thu Oct 10 18:50:31 2019
@@ -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;
}
More information about the llvm-commits
mailing list