Damit man den Mechanismus sprachübergreifend nutzen kann, d.h. aus verschiedenen Sprachen generierte Objektdateien zusammenlinken kann, ist der Kern sprachunabhängig in ist in gcc/unwind*.{h,c,inc}
In ./c++/3.2/i386-redhat-linux/bits/gthr.h gibt es eine abstrakte C-Api, die für verschiedene Systeme implementiert worden ist, beziehungsweise bei einer Portierung implementiert werden muß.
USING_SJLJ_EXCEPTIONS hat auch Einfluß auf die Code-generierung (except.c,dwarf2out.c)
* Support for setjmp/longjmp (sjlj) exception handling has been added, as an alternative to the existing range-table based mechanism. sjlj is the default on non-sparc, non-x86 targets, or can be specified with the `--enable-sjlj-exceptions' configure parameter.und Debian-Mail:
Did you configure 3.3 using "--enable-sjlj-exceptions=yes"? That way the 3.3 C++ library should be compatible with the previous 3.3 library. The switch to dwarf2 can be delayed until the next debian release.The unwind-sjlj.c needs Thread specific storage, the others not.
Bei einem throw wird dynamisch durch Interpretierung der Information vom Compiler eine Tabelle erzeugt und gecached.
(Details siehe Code, den ich auch nicht verstanden habe :-)
Dies scheint die zu bevorzugende Implementierung zu sein.(Die SJLJ-Implementierung nutzt auch ein bischen DWARF, so daß auch dieses Argument wegf&auuml;llt.) Idee: könnte man die Tabelle nicht schon zur compile-Zeit erzeugen ?
Beim statischen Linken (-static) wird in einer statischen frame_dummy Funktion __register_frame_info_bases in unwind-dw2-fde.c aufgerufen. (Analyse mit objdump -D -l -j .text exceptiontest.lnx)
Vermutung, noch nicht untersucht: Beim dymanischen linken wird die Tabelle in der libc aus allen dynamischen Libraries aufgebaut.