From f8d8ca1fc1c6b8c39efd477b2baa7d209255360b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20Gr=C3=A4nitz?= Date: Tue, 28 Mar 2023 10:31:46 +0200 Subject: [PATCH] [Orc][AArch32] Polish Thumb symbol assertions in ObjectLinkingLayer --- llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | 14 ++++++++------ 1 file 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) { -- 2.7.4