On Mon, Feb 21, 2005 at 12:32:52PM +0800, Euler Herbert wrote:

> Hi everyone, 

Hi,

> I am trying to find out how g++ implements error handling. 
> My environment is CPU AMD Athlon(tm) XP 2000+, Debian GNU/Linux 
> 3.1, GCC 3.4.3-6, and Glibc 2.3.2.ds1-20. After researching 
> assembling codes generated by g++, I have known the beginning 
> and ending part. That is, we will call __cxa_allocate_exception 
> when writing 'throw expression', then the constructor of the 
> exception class, and then __cxa_throw. __cxa_throw calls 
> _Unwind_RaiseException. But this function is so complex for 
> me that I cannot get the outline of the real process. However, 
> I found uw_install_context (which is a macro) will be called 
> if _Unwind_RaiseException succeeds, and the body of 
> uw_install_context contains calling of longjmp. So setjmp will 
> be somewhere, but I did no find it. Could somebody tell me the 
> outline of the unwinding process? 

I think this behaviour is defined by this spec:
http://www.codesourcery.com/cxx-abi/abi-eh.html

Which is part of the C++ ABI spec:
http://www.codesourcery.com/cxx-abi/

Hope that helps,

jon


-- 
"A woman drove me to drink, I never had the courtesy to thank her."
        - W.C. Fields

Reply via email to