diff options
author | Lang Hames <lhames@gmail.com> | 2018-06-18 18:01:43 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-06-18 18:01:43 +0000 |
commit | 68c9b8d6a181934636d39c36e020d5999b2c67ad (patch) | |
tree | dfb0e881048e7163ca248d792cc25b838a153f4e /llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp | |
parent | 2e96114cafb37b7e65b5ca94060ede24b238af0d (diff) | |
download | bcm5719-llvm-68c9b8d6a181934636d39c36e020d5999b2c67ad.tar.gz bcm5719-llvm-68c9b8d6a181934636d39c36e020d5999b2c67ad.zip |
[ORC] Add an initial implementation of a replacement CompileOnDemandLayer.
CompileOnDemandLayer2 is a replacement for CompileOnDemandLayer built on the ORC
Core APIs. Functions in added modules are extracted and compiled lazily.
CompileOnDemandLayer2 supports multithreaded JIT'd code, and compilation on
multiple threads.
llvm-svn: 334967
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp index 3e5336ca272..61e8ee8ff1a 100644 --- a/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp @@ -54,9 +54,24 @@ void RTDyldObjectLinkingLayer2::emit(MaterializationResponsibility R, auto Info = RTDyld->loadObject(**ObjFile); { + std::set<StringRef> InternalSymbols; + for (auto &Sym : (*ObjFile)->symbols()) { + if (!(Sym.getFlags() & object::BasicSymbolRef::SF_Global)) { + if (auto SymName = Sym.getName()) + InternalSymbols.insert(*SymName); + else { + ES.reportError(SymName.takeError()); + R.failMaterialization(); + return; + } + } + } + SymbolMap Symbols; for (auto &KV : RTDyld->getSymbolTable()) - Symbols[ES.getSymbolStringPool().intern(KV.first)] = KV.second; + if (!InternalSymbols.count(KV.first)) + Symbols[ES.getSymbolStringPool().intern(KV.first)] = KV.second; + R.resolve(Symbols); } @@ -74,6 +89,7 @@ void RTDyldObjectLinkingLayer2::emit(MaterializationResponsibility R, ES.reportError(make_error<StringError>(RTDyld->getErrorString(), inconvertibleErrorCode())); R.failMaterialization(); + return; } R.finalize(); |