[PATCH] D65548: Make JITDylib ignore Exported flag

Sasha Krassovsky via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 1 10:14:32 PDT 2019


save-buffer updated this revision to Diff 212844.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65548/new/

https://reviews.llvm.org/D65548

Files:
  llvm/lib/ExecutionEngine/Orc/Core.cpp


Index: llvm/lib/ExecutionEngine/Orc/Core.cpp
===================================================================
--- llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -376,11 +376,13 @@
     auto I = SymbolFlags.find(KV.first);
     assert(I != SymbolFlags.end() &&
            "Resolving symbol outside this responsibility set");
+    // Mask out Exported for compatibility with COFF
+    constexpr auto Mask = ~JITSymbolFlags::Exported;
     if (I->second.isWeak())
-      assert(I->second == (KV.second.getFlags() | JITSymbolFlags::Weak) &&
+      assert((I->second & Mask) == ((KV.second.getFlags() | JITSymbolFlags::Weak) & Mask) &&
              "Resolving symbol with incorrect flags");
     else
-      assert(I->second == KV.second.getFlags() &&
+      assert((I->second & Mask) == (KV.second.getFlags() & Mask) &&
              "Resolving symbol with incorrect flags");
   }
 #endif
@@ -871,12 +873,19 @@
              "Symbol should be materializing");
       assert(I->second.getAddress() == 0 && "Symbol has already been resolved");
 
-      assert((Sym.getFlags() & ~JITSymbolFlags::Weak) ==
-                 (I->second.getFlags() & ~JITSymbolFlags::Weak) &&
+      // Mask out Exported flag for compatibility with COFF
+      constexpr auto Mask = ~(JITSymbolFlags::Weak | JITSymbolFlags::Exported);
+      assert((Sym.getFlags() & Mask) ==
+                 (I->second.getFlags() & Mask) &&
              "Resolved flags should match the declared flags");
 
       // Once resolved, symbols can never be weak.
-      JITSymbolFlags ResolvedFlags = Sym.getFlags();
+      // IMPORTANT: We use I->second.getFlags() because we want
+      //            to reuse the flags from the original IR. Some
+      //            object file formats like COFF don't have an
+      //            exported flag, for example, so we want to preserve
+      //            IR flags.
+      JITSymbolFlags ResolvedFlags = I->second.getFlags();
       ResolvedFlags &= ~JITSymbolFlags::Weak;
       I->second.setAddress(Sym.getAddress());
       I->second.setFlags(ResolvedFlags);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65548.212844.patch
Type: text/x-patch
Size: 2110 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190801/80b04c07/attachment.bin>


More information about the llvm-commits mailing list