[llvm] 9000ee2 - [ORC] Update SelfExecutorProcessControl to allow user-supplied handles.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 25 08:50:33 PDT 2022


Author: Lang Hames
Date: 2022-10-25T08:50:27-07:00
New Revision: 9000ee2224708853517354818fa58dd0a9a0c0bb

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

LOG: [ORC] Update SelfExecutorProcessControl to allow user-supplied handles.

SelfExecutorProcessControl no longer requires that handles passed to
lookupSymbols be ones that were previously returned from loadDylib. This brings
SelfExecutorPRocessControl into alignment with SimpleRemoteEPC, which was
updated in 6613f4aff85.

Added: 
    

Modified: 
    llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
    llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
index 20f5c9812dea6..f858788af2abb 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h
@@ -483,7 +483,6 @@ class SelfExecutorProcessControl
 
   std::unique_ptr<jitlink::JITLinkMemoryManager> OwnedMemMgr;
   char GlobalManglingPrefix = 0;
-  std::vector<std::unique_ptr<sys::DynamicLibrary>> DynamicLibraries;
 };
 
 } // end namespace orc

diff  --git a/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp b/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
index b48d60b77809d..361fcd4a2e9ca 100644
--- a/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
@@ -75,12 +75,10 @@ SelfExecutorProcessControl::Create(
 Expected<tpctypes::DylibHandle>
 SelfExecutorProcessControl::loadDylib(const char *DylibPath) {
   std::string ErrMsg;
-  auto Dylib = std::make_unique<sys::DynamicLibrary>(
-      sys::DynamicLibrary::getPermanentLibrary(DylibPath, &ErrMsg));
-  if (!Dylib->isValid())
+  auto Dylib = sys::DynamicLibrary::getPermanentLibrary(DylibPath, &ErrMsg);
+  if (!Dylib.isValid())
     return make_error<StringError>(std::move(ErrMsg), inconvertibleErrorCode());
-  DynamicLibraries.push_back(std::move(Dylib));
-  return ExecutorAddr::fromPtr(DynamicLibraries.back().get());
+  return ExecutorAddr::fromPtr(Dylib.getOSSpecificHandle());
 }
 
 Expected<std::vector<tpctypes::LookupResult>>
@@ -88,19 +86,13 @@ SelfExecutorProcessControl::lookupSymbols(ArrayRef<LookupRequest> Request) {
   std::vector<tpctypes::LookupResult> R;
 
   for (auto &Elem : Request) {
-    auto *Dylib = Elem.Handle.toPtr<sys::DynamicLibrary *>();
-    assert(llvm::any_of(DynamicLibraries,
-                        [=](const std::unique_ptr<sys::DynamicLibrary> &DL) {
-                          return DL.get() == Dylib;
-                        }) &&
-           "Invalid handle");
-
+    sys::DynamicLibrary Dylib(Elem.Handle.toPtr<void *>());
     R.push_back(std::vector<ExecutorAddr>());
     for (auto &KV : Elem.Symbols) {
       auto &Sym = KV.first;
       std::string Tmp((*Sym).data() + !!GlobalManglingPrefix,
                       (*Sym).size() - !!GlobalManglingPrefix);
-      void *Addr = Dylib->getAddressOfSymbol(Tmp.c_str());
+      void *Addr = Dylib.getAddressOfSymbol(Tmp.c_str());
       if (!Addr && KV.second == SymbolLookupFlags::RequiredSymbol) {
         // FIXME: Collect all failing symbols before erroring out.
         SymbolNameVector MissingSymbols;


        


More information about the llvm-commits mailing list