MCJIT crash on 64 bit Linux, works find on OSX

Hi All.

I have an issue when a MCJIT ExecutionEngine is created then deleted, any C++ exception thrown after the MCJIT dtor is called will result in a seg fault. This does not occur with the regular JIT engine, and only occurs on Linux, works fine on OSX.

basically its like this:

ExecutionEngine *e = engineBuilder.create();

// this is fine
try { throw exception()} catch(exception&) {}

delete e

e = engineBuilder.create();

// this will cause a segfault on 64 bit Linux, LLVM 3.4
// works fine on OSX
try { throw exception()} catch(exception&) {}

Any ideas?

I get the same behavior with llvm 3.3

If I do not delete the ExecutionEngine, it works fine, and if I create a regular JIT and delete it it works fine.

So, basically, if I just let the engines leak, it seems to work.

After creating the engine, all I do is just build series of module function and JIT the module. I add mappings to a number of C++ functions in my library each time a new engine is created with:

void myAddGlobalMapping(const llvm::GlobalValue *gv, void *addr)
{
    llvm::sys::DynamicLibrary::AddSymbol(gv->getName(), addr);
    executionEngine->addGlobalMapping(gv, addr);
}

Attached is a stack trace, the function, getFloatingSpeciesIndex() throws a routine std::exception which is normally caught one level up in LLVMModelSymbols::visit().

However, after a MCJIT ExecutionEngine is deleted and re-created, I think something in the destructor might be removing part of the std c++ runtime, is the even possible?

Again, like I said the exact same code works perfectly on 64 OSX 10.6 and it works perfectly all platforms when using the regular JIT.

Thread [1] 9303 [core: 1] (Suspended : Signal : SIGSEGV:Segmentation fault)
  0x7ffff61eb751
  0x7ffff61ebca9
  _Unwind_Find_FDE() at 0x7ffff61eca72
  0x7ffff61e9c7c
  0x7ffff61ea63d
  _Unwind_RaiseException() at 0x7ffff61eaace
  __cxa_throw() at 0x7ffff644faa1
  rrllvm::LLVMModelDataSymbols::getFloatingSpeciesIndex() at LLVMModelDataSymbols.cpp:262 0x7ffff6e537f5
  rrllvm::LLVMModelSymbols::visit() at LLVMModelSymbols.cpp:185 0x7ffff6e0300e