Index: llvm/include/llvm/ExecutionEngine/Orc/Core.h =================================================================== --- llvm/include/llvm/ExecutionEngine/Orc/Core.h +++ llvm/include/llvm/ExecutionEngine/Orc/Core.h @@ -726,6 +726,9 @@ /// the ExecutionSession. JITDylib &getMainJITDylib(); + /// Return a pointer to the "name" JITDylib. + /// Ownership of JITDylib remains within Execution Session + JITDylib *getJITDylibByName(std::string Name); /// Add a new JITDylib to this ExecutionSession. JITDylib &createJITDylib(std::string Name, bool AddToMainDylibSearchOrder = true); Index: llvm/lib/ExecutionEngine/Orc/Core.cpp =================================================================== --- llvm/lib/ExecutionEngine/Orc/Core.cpp +++ llvm/lib/ExecutionEngine/Orc/Core.cpp @@ -1610,8 +1610,19 @@ return runSessionLocked([this]() -> JITDylib & { return *JDs.front(); }); } +JITDylib *ExecutionSession::getJITDylibByName(std::string Name) { + return runSessionLocked([&, this]() -> JITDylib * { + for (auto &JD : JDs) { + if (JD->getName() == Name) + return JD.get(); + } + return nullptr; + }); +} + JITDylib &ExecutionSession::createJITDylib(std::string Name, bool AddToMainDylibSearchOrder) { + assert(!getJITDylibByName(Name) && "JITDylib with that name already exists"); return runSessionLocked([&, this]() -> JITDylib & { JDs.push_back( std::unique_ptr(new JITDylib(*this, std::move(Name))));