summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-08-02 20:13:58 +0000
committerLang Hames <lhames@gmail.com>2018-08-02 20:13:58 +0000
commitbe1066de56118a93f11ea53ea1ac6eb95b8a90f7 (patch)
treefa652d46b44cb3b8d0496ea194012ccf6b6a2ad3 /llvm/lib/ExecutionEngine/Orc
parent8899c29b1e0835f06972b03adab2e8fd91339c8d (diff)
downloadbcm5719-llvm-be1066de56118a93f11ea53ea1ac6eb95b8a90f7.tar.gz
bcm5719-llvm-be1066de56118a93f11ea53ea1ac6eb95b8a90f7.zip
[ORC] Add a re-exports fallback definition generator.
An instance of ReexportsFallbackDefinitionGenerator can be attached to a VSO (via setFallbackDefinitionGenerator) to re-export symbols on demandy from a backing VSO. llvm-svn: 338764
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc')
-rw-r--r--llvm/lib/ExecutionEngine/Orc/Core.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/Core.cpp b/llvm/lib/ExecutionEngine/Orc/Core.cpp
index 4325d57f73d..3e5ba0399db 100644
--- a/llvm/lib/ExecutionEngine/Orc/Core.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Core.cpp
@@ -886,6 +886,30 @@ buildSimpleReexportsAliasMap(VSO &SourceV, const SymbolNameSet &Symbols) {
return Result;
}
+ReexportsFallbackDefinitionGenerator::ReexportsFallbackDefinitionGenerator(
+ VSO &BackingVSO, SymbolPredicate Allow)
+ : BackingVSO(BackingVSO), Allow(std::move(Allow)) {}
+
+SymbolNameSet ReexportsFallbackDefinitionGenerator::
+operator()(VSO &V, const SymbolNameSet &Names) {
+ orc::SymbolNameSet Added;
+ orc::SymbolAliasMap AliasMap;
+
+ auto Flags = BackingVSO.lookupFlags(Names);
+
+ for (auto &KV : Flags) {
+ if (!Allow(KV.first))
+ continue;
+ AliasMap[KV.first] = SymbolAliasMapEntry(KV.first, KV.second);
+ Added.insert(KV.first);
+ }
+
+ if (!Added.empty())
+ cantFail(V.define(reexports(BackingVSO, AliasMap)));
+
+ return Added;
+}
+
Error VSO::defineMaterializing(const SymbolFlagsMap &SymbolFlags) {
return ES.runSessionLocked([&]() -> Error {
std::vector<SymbolMap::iterator> AddedSyms;
OpenPOWER on IntegriCloud