[LLVMdev] Throwing C++ exception through LLVM JITed code

Chris chris at k1w1.org
Tue Oct 26 15:43:11 PDT 2010


I am using LLVM to compile script code and then executing using the JIT
compiler via the runFunction() method. The script code is contained with a
C++ program compiled with G++. I am having a problem when an intrinsic
function (i.e. a function implemented in C++ which is called from the LLVM
compiled script) throws a C++ exception. I want the exception to be caught
by the C++ code that invoked the script. Instead it appears that no
exception handler is found.

Does anyone know of a way to throw C++ exceptions through LLVM JITed code?

To illustrate the problem a bit better, consider this psuedo code. I want
the exception thrown in intrinsic_function(), which is called from the LLVM
compiled code, to be caught by the exception handler at the bottom of
run_program().

void intrinsic_function() {
   throw runtime_error("unimplemented function");
}

void run_program() {
  char *script_code = "call intrinsic_function();";

  try {
    myFunction = compile(script_code);
    Engine->runFunction(myFunction);
  } catch (...) {
     // This is never reached.
  }
}

I suspect this is not going to be possible unless somehow GCC and LLVM used
the same stack structure so that the exception handling code could unwind
the stack through the JITed code.

Thanks, Chris.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101026/e6f49763/attachment.html>


More information about the llvm-dev mailing list