diff options
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Legacy.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/NullResolver.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/OrcCBindingsStack.h | 17 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h | 19 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp | 26 |
5 files changed, 35 insertions, 45 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Legacy.cpp b/llvm/lib/ExecutionEngine/Orc/Legacy.cpp index 18be9a042f7..517176e5f42 100644 --- a/llvm/lib/ExecutionEngine/Orc/Legacy.cpp +++ b/llvm/lib/ExecutionEngine/Orc/Legacy.cpp @@ -48,17 +48,17 @@ JITSymbolResolverAdapter::lookup(const LookupSet &Symbols) { return Result; } -Expected<JITSymbolResolverAdapter::LookupFlagsResult> -JITSymbolResolverAdapter::lookupFlags(const LookupSet &Symbols) { +Expected<JITSymbolResolverAdapter::LookupSet> +JITSymbolResolverAdapter::getResponsibilitySet(const LookupSet &Symbols) { SymbolNameSet InternedSymbols; for (auto &S : Symbols) InternedSymbols.insert(ES.getSymbolStringPool().intern(S)); - SymbolFlagsMap SymbolFlags = R.lookupFlags(InternedSymbols); - LookupFlagsResult Result; - for (auto &KV : SymbolFlags) { - ResolvedStrings.insert(KV.first); - Result[*KV.first] = KV.second; + auto InternedResult = R.getResponsibilitySet(InternedSymbols); + LookupSet Result; + for (auto &S : InternedResult) { + ResolvedStrings.insert(S); + Result.insert(*S); } return Result; diff --git a/llvm/lib/ExecutionEngine/Orc/NullResolver.cpp b/llvm/lib/ExecutionEngine/Orc/NullResolver.cpp index 3796e3d37bc..922fc6f021c 100644 --- a/llvm/lib/ExecutionEngine/Orc/NullResolver.cpp +++ b/llvm/lib/ExecutionEngine/Orc/NullResolver.cpp @@ -14,8 +14,8 @@ namespace llvm { namespace orc { -SymbolFlagsMap NullResolver::lookupFlags(const SymbolNameSet &Symbols) { - return SymbolFlagsMap(); +SymbolNameSet NullResolver::getResponsibilitySet(const SymbolNameSet &Symbols) { + return Symbols; } SymbolNameSet diff --git a/llvm/lib/ExecutionEngine/Orc/OrcCBindingsStack.h b/llvm/lib/ExecutionEngine/Orc/OrcCBindingsStack.h index b9f8a370d2f..a67215f659a 100644 --- a/llvm/lib/ExecutionEngine/Orc/OrcCBindingsStack.h +++ b/llvm/lib/ExecutionEngine/Orc/OrcCBindingsStack.h @@ -129,20 +129,21 @@ private: : Stack(Stack), ExternalResolver(std::move(ExternalResolver)), ExternalResolverCtx(std::move(ExternalResolverCtx)) {} - orc::SymbolFlagsMap - lookupFlags(const orc::SymbolNameSet &Symbols) override { - orc::SymbolFlagsMap SymbolFlags; + orc::SymbolNameSet + getResponsibilitySet(const orc::SymbolNameSet &Symbols) override { + orc::SymbolNameSet Result; for (auto &S : Symbols) { - if (auto Sym = findSymbol(*S)) - SymbolFlags[S] = Sym.getFlags(); - else if (auto Err = Sym.takeError()) { + if (auto Sym = findSymbol(*S)) { + if (!Sym.getFlags().isStrong()) + Result.insert(S); + } else if (auto Err = Sym.takeError()) { Stack.reportError(std::move(Err)); - return orc::SymbolFlagsMap(); + return orc::SymbolNameSet(); } } - return SymbolFlags; + return Result; } orc::SymbolNameSet diff --git a/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h b/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h index abe89ce70af..6515c0da360 100644 --- a/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h +++ b/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h @@ -144,26 +144,29 @@ class OrcMCJITReplacement : public ExecutionEngine { public: LinkingORCResolver(OrcMCJITReplacement &M) : M(M) {} - SymbolFlagsMap lookupFlags(const SymbolNameSet &Symbols) override { - SymbolFlagsMap SymbolFlags; + SymbolNameSet getResponsibilitySet(const SymbolNameSet &Symbols) override { + SymbolNameSet Result; for (auto &S : Symbols) { if (auto Sym = M.findMangledSymbol(*S)) { - SymbolFlags[S] = Sym.getFlags(); + if (!Sym.getFlags().isStrong()) + Result.insert(S); } else if (auto Err = Sym.takeError()) { M.reportError(std::move(Err)); - return SymbolFlagsMap(); + return SymbolNameSet(); } else { if (auto Sym2 = M.ClientResolver->findSymbolInLogicalDylib(*S)) { - SymbolFlags[S] = Sym2.getFlags(); + if (!Sym2.getFlags().isStrong()) + Result.insert(S); } else if (auto Err = Sym2.takeError()) { M.reportError(std::move(Err)); - return SymbolFlagsMap(); - } + return SymbolNameSet(); + } else + Result.insert(S); } } - return SymbolFlags; + return Result; } SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query, diff --git a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp index 1dfa90acb76..f82f5ecfed5 100644 --- a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp @@ -44,27 +44,13 @@ public: return Result; } - Expected<LookupFlagsResult> lookupFlags(const LookupSet &Symbols) { - auto &ES = MR.getTargetJITDylib().getExecutionSession(); - - SymbolNameSet InternedSymbols; - - for (auto &S : Symbols) - InternedSymbols.insert(ES.getSymbolStringPool().intern(S)); - - SymbolFlagsMap InternedResult; - MR.getTargetJITDylib().withSearchOrderDo([&](const JITDylibList &JDs) { - // An empty search order is pathalogical, but allowed. - if (JDs.empty()) - return; - - assert(JDs.front() && "VSOList entry can not be null"); - InternedResult = JDs.front()->lookupFlags(InternedSymbols); - }); + Expected<LookupSet> getResponsibilitySet(const LookupSet &Symbols) { + LookupSet Result; - LookupFlagsResult Result; - for (auto &KV : InternedResult) - Result[*KV.first] = std::move(KV.second); + for (auto &KV : MR.getSymbols()) { + if (Symbols.count(*KV.first)) + Result.insert(*KV.first); + } return Result; } |