diff options
| author | Lang Hames <lhames@gmail.com> | 2018-08-02 20:13:58 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2018-08-02 20:13:58 +0000 |
| commit | be1066de56118a93f11ea53ea1ac6eb95b8a90f7 (patch) | |
| tree | fa652d46b44cb3b8d0496ea194012ccf6b6a2ad3 /llvm/lib/ExecutionEngine/Orc | |
| parent | 8899c29b1e0835f06972b03adab2e8fd91339c8d (diff) | |
| download | bcm5719-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.cpp | 24 |
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; |

