[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