summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp28
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);
OpenPOWER on IntegriCloud