[llvm] f8d8ca1 - [Orc][AArch32] Polish Thumb symbol assertions in ObjectLinkingLayer

Stefan Gränitz via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 28 01:38:48 PDT 2023


Author: Stefan Gränitz
Date: 2023-03-28T10:37:28+02:00
New Revision: f8d8ca1fc1c6b8c39efd477b2baa7d209255360b

URL: https://github.com/llvm/llvm-project/commit/f8d8ca1fc1c6b8c39efd477b2baa7d209255360b
DIFF: https://github.com/llvm/llvm-project/commit/f8d8ca1fc1c6b8c39efd477b2baa7d209255360b.diff

LOG: [Orc][AArch32] Polish Thumb symbol assertions in ObjectLinkingLayer

Added: 
    

Modified: 
    llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
index 03dd6b507104d..a29f3d1c3aec8 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) {


        


More information about the llvm-commits mailing list