Re-apply r337595 with fix for LLVM_ENABLE_THREADS=Off.

llvm-svn: 337626
diff --git a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
index 7cdc6b3..6edf616 100644
--- a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
@@ -16,30 +16,23 @@
 
 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 @@
   }
 
   Expected<LookupFlagsResult> lookupFlags(const LookupSet &Symbols) {
+    auto &ES = MR.getTargetVSO().getExecutionSession();
+
     SymbolNameSet InternedSymbols;
 
     for (auto &S : Symbols)
@@ -75,7 +70,6 @@
   }
 
 private:
-  ExecutionSession &ES;
   MaterializationResponsibility &MR;
 };
 
@@ -106,7 +100,7 @@
 
   auto MemoryManager = GetMemoryManager(K);
 
-  VSOSearchOrderResolver Resolver(ES, R);
+  VSOSearchOrderResolver Resolver(R);
   auto RTDyld = llvm::make_unique<RuntimeDyld>(*MemoryManager, Resolver);
   RTDyld->setProcessAllSections(ProcessAllSections);