diff options
| author | Lang Hames <lhames@gmail.com> | 2016-05-25 22:27:25 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2016-05-25 22:27:25 +0000 |
| commit | e0fc5aef18948ae7193166cdfc8f069cd828399d (patch) | |
| tree | 2bc9ecee097aa5fbd5eed8fff06b1def0179fb51 /llvm/examples | |
| parent | 82069c44ca39df9d506e16bfb0ca2481866dd0bb (diff) | |
| download | bcm5719-llvm-e0fc5aef18948ae7193166cdfc8f069cd828399d.tar.gz bcm5719-llvm-e0fc5aef18948ae7193166cdfc8f069cd828399d.zip | |
[Kaleidoscope][BuildingAJIT] Add a description of the KaleidoscopeJIT addModule
method to Chapter1 of the BuildingAJIT tutorial.
llvm-svn: 270778
Diffstat (limited to 'llvm/examples')
| -rw-r--r-- | llvm/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/llvm/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h b/llvm/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h index d4849b79aa0..b16814d7cd4 100644 --- a/llvm/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h +++ b/llvm/examples/Kaleidoscope/BuildingAJIT/Chapter1/KaleidoscopeJIT.h @@ -55,18 +55,29 @@ public: TargetMachine &getTargetMachine() { return *TM; } ModuleHandle addModule(std::unique_ptr<Module> M) { - // We need a memory manager to allocate memory and resolve symbols for this - // new module. Create one that resolves symbols by looking back into the - // JIT. + // Build our symbol resolver: + // Lambda 1: Look back into the JIT itself to find symbols that are part of + // the same "logical dylib". + // Lambda 2: Search for external symbols in the host process. auto Resolver = createLambdaResolver( [&](const std::string &Name) { if (auto Sym = CompileLayer.findSymbol(Name, false)) return RuntimeDyld::SymbolInfo(Sym.getAddress(), Sym.getFlags()); return RuntimeDyld::SymbolInfo(nullptr); }, - [](const std::string &S) { return nullptr; }); + [](const std::string &Name) { + if (auto SymAddr = + RTDyldMemoryManager::getSymbolAddressInProcess(Name)) + return RuntimeDyld::SymbolInfo(SymAddr, JITSymbolFlags::Exported); + return RuntimeDyld::SymbolInfo(nullptr); + }); + + // Build a singlton module set to hold our module. std::vector<std::unique_ptr<Module>> Ms; Ms.push_back(std::move(M)); + + // Add the set to the JIT with the resolver we created above and a newly + // created SectionMemoryManager. return CompileLayer.addModuleSet(std::move(Ms), make_unique<SectionMemoryManager>(), std::move(Resolver)); |

