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>>
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;