Add DisableGVCompilation which forces the JIT to assert when it tries to allocate space for a GlobalVariable.

llvm-svn: 56557
This commit is contained in:
Evan Cheng 2008-09-24 16:25:55 +00:00
parent 7c60c6e7bf
commit 0ed8f5b185
3 changed files with 16 additions and 0 deletions

View File

@ -65,6 +65,7 @@ class ExecutionEngine {
const TargetData *TD;
ExecutionEngineState state;
bool LazyCompilationDisabled;
bool GVCompilationDisabled;
bool SymbolSearchingDisabled;
protected:
@ -254,6 +255,16 @@ public:
bool isLazyCompilationDisabled() const {
return LazyCompilationDisabled;
}
/// DisableGVCompilation - If called, the JIT will abort if it's asked to allocate
/// space and populate a GlobalVariable.
void DisableGVCompilation(bool Disabled = true) {
GVCompilationDisabled = Disabled;
}
bool isGVCompilationDisabled() const {
return GVCompilationDisabled;
}
/// DisableSymbolSearching - If called, the JIT will not try to lookup unknown
/// symbols with dlsym. A client can still use InstallLazyFunctionCreator to
/// resolve symbols in a custom way.

View File

@ -40,6 +40,7 @@ ExecutionEngine::EERegisterFn ExecutionEngine::ExceptionTableRegister = 0;
ExecutionEngine::ExecutionEngine(ModuleProvider *P) : LazyFunctionCreator(0) {
LazyCompilationDisabled = false;
GVCompilationDisabled = false;
SymbolSearchingDisabled = false;
Modules.push_back(P);
assert(P && "ModuleProvider is null?");

View File

@ -552,6 +552,10 @@ void *JIT::getOrEmitGlobalVariable(const GlobalVariable *GV) {
addGlobalMapping(GV, Ptr);
}
} else {
if (isGVCompilationDisabled()) {
cerr << "Compilation of GlobalVariable is disabled!\n";
abort();
}
// If the global hasn't been emitted to memory yet, allocate space and
// emit it into memory. It goes in the same array as the generated
// code, jump tables, etc.