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

Garrison Venn gvenn.cfe.dev at gmail.com
Wed Oct 27 05:45:31 PDT 2010


See ExceptionDemo.cpp in llvm/examples/ExceptionDemo. I believe your case is covered if 
I understand it correctly. To run this example make sure to run make with the environmental
variable BUILD_EXAMPLES set to 1.

Hope this helps

Garrison

On Oct 26, 2010, at 18:43, Chris wrote:

> 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.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list