diff options
author | Stefan Gränitz <stefan.graenitz@gmail.com> | 2023-03-28 10:31:46 +0200 |
---|---|---|
committer | Stefan Gränitz <stefan.graenitz@gmail.com> | 2023-03-28 10:37:28 +0200 |
commit | f8d8ca1fc1c6b8c39efd477b2baa7d209255360b (patch) | |
tree | f01da0323753cec7e8b79e062a599da8abad772b /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | |
parent | 9910d10b18074371f2ff19a7472643a6adeeeacc (diff) | |
download | llvm-f8d8ca1fc1c6b8c39efd477b2baa7d209255360b.zip llvm-f8d8ca1fc1c6b8c39efd477b2baa7d209255360b.tar.gz llvm-f8d8ca1fc1c6b8c39efd477b2baa7d209255360b.tar.bz2 |
[Orc][AArch32] Polish Thumb symbol assertions in ObjectLinkingLayer
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp index 03dd6b5..a29f3d1 100644 --- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp @@ -41,19 +41,21 @@ bool hasInitializerSection(jitlink::LinkGraph &G) { } ExecutorAddr getJITSymbolPtrForSymbol(Symbol &Sym, const Triple &TT) { - uint64_t CallableAddr = Sym.getAddress().getValue(); switch (TT.getArch()) { case Triple::arm: case Triple::armeb: case Triple::thumb: case Triple::thumbeb: - if (Sym.hasTargetFlags(aarch32::ThumbSymbol) && Sym.isCallable()) - CallableAddr |= 0x01; // LSB is thumb bit - break; + if (Sym.hasTargetFlags(aarch32::ThumbSymbol)) { + // Set LSB to indicate thumb target + assert(Sym.isCallable() && "Only callable symbols can have thumb flag"); + assert((Sym.getAddress().getValue() & 0x01) == 0 && "LSB is clear"); + return Sym.getAddress() + 0x01; + } + return Sym.getAddress(); default: - break; + return Sym.getAddress(); } - return ExecutorAddr(CallableAddr); } JITSymbolFlags getJITSymbolFlagsForSymbol(Symbol &Sym) { |