mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 21:24:00 +00:00
Fix the cleanup process of exception information in JIT. Now JIT
deregisters registered by it FDE structures allowing consecutive JIT runs to succeed. Patch by Yuri. Fixes PR8285. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117004 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -47,12 +47,12 @@ ExecutionEngine *(*ExecutionEngine::JITCtor)(
|
||||
const SmallVectorImpl<std::string>& MAttrs) = 0;
|
||||
ExecutionEngine *(*ExecutionEngine::InterpCtor)(Module *M,
|
||||
std::string *ErrorStr) = 0;
|
||||
ExecutionEngine::EERegisterFn ExecutionEngine::ExceptionTableRegister = 0;
|
||||
|
||||
|
||||
ExecutionEngine::ExecutionEngine(Module *M)
|
||||
: EEState(*this),
|
||||
LazyFunctionCreator(0) {
|
||||
LazyFunctionCreator(0),
|
||||
ExceptionTableRegister(0),
|
||||
ExceptionTableDeregister(0) {
|
||||
CompilingLazily = false;
|
||||
GVCompilationDisabled = false;
|
||||
SymbolSearchingDisabled = false;
|
||||
@ -66,6 +66,16 @@ ExecutionEngine::~ExecutionEngine() {
|
||||
delete Modules[i];
|
||||
}
|
||||
|
||||
void ExecutionEngine::DeregisterAllTables() {
|
||||
if (ExceptionTableDeregister) {
|
||||
std::vector<void*>::iterator it = AllExceptionTables.begin();
|
||||
std::vector<void*>::iterator ite = AllExceptionTables.end();
|
||||
for (; it != ite; ++it)
|
||||
ExceptionTableDeregister(*it);
|
||||
AllExceptionTables.clear();
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
// This class automatically deletes the memory block when the GlobalVariable is
|
||||
// destroyed.
|
||||
|
Reference in New Issue
Block a user