[MCJIT] Support DisableSymbolSearching and InstallLazyFunctionCreator in MCJIT.

Patch by Anthony Pesch. Thanks Anthony!



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215613 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Lang Hames 2014-08-14 02:38:20 +00:00
parent 14ee003f1a
commit e8d6e37938

View File

@ -316,13 +316,19 @@ uint64_t MCJIT::getSymbolAddress(const std::string &Name,
// If it hasn't already been generated, see if it's in one of our modules.
Module *M = findModuleForSymbol(Name, CheckFunctionsOnly);
if (!M)
return 0;
if (M) {
generateCodeForModule(M);
generateCodeForModule(M);
// Check the RuntimeDyld table again, it should be there now.
return getExistingSymbolAddress(Name);
}
// Check the RuntimeDyld table again, it should be there now.
return getExistingSymbolAddress(Name);
// If a LazyFunctionCreator is installed, use it to get/create the function.
// FIXME: Should we instead have a LazySymbolCreator callback?
if (LazyFunctionCreator)
Addr = (uint64_t)LazyFunctionCreator(Name);
return Addr;
}
uint64_t MCJIT::getGlobalValueAddress(const std::string &Name) {
@ -578,5 +584,7 @@ uint64_t LinkingMemoryManager::getSymbolAddress(const std::string &Name) {
Result = ParentEngine->getSymbolAddress(Name.substr(1), false);
if (Result)
return Result;
if (ParentEngine->isSymbolSearchingDisabled())
return 0;
return ClientMM->getSymbolAddress(Name);
}