aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2015-07-29 23:12:33 +0000
committerLang Hames <lhames@gmail.com>2015-07-29 23:12:33 +0000
commit3393cfdef8d2ecdbe93ea97d1d912abc83644cbe (patch)
treecc784bfbdfbba8e28173a5941ac7c62fee4a5097 /llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
parente0d68e381b72c6e9d68de305874669a63cccc35d (diff)
downloadllvm-3393cfdef8d2ecdbe93ea97d1d912abc83644cbe.zip
llvm-3393cfdef8d2ecdbe93ea97d1d912abc83644cbe.tar.gz
llvm-3393cfdef8d2ecdbe93ea97d1d912abc83644cbe.tar.bz2
[MCJIT] Fix PR20656 by teaching MCJIT to honor ExecutionEngine's global mapping.
This is important for users of the C API who can't supply custom symbol resolvers yet. llvm-svn: 243589
Diffstat (limited to 'llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
index 492478d..c201f39 100644
--- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
+++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
@@ -270,6 +270,12 @@ void MCJIT::finalizeModule(Module *M) {
RuntimeDyld::SymbolInfo MCJIT::findExistingSymbol(const std::string &Name) {
SmallString<128> FullName;
Mangler::getNameWithPrefix(FullName, Name, getDataLayout());
+
+ if (void *Addr = getPointerToGlobalIfAvailable(FullName))
+ return RuntimeDyld::SymbolInfo(static_cast<uint64_t>(
+ reinterpret_cast<uintptr_t>(Addr)),
+ JITSymbolFlags::Exported);
+
return Dyld.getSymbol(FullName);
}