Using EH from C

david daney ddaney@avtrex.com
Sun May 2 04:39:00 GMT 2004


On Sat, 1 May 2004, Richard Henderson wrote:

>> On Sat, May 01, 2004 at 05:09:23PM +0300, Stelios Xanthakis wrote:
>> > But of little use without another extension to create landing pads...:(
>>
>> Why in the world would you need that?

>Because if there's no landing pad, _Unwind_RaiseException
>ends up on abort()?
>
>I may be totally wrong, but what I'm trying to do is implement
>"stack unwind with cost-free cleanups from C".
>
>That's three things
>
>1. register destructors on EH
>  Done: attribute(cleanup(function))
>
>2. call 'throw'
>  Done: libgcc_eh and unwind.h
>
>3. set up a landing pad somewhere (try-catch).
>  ???
>
>Where does _Unwind stop otherwise? main()?
>
>~S


gcc/testsuite/gcc.dg/cleanup9.c kind of does what you are talking about.  I would setjump and set an attfibute(cleanup(function)) at the catch point, and then longjump from the cleanup function.
 
Why can't you use C++ for the try/catch part?  Since all of this is GCC specific, if you have C and excpetions working it doesn't seem like using G++ would be a problem.
 
David Daney.
 


More information about the Gcc mailing list