aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
diff options
context:
space:
mode:
authorStefan Gränitz <stefan.graenitz@gmail.com>2023-03-28 10:31:46 +0200
committerStefan Gränitz <stefan.graenitz@gmail.com>2023-03-28 10:37:28 +0200
commitf8d8ca1fc1c6b8c39efd477b2baa7d209255360b (patch)
treef01da0323753cec7e8b79e062a599da8abad772b /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
parent9910d10b18074371f2ff19a7472643a6adeeeacc (diff)
downloadllvm-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.cpp14
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) {