diff options
| author | Lang Hames <lhames@gmail.com> | 2019-10-11 01:50:31 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2019-10-11 01:50:31 +0000 |
| commit | b45359387092a01bb60fdd3b27cadcb91868b508 (patch) | |
| tree | e5231e151513996b7adeeff27af97cceb9e1b114 /llvm/lib/ExecutionEngine | |
| parent | 8fa56c49dfc7c219ba37281145d73fd724941715 (diff) | |
| download | bcm5719-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.cpp | 7 |
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; } |

