summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-06-18 18:01:43 +0000
committerLang Hames <lhames@gmail.com>2018-06-18 18:01:43 +0000
commit68c9b8d6a181934636d39c36e020d5999b2c67ad (patch)
treedfb0e881048e7163ca248d792cc25b838a153f4e /llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
parent2e96114cafb37b7e65b5ca94060ede24b238af0d (diff)
downloadbcm5719-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.cpp18
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();
OpenPOWER on IntegriCloud