[LLVMdev] Catching exceptions passed through a JIT ExecutionEngine

Garrison Venn gvenn.cfe.dev at gmail.com
Thu Jul 21 15:02:01 PDT 2011


Ok, see llvm/examples/ExceptionDemo/ExceptionDemo.cpp

For OS X and Linux, build llvm with the environmental variable BUILD_EXAMPLES set to 1(csh: setenv BUILD_EXAMPLES 1). If llvm is already built, it will only build the examples from clang and llvm, ExceptionDemo being one of those.

If I understand your case, running ExceptionDemo with an arg of -1 emulates your scenario. Note that the ExceptionDemo example is built by the llvm make (cmake worked last I checked) with exceptions on. By default exceptions are turned off for most llvm libs.

I would think that if:

1) setting: llvm::JITExceptionHandling = true;
2) building your process with exceptions on.

your program should work.

Hope this helps

Garrison
 
On Jul 21, 2011, at 17:47, Peter Zion wrote:

> Yes, I did -- it made no difference.  Should it?
> 
> Note that I have since discovered that this is not a problem on Windows -- the exception drops through as expected. 
> 
> pz
> 
> On 2011-07-21, at 5:45 PM, Garrison Venn wrote:
> 
>> Sorry Peter, just saw this.
>> 
>> If you are still having the problem:
>> 
>> Did you set: llvm::JITExceptionHandling = true; ?
>> 
>> Garrison
>> 
>> On Jul 12, 2011, at 19:25, Peter Zion wrote:
>> 
>>> Hi All,
>>> 
>>> I'm trying to catch an exception that is "passed through" an LLVM ExecutionEngine but I am unable to do so.  Specifically, in C++ code, inside a try/catch block, I call a JITted function, which in turn calls back into my code.  Everything works fine unless an exception is thrown; I would except the outermost try/catch(...) block to catch the exception thrown in my innermost C++ code, but instead I get the abort "terminate called after throwing an instance of 'MyException'".  I am compiling the system with g++ (on Linux and OSX); I haven't tried MSVC++.
>>> 
>>> Is there something that I need to do to get this behaviour to work?  I admit that I have only a fairly basic understanding of how exception handling is implemented in C++ but from what I've read it seems like the exception should unwind through what is, for all intents and purposes, a simple call stack...
>>> 
>>> Thanks,
>>> Peter Zion
>>> 
>>> 
>>> _______________________________________________
>>> 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