Author: Lang Hames
Date: 2026-03-27T13:47:27+11:00
New Revision: e55fb5de0f97adc1835f0310606051cb6c0185e9

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

LOG: [ORC] Move DylibManager ownership out of ExecutorProcessControl. (#188711)

This removes an unnecessary coupling between ExecutorProcessControl and
DylibManager, allowing clients to select DylibManager implementations
independently.

To simplify the transition, the
ExecutorProcessControl::createDefaultJITDylib method will return an
instance of whatever DylibManager the ExecutorProcessControl
implementation had been using previously.

Added: 
    

Modified: 
    clang/lib/Interpreter/OrcIncrementalExecutor.cpp
    
llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/LLJITWithRemoteDebugging.cpp
    llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.cpp
    llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.h
    llvm/include/llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h
    llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
    llvm/include/llvm/ExecutionEngine/Orc/ExecutorResolutionGenerator.h
    llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
    llvm/include/llvm/ExecutionEngine/Orc/LookupAndRecordAddrs.h
    llvm/include/llvm/ExecutionEngine/Orc/SelfExecutorProcessControl.h
    llvm/include/llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h
    llvm/lib/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.cpp
    llvm/lib/ExecutionEngine/Orc/ExecutorResolutionGenerator.cpp
    llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
    llvm/lib/ExecutionEngine/Orc/LookupAndRecordAddrs.cpp
    llvm/lib/ExecutionEngine/Orc/SelfExecutorProcessControl.cpp
    llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp
    llvm/tools/llvm-jitlink/llvm-jitlink.cpp
    llvm/tools/llvm-jitlink/llvm-jitlink.h
    llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
    llvm/unittests/ExecutionEngine/Orc/OrcTestCommon.h

Removed: 
    


################################################################################
diff  --git a/clang/lib/Interpreter/OrcIncrementalExecutor.cpp 
b/clang/lib/Interpreter/OrcIncrementalExecutor.cpp
index c74e03bb7942a..7134437e6a9ad 100644
--- a/clang/lib/Interpreter/OrcIncrementalExecutor.cpp
+++ b/clang/lib/Interpreter/OrcIncrementalExecutor.cpp
@@ -109,7 +109,8 @@ llvm::Error 
OrcIncrementalExecutor::LoadDynamicLibrary(const char *name) {
   // FIXME: Eventually we should put each library in its own JITDylib and
   //        turn off process symbols by default.
   llvm::orc::ExecutionSession &ES = Jit->getExecutionSession();
-  auto DLSGOrErr = llvm::orc::EPCDynamicLibrarySearchGenerator::Load(ES, name);
+  auto DLSGOrErr = llvm::orc::EPCDynamicLibrarySearchGenerator::Load(
+      ES, Jit->getDylibMgr(), name);
   if (!DLSGOrErr)
     return DLSGOrErr.takeError();
 

diff  --git 
a/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/LLJITWithRemoteDebugging.cpp
 
b/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/LLJITWithRemoteDebugging.cpp
index 1f69415649e84..995e3d7eb0d64 100644
--- 
a/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/LLJITWithRemoteDebugging.cpp
+++ 
b/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/LLJITWithRemoteDebugging.cpp
@@ -187,7 +187,7 @@ int main(int argc, char *argv[]) {
   // for each of it, so the compiler can lookup their symbols.
   for (const std::string &Path : Dylibs)
     J->getMainJITDylib().addGenerator(
-        ExitOnErr(loadDylib(J->getExecutionSession(), Path)));
+        ExitOnErr(loadDylib(J->getExecutionSession(), J->getDylibMgr(), 
Path)));
 
   // Add the loaded IR module to the JIT. This will set up symbol tables and
   // prepare for materialization.

diff  --git 
a/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.cpp 
b/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.cpp
index 6e2aaf32325a9..511b568e36bd4 100644
--- a/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.cpp
+++ b/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.cpp
@@ -27,10 +27,10 @@ using namespace llvm;
 using namespace llvm::orc;
 
 Expected<std::unique_ptr<DefinitionGenerator>>
-loadDylib(ExecutionSession &ES, StringRef RemotePath) {
-  if (auto Handle = ES.getExecutorProcessControl().getDylibMgr().loadDylib(
-          RemotePath.data()))
-    return std::make_unique<EPCDynamicLibrarySearchGenerator>(ES, *Handle);
+loadDylib(ExecutionSession &ES, DylibManager &DylibMgr, StringRef RemotePath) {
+  if (auto Handle = DylibMgr.loadDylib(RemotePath.data()))
+    return std::make_unique<EPCDynamicLibrarySearchGenerator>(ES, DylibMgr,
+                                                              *Handle);
   else
     return Handle.takeError();
 }

diff  --git 
a/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.h 
b/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.h
index 3663307109bdb..70f08787798d7 100644
--- a/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.h
+++ b/llvm/examples/OrcV2Examples/LLJITWithRemoteDebugging/RemoteJITUtils.h
@@ -16,6 +16,7 @@
 
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/DylibManager.h"
 #include "llvm/ExecutionEngine/Orc/Layer.h"
 #include "llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h"
 #include "llvm/Support/Error.h"
@@ -37,6 +38,7 @@ llvm::Expected<std::unique_ptr<llvm::orc::SimpleRemoteEPC>>
 connectTCPSocket(llvm::StringRef NetworkAddress);
 
 llvm::Expected<std::unique_ptr<llvm::orc::DefinitionGenerator>>
-loadDylib(llvm::orc::ExecutionSession &ES, llvm::StringRef RemotePath);
+loadDylib(llvm::orc::ExecutionSession &ES, llvm::orc::DylibManager &DylibMgr,
+          llvm::StringRef RemotePath);
 
 #endif

diff  --git 
a/llvm/include/llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h 
b/llvm/include/llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h
index ccb855160d6f7..43f7751f2dfdb 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h
@@ -16,6 +16,7 @@
 
 #include "llvm/ADT/FunctionExtras.h"
 #include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/DylibManager.h"
 #include "llvm/Support/Compiler.h"
 
 namespace llvm {
@@ -38,10 +39,10 @@ class LLVM_ABI EPCDynamicLibrarySearchGenerator : public 
DefinitionGenerator {
   /// If \p AddAbsoluteSymbols is provided, it is used to add the symbols to 
the
   /// \c JITDylib; otherwise it uses JD.define(absoluteSymbols(...)).
   EPCDynamicLibrarySearchGenerator(
-      ExecutionSession &ES, tpctypes::DylibHandle H,
+      ExecutionSession &ES, DylibManager &DylibMgr, tpctypes::DylibHandle H,
       SymbolPredicate Allow = SymbolPredicate(),
       AddAbsoluteSymbolsFn AddAbsoluteSymbols = nullptr)
-      : EPC(ES.getExecutorProcessControl()), H(H), Allow(std::move(Allow)),
+      : ES(ES), DylibMgr(DylibMgr), H(H), Allow(std::move(Allow)),
         AddAbsoluteSymbols(std::move(AddAbsoluteSymbols)) {}
 
   /// Create an EPCDynamicLibrarySearchGenerator that resolves all symbols
@@ -52,9 +53,9 @@ class LLVM_ABI EPCDynamicLibrarySearchGenerator : public 
DefinitionGenerator {
   /// "missing symbol" behavior in ORC. This distinction shouldn't matter for
   /// most use-cases).
   EPCDynamicLibrarySearchGenerator(
-      ExecutionSession &ES, SymbolPredicate Allow,
+      ExecutionSession &ES, DylibManager &DylibMgr, SymbolPredicate Allow,
       AddAbsoluteSymbolsFn AddAbsoluteSymbols = nullptr)
-      : EPC(ES.getExecutorProcessControl()), Allow(std::move(Allow)),
+      : ES(ES), DylibMgr(DylibMgr), Allow(std::move(Allow)),
         AddAbsoluteSymbols(std::move(AddAbsoluteSymbols)) {}
 
   /// Permanently loads the library at the given path and, on success, returns
@@ -62,17 +63,18 @@ class LLVM_ABI EPCDynamicLibrarySearchGenerator : public 
DefinitionGenerator {
   /// definitions in the library. On failure returns the reason the library
   /// failed to load.
   static Expected<std::unique_ptr<EPCDynamicLibrarySearchGenerator>>
-  Load(ExecutionSession &ES, const char *LibraryPath,
+  Load(ExecutionSession &ES, DylibManager &DylibMgr, const char *LibraryPath,
        SymbolPredicate Allow = SymbolPredicate(),
        AddAbsoluteSymbolsFn AddAbsoluteSymbols = nullptr);
 
   /// Creates a EPCDynamicLibrarySearchGenerator that searches for symbols in
   /// the target process.
   static Expected<std::unique_ptr<EPCDynamicLibrarySearchGenerator>>
-  GetForTargetProcess(ExecutionSession &ES,
+  GetForTargetProcess(ExecutionSession &ES, DylibManager &DylibMgr,
                       SymbolPredicate Allow = SymbolPredicate(),
                       AddAbsoluteSymbolsFn AddAbsoluteSymbols = nullptr) {
-    return Load(ES, nullptr, std::move(Allow), std::move(AddAbsoluteSymbols));
+    return Load(ES, DylibMgr, nullptr, std::move(Allow),
+                std::move(AddAbsoluteSymbols));
   }
 
   Error tryToGenerate(LookupState &LS, LookupKind K, JITDylib &JD,
@@ -82,7 +84,8 @@ class LLVM_ABI EPCDynamicLibrarySearchGenerator : public 
DefinitionGenerator {
 private:
   Error addAbsolutes(JITDylib &JD, SymbolMap Symbols);
 
-  ExecutorProcessControl &EPC;
+  ExecutionSession &ES;
+  DylibManager &DylibMgr;
   std::optional<tpctypes::DylibHandle> H;
   SymbolPredicate Allow;
   AddAbsoluteSymbolsFn AddAbsoluteSymbols;

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h 
b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
index 379f8e42dfce7..b05543ec0a869 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
@@ -146,11 +146,8 @@ class LLVM_ABI ExecutorProcessControl {
     return *MemMgr;
   }
 
-  /// Return the DylibManager for the target process.
-  DylibManager &getDylibMgr() const {
-    assert(DylibMgr && "No DylibMgr object set");
-    return *DylibMgr;
-  }
+  /// Create a default DylibManager for the target process.
+  virtual Expected<std::unique_ptr<DylibManager>> createDefaultDylibMgr() = 0;
 
   /// Returns the bootstrap map.
   const StringMap<std::vector<char>> &getBootstrapMap() const {
@@ -317,7 +314,6 @@ class LLVM_ABI ExecutorProcessControl {
   JITDispatchInfo JDI;
   MemoryAccess *MemAccess = nullptr;
   jitlink::JITLinkMemoryManager *MemMgr = nullptr;
-  DylibManager *DylibMgr = nullptr;
   StringMap<std::vector<char>> BootstrapMap;
   StringMap<ExecutorAddr> BootstrapSymbols;
 };

diff  --git 
a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorResolutionGenerator.h 
b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorResolutionGenerator.h
index 9b972edf3e18c..d0d27e8bcbb11 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorResolutionGenerator.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorResolutionGenerator.h
@@ -18,6 +18,7 @@
 #include "llvm/ADT/FunctionExtras.h"
 #include "llvm/ExecutionEngine/Orc/AbsoluteSymbols.h"
 #include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/DylibManager.h"
 
 namespace llvm::orc {
 
@@ -28,16 +29,17 @@ class ExecutorResolutionGenerator : public 
DefinitionGenerator {
       unique_function<std::unique_ptr<MaterializationUnit>(SymbolMap)>;
 
   ExecutorResolutionGenerator(
-      ExecutionSession &ES, tpctypes::ResolverHandle H,
+      ExecutionSession &ES, DylibManager &DylibMgr, tpctypes::ResolverHandle H,
       SymbolPredicate Allow = SymbolPredicate(),
       AbsoluteSymbolsFn AbsoluteSymbols = absoluteSymbols)
-      : EPC(ES.getExecutorProcessControl()), H(H), Allow(std::move(Allow)),
+      : ES(ES), DylibMgr(DylibMgr), H(H), Allow(std::move(Allow)),
         AbsoluteSymbols(std::move(AbsoluteSymbols)) {}
 
   ExecutorResolutionGenerator(
-      ExecutionSession &ES, SymbolPredicate Allow = SymbolPredicate(),
+      ExecutionSession &ES, DylibManager &DylibMgr,
+      SymbolPredicate Allow = SymbolPredicate(),
       AbsoluteSymbolsFn AbsoluteSymbols = absoluteSymbols)
-      : EPC(ES.getExecutorProcessControl()), Allow(std::move(Allow)),
+      : ES(ES), DylibMgr(DylibMgr), Allow(std::move(Allow)),
         AbsoluteSymbols(std::move(AbsoluteSymbols)) {}
 
   /// Permanently loads the library at the given path and, on success, returns
@@ -45,17 +47,18 @@ class ExecutorResolutionGenerator : public 
DefinitionGenerator {
   /// definitions in the library. On failure returns the reason the library
   /// failed to load.
   static Expected<std::unique_ptr<ExecutorResolutionGenerator>>
-  Load(ExecutionSession &ES, const char *LibraryPath,
+  Load(ExecutionSession &ES, DylibManager &DylibMgr, const char *LibraryPath,
        SymbolPredicate Allow = SymbolPredicate(),
        AbsoluteSymbolsFn AbsoluteSymbols = absoluteSymbols);
 
   /// Creates a ExecutorResolutionGenerator that searches for symbols in
   /// the target process.
   static Expected<std::unique_ptr<ExecutorResolutionGenerator>>
-  GetForTargetProcess(ExecutionSession &ES,
+  GetForTargetProcess(ExecutionSession &ES, DylibManager &DylibMgr,
                       SymbolPredicate Allow = SymbolPredicate(),
                       AbsoluteSymbolsFn AbsoluteSymbols = absoluteSymbols) {
-    return Load(ES, nullptr, std::move(Allow), std::move(AbsoluteSymbols));
+    return Load(ES, DylibMgr, nullptr, std::move(Allow),
+                std::move(AbsoluteSymbols));
   }
 
   Error tryToGenerate(LookupState &LS, LookupKind K, JITDylib &JD,
@@ -63,7 +66,8 @@ class ExecutorResolutionGenerator : public 
DefinitionGenerator {
                       const SymbolLookupSet &LookupSet) override;
 
 private:
-  ExecutorProcessControl &EPC;
+  ExecutionSession &ES;
+  DylibManager &DylibMgr;
   tpctypes::ResolverHandle H;
   SymbolPredicate Allow;
   AbsoluteSymbolsFn AbsoluteSymbols;

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h 
b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
index 9c0d6e86d279f..c5f3ece6277d4 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
@@ -17,6 +17,7 @@
 #include "llvm/ExecutionEngine/Orc/AbsoluteSymbols.h"
 #include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
 #include "llvm/ExecutionEngine/Orc/CompileUtils.h"
+#include "llvm/ExecutionEngine/Orc/DylibManager.h"
 #include "llvm/ExecutionEngine/Orc/ExecutionUtils.h"
 #include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
 #include "llvm/ExecutionEngine/Orc/IRPartitionLayer.h"
@@ -213,6 +214,12 @@ class LLVM_ABI LLJIT {
     return PS->deinitialize(JD);
   }
 
+  /// Returns a reference to the DylibManager for the target process.
+  DylibManager &getDylibMgr() {
+    assert(DylibMgr && "No DylibMgr set");
+    return *DylibMgr;
+  }
+
   /// Returns a reference to the ObjLinkingLayer
   ObjectLayer &getObjLinkingLayer() { return *ObjLinkingLayer; }
 
@@ -247,6 +254,7 @@ class LLVM_ABI LLJIT {
 
   std::unique_ptr<ExecutionSession> ES;
   std::unique_ptr<PlatformSupport> PS;
+  std::unique_ptr<DylibManager> DylibMgr;
 
   JITDylib *ProcessSymbols = nullptr;
   JITDylib *Platform = nullptr;

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/LookupAndRecordAddrs.h 
b/llvm/include/llvm/ExecutionEngine/Orc/LookupAndRecordAddrs.h
index 26a7801f00123..fbe69ee99db08 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/LookupAndRecordAddrs.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/LookupAndRecordAddrs.h
@@ -18,6 +18,7 @@
 
 #include "llvm/ADT/FunctionExtras.h"
 #include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/DylibManager.h"
 #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
 #include "llvm/Support/Compiler.h"
 
@@ -56,15 +57,6 @@ LLVM_ABI Error lookupAndRecordAddrs(
     std::vector<std::pair<SymbolStringPtr, ExecutorAddr *>> Pairs,
     SymbolLookupFlags LookupFlags = SymbolLookupFlags::RequiredSymbol);
 
-/// Record addresses of given symbols in the given ExecutorAddrs.
-///
-/// ExecutorProcessControl lookup version. Lookups are always implicitly
-/// weak.
-LLVM_ABI Error lookupAndRecordAddrs(
-    ExecutorProcessControl &EPC, tpctypes::DylibHandle H,
-    std::vector<std::pair<SymbolStringPtr, ExecutorAddr *>> Pairs,
-    SymbolLookupFlags LookupFlags = SymbolLookupFlags::RequiredSymbol);
-
 } // End namespace orc
 } // End namespace llvm
 

diff  --git 
a/llvm/include/llvm/ExecutionEngine/Orc/SelfExecutorProcessControl.h 
b/llvm/include/llvm/ExecutionEngine/Orc/SelfExecutorProcessControl.h
index 475ef562deb6c..7027a561410ce 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/SelfExecutorProcessControl.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/SelfExecutorProcessControl.h
@@ -50,6 +50,8 @@ class LLVM_ABI SelfExecutorProcessControl : public 
ExecutorProcessControl {
                         IncomingWFRHandler OnComplete,
                         ArrayRef<char> ArgBuffer) override;
 
+  Expected<std::unique_ptr<DylibManager>> createDefaultDylibMgr() override;
+
   Error disconnect() override;
 
 private:
@@ -74,7 +76,6 @@ class LLVM_ABI SelfExecutorProcessControl : public 
ExecutorProcessControl {
   std::unique_ptr<UnwindInfoManager> UnwindInfoMgr;
 #endif // __APPLE__
   InProcessMemoryAccess IPMA;
-  InProcessDylibManager IPDM;
 };
 
 } // namespace llvm::orc

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h 
b/llvm/include/llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h
index ab97fb5f19ee2..bfc96f3a72443 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h
@@ -15,7 +15,6 @@
 
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/FunctionExtras.h"
-#include "llvm/ExecutionEngine/Orc/EPCGenericDylibManager.h"
 #include "llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h"
 #include "llvm/ExecutionEngine/Orc/EPCGenericMemoryAccess.h"
 #include "llvm/ExecutionEngine/Orc/ExecutorProcessControl.h"
@@ -81,6 +80,8 @@ class LLVM_ABI SimpleRemoteEPC : public 
ExecutorProcessControl,
                         IncomingWFRHandler OnComplete,
                         ArrayRef<char> ArgBuffer) override;
 
+  Expected<std::unique_ptr<DylibManager>> createDefaultDylibMgr() override;
+
   Error disconnect() override;
 
   Expected<HandleMessageAction>
@@ -127,7 +128,6 @@ class LLVM_ABI SimpleRemoteEPC : public 
ExecutorProcessControl,
   std::unique_ptr<jitlink::JITLinkMemoryManager> OwnedMemMgr;
   std::unique_ptr<MemoryAccess> OwnedMemAccess;
 
-  std::unique_ptr<EPCGenericDylibManager> EPCDylibMgr;
   ExecutorAddr RunAsMainAddr;
   ExecutorAddr RunAsVoidFunctionAddr;
   ExecutorAddr RunAsIntFunctionAddr;

diff  --git a/llvm/lib/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.cpp 
b/llvm/lib/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.cpp
index 1e83c07f4bdb1..fbee8cc2a96b9 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.cpp
@@ -19,15 +19,14 @@ namespace orc {
 
 Expected<std::unique_ptr<EPCDynamicLibrarySearchGenerator>>
 EPCDynamicLibrarySearchGenerator::Load(
-    ExecutionSession &ES, const char *LibraryPath, SymbolPredicate Allow,
-    AddAbsoluteSymbolsFn AddAbsoluteSymbols) {
-  auto Handle =
-      ES.getExecutorProcessControl().getDylibMgr().loadDylib(LibraryPath);
+    ExecutionSession &ES, DylibManager &DylibMgr, const char *LibraryPath,
+    SymbolPredicate Allow, AddAbsoluteSymbolsFn AddAbsoluteSymbols) {
+  auto Handle = DylibMgr.loadDylib(LibraryPath);
   if (!Handle)
     return Handle.takeError();
 
   return std::make_unique<EPCDynamicLibrarySearchGenerator>(
-      ES, *Handle, std::move(Allow), std::move(AddAbsoluteSymbols));
+      ES, DylibMgr, *Handle, std::move(Allow), std::move(AddAbsoluteSymbols));
 }
 
 Error EPCDynamicLibrarySearchGenerator::tryToGenerate(
@@ -65,9 +64,8 @@ Error EPCDynamicLibrarySearchGenerator::tryToGenerate(
 
   DylibManager::LookupRequest Request(*H, LookupSymbols);
   // Copy-capture LookupSymbols, since LookupRequest keeps a reference.
-  EPC.getDylibMgr().lookupSymbolsAsync(Request, [this, &JD, LS = std::move(LS),
-                                                 LookupSymbols](
-                                                    auto Result) mutable {
+  DylibMgr.lookupSymbolsAsync(Request, [this, &JD, LS = std::move(LS),
+                                        LookupSymbols](auto Result) mutable {
     if (!Result) {
       LLVM_DEBUG({
         dbgs() << "EPCDynamicLibrarySearchGenerator lookup failed due to 
error";
@@ -102,7 +100,7 @@ Error EPCDynamicLibrarySearchGenerator::tryToGenerate(
 
     if (LLVM_UNLIKELY(!MissingSymbols.empty()))
       return LS.continueLookup(make_error<SymbolsNotFound>(
-          this->EPC.getSymbolStringPool(), std::move(MissingSymbols)));
+          this->ES.getSymbolStringPool(), std::move(MissingSymbols)));
 
     // Define resolved symbols.
     Error Err = addAbsolutes(JD, std::move(NewSymbols));

diff  --git a/llvm/lib/ExecutionEngine/Orc/ExecutorResolutionGenerator.cpp 
b/llvm/lib/ExecutionEngine/Orc/ExecutorResolutionGenerator.cpp
index e5b0bd3dbc5c3..b63698a553763 100644
--- a/llvm/lib/ExecutionEngine/Orc/ExecutorResolutionGenerator.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ExecutorResolutionGenerator.cpp
@@ -18,14 +18,15 @@ namespace llvm {
 namespace orc {
 
 Expected<std::unique_ptr<ExecutorResolutionGenerator>>
-ExecutorResolutionGenerator::Load(ExecutionSession &ES, const char 
*LibraryPath,
+ExecutorResolutionGenerator::Load(ExecutionSession &ES, DylibManager &DylibMgr,
+                                  const char *LibraryPath,
                                   SymbolPredicate Allow,
                                   AbsoluteSymbolsFn AbsoluteSymbols) {
-  auto H = ES.getExecutorProcessControl().getDylibMgr().loadDylib(LibraryPath);
+  auto H = DylibMgr.loadDylib(LibraryPath);
   if (H)
     return H.takeError();
   return std::make_unique<ExecutorResolutionGenerator>(
-      ES, *H, std::move(Allow), std::move(AbsoluteSymbols));
+      ES, DylibMgr, *H, std::move(Allow), std::move(AbsoluteSymbols));
 }
 
 Error ExecutorResolutionGenerator::tryToGenerate(
@@ -48,7 +49,7 @@ Error ExecutorResolutionGenerator::tryToGenerate(
   }
 
   DylibManager::LookupRequest LR(H, LookupSymbols);
-  EPC.getDylibMgr().lookupSymbolsAsync(
+  DylibMgr.lookupSymbolsAsync(
       LR, [this, LS = std::move(LS), JD = JITDylibSP(&JD),
            LookupSymbols](auto Result) mutable {
         if (Result) {
@@ -86,7 +87,7 @@ Error ExecutorResolutionGenerator::tryToGenerate(
 
         if (LLVM_UNLIKELY(!MissingSymbols.empty()))
           return LS.continueLookup(make_error<SymbolsNotFound>(
-              this->EPC.getSymbolStringPool(), std::move(MissingSymbols)));
+              this->ES.getSymbolStringPool(), std::move(MissingSymbols)));
 
         LS.continueLookup(JD->define(AbsoluteSymbols(std::move(NewSyms))));
       });

diff  --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp 
b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
index 7487526c5d059..2b9bae1591701 100644
--- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
@@ -843,7 +843,7 @@ Error LLJITBuilderState::prepareForConstruction() {
       auto &JD =
           J.getExecutionSession().createBareJITDylib("<Process Symbols>");
       auto G = EPCDynamicLibrarySearchGenerator::GetForTargetProcess(
-          J.getExecutionSession());
+          J.getExecutionSession(), J.getDylibMgr());
       if (!G)
         return G.takeError();
       JD.addGenerator(std::move(*G));
@@ -873,7 +873,7 @@ Expected<JITDylib &> LLJIT::createJITDylib(std::string 
Name) {
 }
 
 Expected<JITDylib &> LLJIT::loadPlatformDynamicLibrary(const char *Path) {
-  auto G = EPCDynamicLibrarySearchGenerator::Load(*ES, Path);
+  auto G = EPCDynamicLibrarySearchGenerator::Load(*ES, *DylibMgr, Path);
   if (!G)
     return G.takeError();
 
@@ -1012,6 +1012,13 @@ LLJIT::LLJIT(LLJITBuilderState &S, Error &Err)
     }
   }
 
+  if (auto DM = ES->getExecutorProcessControl().createDefaultDylibMgr())
+    DylibMgr = std::move(*DM);
+  else {
+    Err = DM.takeError();
+    return;
+  }
+
   auto ObjLayer = createObjectLinkingLayer(S, *ES);
   if (!ObjLayer) {
     Err = ObjLayer.takeError();

diff  --git a/llvm/lib/ExecutionEngine/Orc/LookupAndRecordAddrs.cpp 
b/llvm/lib/ExecutionEngine/Orc/LookupAndRecordAddrs.cpp
index 42d630d690864..480196817e76d 100644
--- a/llvm/lib/ExecutionEngine/Orc/LookupAndRecordAddrs.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/LookupAndRecordAddrs.cpp
@@ -51,33 +51,5 @@ Error lookupAndRecordAddrs(
   return ResultF.get();
 }
 
-Error lookupAndRecordAddrs(
-    ExecutorProcessControl &EPC, tpctypes::DylibHandle H,
-    std::vector<std::pair<SymbolStringPtr, ExecutorAddr *>> Pairs,
-    SymbolLookupFlags LookupFlags) {
-
-  SymbolLookupSet Symbols;
-  for (auto &KV : Pairs)
-    Symbols.add(KV.first, LookupFlags);
-
-  DylibManager::LookupRequest LR(H, Symbols);
-  auto Result = EPC.getDylibMgr().lookupSymbols(LR);
-  if (!Result)
-    return Result.takeError();
-
-  if (Result->size() != 1)
-    return make_error<StringError>("Error in lookup result",
-                                   inconvertibleErrorCode());
-  if (Result->front().size() != Pairs.size())
-    return make_error<StringError>("Error in lookup result elements",
-                                   inconvertibleErrorCode());
-
-  for (unsigned I = 0; I != Pairs.size(); ++I) {
-    if (Result->front()[I])
-      *Pairs[I].second = Result->front()[I]->getAddress();
-  }
-  return Error::success();
-}
-
 } // End namespace orc.
 } // End namespace llvm.

diff  --git a/llvm/lib/ExecutionEngine/Orc/SelfExecutorProcessControl.cpp 
b/llvm/lib/ExecutionEngine/Orc/SelfExecutorProcessControl.cpp
index a0488fdab93d0..3c07f64a92cbe 100644
--- a/llvm/lib/ExecutionEngine/Orc/SelfExecutorProcessControl.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/SelfExecutorProcessControl.cpp
@@ -24,8 +24,7 @@ SelfExecutorProcessControl::SelfExecutorProcessControl(
     Triple TargetTriple, unsigned PageSize,
     std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr)
     : ExecutorProcessControl(std::move(SSP), std::move(D)),
-      IPMA(TargetTriple.isArch64Bit()),
-      IPDM(TargetTriple.isOSBinFormatMachO() ? '_' : '\0') {
+      IPMA(TargetTriple.isArch64Bit()) {
 
   OwnedMemMgr = std::move(MemMgr);
   if (!OwnedMemMgr)
@@ -36,7 +35,6 @@ SelfExecutorProcessControl::SelfExecutorProcessControl(
   this->PageSize = PageSize;
   this->MemMgr = OwnedMemMgr.get();
   this->MemAccess = &IPMA;
-  this->DylibMgr = &IPDM;
   this->JDI = {ExecutorAddr::fromPtr(jitDispatchViaWrapperFunctionManager),
                ExecutorAddr::fromPtr(this)};
 
@@ -107,6 +105,12 @@ Error SelfExecutorProcessControl::disconnect() {
   return Error::success();
 }
 
+Expected<std::unique_ptr<DylibManager>>
+SelfExecutorProcessControl::createDefaultDylibMgr() {
+  char Prefix = TargetTriple.isOSBinFormatMachO() ? '_' : '\0';
+  return std::make_unique<InProcessDylibManager>(Prefix);
+}
+
 shared::CWrapperFunctionBuffer
 SelfExecutorProcessControl::jitDispatchViaWrapperFunctionManager(
     void *Ctx, const void *FnTag, const char *Data, size_t Size) {

diff  --git a/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp 
b/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp
index 18132523a33f0..676d6f6e3fae0 100644
--- a/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp
@@ -7,6 +7,7 @@
 
//===----------------------------------------------------------------------===//
 
 #include "llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h"
+#include "llvm/ExecutionEngine/Orc/EPCGenericDylibManager.h"
 #include "llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h"
 #include "llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h"
 #include "llvm/Support/FormatVariadic.h"
@@ -85,6 +86,14 @@ void SimpleRemoteEPC::callWrapperAsync(ExecutorAddr 
WrapperFnAddr,
   }
 }
 
+Expected<std::unique_ptr<DylibManager>>
+SimpleRemoteEPC::createDefaultDylibMgr() {
+  auto DM = EPCGenericDylibManager::CreateWithDefaultBootstrapSymbols(*this);
+  if (!DM)
+    return DM.takeError();
+  return std::make_unique<EPCGenericDylibManager>(std::move(*DM));
+}
+
 Error SimpleRemoteEPC::disconnect() {
   T->disconnect();
   D->shutdown();
@@ -332,14 +341,6 @@ Error SimpleRemoteEPC::setup(Setup S) {
            {RunAsIntFunctionAddr, rt::RunAsIntFunctionWrapperName}}))
     return Err;
 
-  if (auto DM =
-          EPCGenericDylibManager::CreateWithDefaultBootstrapSymbols(*this))
-    EPCDylibMgr = std::make_unique<EPCGenericDylibManager>(std::move(*DM));
-  else
-    return DM.takeError();
-
-  this->DylibMgr = EPCDylibMgr.get();
-
   // Set a default CreateMemoryManager if none is specified.
   if (!S.CreateMemoryManager)
     S.CreateMemoryManager = createDefaultMemoryManager;

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp 
b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
index 33792bacd2c17..b6903fcef1011 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
@@ -891,7 +891,7 @@ static Error loadProcessSymbols(Session &S) {
       };
   S.ProcessSymsJD->addGenerator(
       ExitOnErr(orc::EPCDynamicLibrarySearchGenerator::GetForTargetProcess(
-          S.ES, std::move(FilterMainEntryPoint))));
+          S.ES, *S.DylibMgr, std::move(FilterMainEntryPoint))));
 
   return Error::success();
 }
@@ -1222,6 +1222,13 @@ Session::Session(std::unique_ptr<ExecutorProcessControl> 
EPC, Error &Err)
 
   ErrorAsOutParameter _(&Err);
 
+  if (auto DM = ES.getExecutorProcessControl().createDefaultDylibMgr())
+    DylibMgr = std::move(*DM);
+  else {
+    Err = DM.takeError();
+    return;
+  }
+
   ES.setErrorReporter(reportLLVMJITLinkError);
 
   // Attach WaitingOnGraph recorder if requested.
@@ -1483,7 +1490,8 @@ Expected<JITDylib *> 
Session::getOrLoadDynamicLibrary(StringRef LibPath) {
   if (It != DynLibJDs.end()) {
     return It->second;
   }
-  auto G = EPCDynamicLibrarySearchGenerator::Load(ES, LibPath.data());
+  auto G =
+      EPCDynamicLibrarySearchGenerator::Load(ES, *DylibMgr, LibPath.data());
   if (!G)
     return G.takeError();
   auto JD = &ES.createBareJITDylib(LibPath.str());
@@ -2245,7 +2253,8 @@ LoadLibraryWeak(Session &S, StringRef Path) {
     return Symbols.takeError();
 
   return std::make_unique<EPCDynamicLibrarySearchGenerator>(
-      S.ES, [Symbols = std::move(*Symbols)](const SymbolStringPtr &Sym) {
+      S.ES, *S.DylibMgr,
+      [Symbols = std::move(*Symbols)](const SymbolStringPtr &Sym) {
         return Symbols.count(Sym);
       });
 }
@@ -2778,12 +2787,12 @@ static Error runChecks(Session &S, Triple TT, 
SubtargetFeatures Features) {
   LLVM_DEBUG(dbgs() << "Running checks...\n");
 
   auto IsSymbolValid = [&S](StringRef Symbol) {
-    auto InternedSymbol = S.ES.getSymbolStringPool()->intern(Symbol);
+    auto InternedSymbol = S.ES.intern(Symbol);
     return S.isSymbolRegistered(InternedSymbol);
   };
 
   auto GetSymbolInfo = [&S](StringRef Symbol) {
-    auto InternedSymbol = S.ES.getSymbolStringPool()->intern(Symbol);
+    auto InternedSymbol = S.ES.intern(Symbol);
     return S.findSymbolInfo(InternedSymbol, "Can not get symbol info");
   };
 

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink.h 
b/llvm/tools/llvm-jitlink/llvm-jitlink.h
index c88725c8e70a3..fc309b2ae5170 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.h
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.h
@@ -16,6 +16,7 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/ExecutionEngine/Orc/COFF.h"
 #include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/DylibManager.h"
 #include "llvm/ExecutionEngine/Orc/ExecutorProcessControl.h"
 #include "llvm/ExecutionEngine/Orc/LazyObjectLinkingLayer.h"
 #include "llvm/ExecutionEngine/Orc/LazyReexports.h"
@@ -74,6 +75,7 @@ struct Session {
   };
 
   orc::ExecutionSession ES;
+  std::unique_ptr<orc::DylibManager> DylibMgr;
   orc::JITDylib *MainJD = nullptr;
   orc::JITDylib *ProcessSymsJD = nullptr;
   orc::JITDylib *PlatformJD = nullptr;

diff  --git a/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp 
b/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
index 5deebec967be1..88aabb54bf285 100644
--- a/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
@@ -291,9 +291,7 @@ TEST(ObjectLinkingLayerSearchGeneratorTest, 
AbsoluteSymbolsObjectLayer) {
   public:
     TestEPC()
         : UnsupportedExecutorProcessControl(nullptr, nullptr,
-                                            "x86_64-apple-darwin") {
-      this->DylibMgr = this;
-    }
+                                            "x86_64-apple-darwin") {}
 
     Expected<tpctypes::DylibHandle> loadDylib(const char *DylibPath) override {
       return ExecutorAddr::fromPtr((void *)nullptr);
@@ -317,15 +315,21 @@ TEST(ObjectLinkingLayerSearchGeneratorTest, 
AbsoluteSymbolsObjectLayer) {
       }
       Complete(std::vector<tpctypes::LookupResult>{1, Result});
     }
+
+    Expected<std::unique_ptr<DylibManager>> createDefaultDylibMgr() override {
+      llvm_unreachable("Unsupported");
+    }
   };
 
-  ExecutionSession ES{std::make_unique<TestEPC>()};
+  auto TestEPCPtr = std::make_unique<TestEPC>();
+  auto &TestDylibMgr = static_cast<DylibManager &>(*TestEPCPtr);
+  ExecutionSession ES{std::move(TestEPCPtr)};
   JITDylib &JD = ES.createBareJITDylib("main");
   ObjectLinkingLayer ObjLinkingLayer{
       ES, std::make_unique<InProcessMemoryManager>(4096)};
 
   auto G = EPCDynamicLibrarySearchGenerator::GetForTargetProcess(
-      ES, {}, [&](JITDylib &JD, SymbolMap Syms) {
+      ES, TestDylibMgr, {}, [&](JITDylib &JD, SymbolMap Syms) {
         auto G =
             absoluteSymbolsLinkGraph(Triple("x86_64-apple-darwin"),
                                      ES.getSymbolStringPool(), 
std::move(Syms));

diff  --git a/llvm/unittests/ExecutionEngine/Orc/OrcTestCommon.h 
b/llvm/unittests/ExecutionEngine/Orc/OrcTestCommon.h
index e22c35f1332f7..4e9b90f0b0db3 100644
--- a/llvm/unittests/ExecutionEngine/Orc/OrcTestCommon.h
+++ b/llvm/unittests/ExecutionEngine/Orc/OrcTestCommon.h
@@ -121,6 +121,10 @@ class UnsupportedExecutorProcessControl : public 
ExecutorProcessControl,
     llvm_unreachable("Unsupported");
   }
 
+  Expected<std::unique_ptr<DylibManager>> createDefaultDylibMgr() override {
+    llvm_unreachable("Unsupported");
+  }
+
   Error disconnect() override { return Error::success(); }
 };
 


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to