From 635fd9092b059b1fb7327f83963c5009d3edef0e Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Mon, 22 Jan 2018 03:00:31 +0000 Subject: [ORC] Add orc::SymbolResolver, a Orc/Legacy API interop header, and an orc::SymbolResolver to JITSymbolResolver adapter. The new orc::SymbolResolver interface uses asynchronous queries for better performance. (Asynchronous queries with bulk lookup minimize RPC/IPC overhead, support parallel incoming queries, and expose more available work for distribution). Existing ORC layers will soon be updated to use the orc::SymbolResolver API rather than the legacy llvm::JITSymbolResolver API. Because RuntimeDyld still uses JITSymbolResolver, this patch also includes an adapter that wraps an orc::SymbolResolver with a JITSymbolResolver API. llvm-svn: 323073 --- llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp | 4 ++-- llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp | 6 +++--- llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld') diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp index 670c6d2fa3f..2b3c00fd7d7 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp @@ -52,7 +52,7 @@ ARMJITSymbolFlags llvm::ARMJITSymbolFlags::fromObjectSymbol( /// findSymbolInLogicalDylib and if that fails calling /// findSymbol. Expected -LegacyJITSymbolResolver::lookup(const SymbolNameSet &Symbols) { +LegacyJITSymbolResolver::lookup(const LookupSet &Symbols) { JITSymbolResolver::LookupResult Result; for (auto &Symbol : Symbols) { std::string SymName = Symbol.str(); @@ -84,7 +84,7 @@ LegacyJITSymbolResolver::lookup(const SymbolNameSet &Symbols) { /// @brief Performs flags lookup by calling findSymbolInLogicalDylib and /// returning the flags value for that symbol. Expected -LegacyJITSymbolResolver::lookupFlags(const SymbolNameSet &Symbols) { +LegacyJITSymbolResolver::lookupFlags(const LookupSet &Symbols) { JITSymbolResolver::LookupFlagsResult Result; for (auto &Symbol : Symbols) { diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index 9741a48439d..5c4b8c12f34 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -211,7 +211,7 @@ RuntimeDyldImpl::loadObjectImpl(const object::ObjectFile &Obj) { // definitions occur elsewhere. JITSymbolResolver::LookupFlagsResult SymbolFlags; { - JITSymbolResolver::SymbolNameSet Symbols; + JITSymbolResolver::LookupSet Symbols; for (auto &Sym : Obj.symbols()) { uint32_t Flags = Sym.getFlags(); if ((Flags & SymbolRef::SF_Common) || (Flags & SymbolRef::SF_Weak)) { @@ -1000,10 +1000,10 @@ Error RuntimeDyldImpl::resolveExternalSymbols() { // Resolution can trigger emission of more symbols, so iterate until // we've resolved *everything*. { - JITSymbolResolver::SymbolNameSet ResolvedSymbols; + JITSymbolResolver::LookupSet ResolvedSymbols; while (true) { - JITSymbolResolver::SymbolNameSet NewSymbols; + JITSymbolResolver::LookupSet NewSymbols; for (auto &RelocKV : ExternalSymbolRelocations) { StringRef Name = RelocKV.first(); diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp index 0f4534f2c9f..3d944bf7b60 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp @@ -731,7 +731,7 @@ bool RuntimeDyldCheckerImpl::checkAllRulesInBuffer(StringRef RulePrefix, bool RuntimeDyldCheckerImpl::isSymbolValid(StringRef Symbol) const { if (getRTDyld().getSymbol(Symbol)) return true; - JITSymbolResolver::SymbolNameSet Symbols({Symbol}); + JITSymbolResolver::LookupSet Symbols({Symbol}); auto Result = getRTDyld().Resolver.lookup(Symbols); if (!Result) { logAllUnhandledErrors(Result.takeError(), errs(), "RTDyldChecker: "); @@ -750,7 +750,7 @@ uint64_t RuntimeDyldCheckerImpl::getSymbolRemoteAddr(StringRef Symbol) const { if (auto InternalSymbol = getRTDyld().getSymbol(Symbol)) return InternalSymbol.getAddress(); - JITSymbolResolver::SymbolNameSet Symbols({Symbol}); + JITSymbolResolver::LookupSet Symbols({Symbol}); auto Result = getRTDyld().Resolver.lookup(Symbols); if (!Result) { logAllUnhandledErrors(Result.takeError(), errs(), "RTDyldChecker: "); -- cgit v1.2.3