diff options
author | Lang Hames <lhames@gmail.com> | 2019-11-27 22:25:59 -0800 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2019-11-27 22:46:07 -0800 |
commit | c33598d5e547cddcd0b2a8e647570a759e01e02b (patch) | |
tree | 45b93d9816575560eceea5ba8e28f019e08dbe85 /llvm/lib/ExecutionEngine | |
parent | 825debe847d15a5670eff54745a6691145ddfae1 (diff) | |
download | bcm5719-llvm-c33598d5e547cddcd0b2a8e647570a759e01e02b.tar.gz bcm5719-llvm-c33598d5e547cddcd0b2a8e647570a759e01e02b.zip |
[JITLink] Make sure MachO/x86-64 handles 32-bit signed addends correctly.
These need to be sign extended when loading into Edge addends.
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r-- | llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp index 9dbfb6556e3..69ec72aae29 100644 --- a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp @@ -252,7 +252,7 @@ private: TargetSymbol = TargetSymbolOrErr->GraphSymbol; else return TargetSymbolOrErr.takeError(); - Addend = *(const ulittle32_t *)FixupContent; + Addend = *(const little32_t *)FixupContent; break; case Pointer32: if (auto TargetSymbolOrErr = findSymbolByIndex(RI.r_symbolnum)) @@ -284,12 +284,12 @@ private: TargetSymbol = TargetSymbolOrErr->GraphSymbol; else return TargetSymbolOrErr.takeError(); - Addend = *(const ulittle32_t *)FixupContent + + Addend = *(const little32_t *)FixupContent + (1 << (*Kind - PCRel32Minus1)); break; case PCRel32Anon: { JITTargetAddress TargetAddress = - FixupAddress + 4 + *(const ulittle32_t *)FixupContent; + FixupAddress + 4 + *(const little32_t *)FixupContent; if (auto TargetSymbolOrErr = findSymbolByAddress(TargetAddress)) TargetSymbol = &*TargetSymbolOrErr; else @@ -303,7 +303,7 @@ private: JITTargetAddress Delta = static_cast<JITTargetAddress>(1ULL << (*Kind - PCRel32Minus1Anon)); JITTargetAddress TargetAddress = - FixupAddress + 4 + Delta + *(const ulittle32_t *)FixupContent; + FixupAddress + 4 + Delta + *(const little32_t *)FixupContent; if (auto TargetSymbolOrErr = findSymbolByAddress(TargetAddress)) TargetSymbol = &*TargetSymbolOrErr; else |