summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-01-21 03:20:39 +0000
committerLang Hames <lhames@gmail.com>2018-01-21 03:20:39 +0000
commit5ff5a30beecc65cb72b50047990dd684977f3001 (patch)
treed0ae3bc8734aec12449f1a9a79ce048ee0e6e691 /llvm/lib/ExecutionEngine/Orc
parent86edf536646b79a8892d994b87b7ce482b9e7248 (diff)
downloadbcm5719-llvm-5ff5a30beecc65cb72b50047990dd684977f3001.tar.gz
bcm5719-llvm-5ff5a30beecc65cb72b50047990dd684977f3001.zip
[ORC] Add a lookupFlags method to VSO.
lookupFlags returns a SymbolFlagsMap for the requested symbols, along with a set containing the SymbolStringPtr for any symbol not found in the VSO. The JITSymbolFlags for each symbol will have been stripped of its transient JIT-state flags (i.e. NotMaterialized, Materializing). Calling lookupFlags does not trigger symbol materialization. llvm-svn: 323060
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Core.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp
index c99c8ec120f..232c880b9dd 100644
--- a/llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -287,6 +287,26 @@ void VSO::finalize(SymbolNameSet SymbolsToFinalize) {
}
}
+VSO::LookupFlagsResult VSO::lookupFlags(SymbolNameSet Names) {
+ SymbolFlagsMap FlagsFound;
+
+ for (SymbolNameSet::iterator I = Names.begin(), E = Names.end(); I != E;) {
+ auto Tmp = I++;
+ auto SymI = Symbols.find(*Tmp);
+
+ // If the symbol isn't in this dylib then just continue.
+ if (SymI == Symbols.end())
+ continue;
+
+ Names.erase(Tmp);
+
+ FlagsFound[SymI->first] =
+ JITSymbolFlags::stripTransientFlags(SymI->second.getFlags());
+ }
+
+ return {std::move(FlagsFound), std::move(Names)};
+}
+
VSO::LookupResult VSO::lookup(AsynchronousSymbolQuery &Query,
SymbolNameSet Names) {
SourceWorkMap MaterializationWork;
OpenPOWER on IntegriCloud