diff options
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp index 7cdc6b352d1..6edf616660e 100644 --- a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp @@ -16,30 +16,23 @@ using namespace llvm::orc; class VSOSearchOrderResolver : public JITSymbolResolver { public: - VSOSearchOrderResolver(ExecutionSession &ES, - MaterializationResponsibility &MR) - : ES(ES), MR(MR) {} + VSOSearchOrderResolver(MaterializationResponsibility &MR) : MR(MR) {} Expected<LookupResult> lookup(const LookupSet &Symbols) { + auto &ES = MR.getTargetVSO().getExecutionSession(); SymbolNameSet InternedSymbols; for (auto &S : Symbols) InternedSymbols.insert(ES.getSymbolStringPool().intern(S)); - auto AsyncLookup = [&](std::shared_ptr<AsynchronousSymbolQuery> Q, - SymbolNameSet Names) { - SymbolNameSet Unresolved = std::move(Names); - MR.getTargetVSO().withSearchOrderDo([&](const VSOList &SearchOrder) { - for (auto *V : SearchOrder) { - assert(V && "VSOList entry can not be null"); - Unresolved = V->lookup(Q, std::move(Unresolved)); - } - }); - return Unresolved; + auto RegisterDependencies = [&](const SymbolDependenceMap &Deps) { + MR.addDependencies(Deps); }; - auto InternedResult = blockingLookup( - ES, std::move(AsyncLookup), std::move(InternedSymbols), false, &MR); + auto InternedResult = + MR.getTargetVSO().withSearchOrderDo([&](const VSOList &VSOs) { + return ES.lookup(VSOs, InternedSymbols, RegisterDependencies, false); + }); if (!InternedResult) return InternedResult.takeError(); @@ -52,6 +45,8 @@ public: } Expected<LookupFlagsResult> lookupFlags(const LookupSet &Symbols) { + auto &ES = MR.getTargetVSO().getExecutionSession(); + SymbolNameSet InternedSymbols; for (auto &S : Symbols) @@ -75,7 +70,6 @@ public: } private: - ExecutionSession &ES; MaterializationResponsibility &MR; }; @@ -106,7 +100,7 @@ void RTDyldObjectLinkingLayer2::emit(MaterializationResponsibility R, auto MemoryManager = GetMemoryManager(K); - VSOSearchOrderResolver Resolver(ES, R); + VSOSearchOrderResolver Resolver(R); auto RTDyld = llvm::make_unique<RuntimeDyld>(*MemoryManager, Resolver); RTDyld->setProcessAllSections(ProcessAllSections); |