documentation on "sjlj exceptions", DWARF2, etc?
Bryce McKinlay
bryce@waitaki.otago.ac.nz
Tue Dec 11 16:55:00 GMT 2001
Adam Megacz wrote:
>It appears that I need to educate myself on gcc's ABI for C++
>exceptions. Can anybody refer me to a good source of documentation for
>DWARF2 and (more importantly) "sjlj exceptions" (I have no idea what
>the heck that means, by the way).
>DWARF2 exceptions involve unwinding the stack and locating "catch"
blocks using DWARF2 bytecodes emitted by the compiler in a separate
binary section. The DWARF2 unwind information is similar but not the
same as the DWARF2 debugging info used by gcc/gdb on some targets.
Advantages: zero execution time overhead for try{} blocks, ie exceptions
only cost when they are thrown.
Disadvantages: Requires platform-specific voodoo to throw exceptions
from frames that wern't set up by GCC, ie signal handlers. This is
neccessary for Java in order to map segfaults into
NullPointerExceptions. This voodoo is currently only implemented in the
MD_FALLBACK_FRAME_STATE_FOR macro on some linux platforms.
SJLJ exceptions involve using the setjmp()/longjmp() functions (see your
glibc manual) to save and restore execution state, so basically setjmp()
is called where each try{} block is entered and longjmp() is called to
throw.
Advantages: Fairly simple and portable. Can throw from signal handler
without issues.
Disadvantages: Extra code at each try, which must be executed even if
exception doesn't actually get thrown.
Unfortunatly I don't think there is much documentation beyond than
comments in gcc/unwind-dw2.c, etc.
>Info on something called "EH
>personalities" would also be appreciated; I see "EH" sprinkled
>throughout the mingw exception handling code...
>As I understand it, the "EH personality functions" are what plugs the
language-specific EH semantics into the generic GCC EH framework. Thus
there is a C++ personality function in libsupc++, and a Java personality
function in libjava (exception.cc).
regards
Bryce.
More information about the Java
mailing list