Vincent R. wrote: >> Really, it's all pretty much the same as DW2, except that rather than >> calling a raise exception function in libgcc, it begins with a real >> processor exception that then ends up routing into the unwinder. From >> there it's all fairly analagous.
I should have added that the relevant distinction that's coming into play here is that, instead of having data in the unwind tables for each catch handler to describe what exceptions it has, with SEH you have a filter function called at each catch level, which does a runtime test on the exception and tells the unwinder whether it wants to handle that particular exception or not. I think a nested function is entirely suitable for this, and in particular that the ability of a nested function to access the enclosing function's local variables is entirely appropriate in this usage. > Yes this article is the best one about frame-based SEH (x86) but there are > also very good one about table-based (x64, arm, mips, sh). > > http://www.microsoft.com/msj/0197/Exception/Exception.aspx : frame-based > exception > In google type : x64 seh and select first entry (cached version only > available) > http://www.nynaeve.net/?p=99 > http://www.howzatt.demon.co.uk/articles/oct04.html > http://www.ntcore.com/Files/vista_x64.htm#Exception_Handling > http://www.smartmobili.com/content/view/40/42/lang,fr/ I guess as long as we're sharing links I should post a pointer to the "EH newbies HOWTO": http://gcc.gnu.org/ml/gcc/2002-07/msg00391.html and of course the C++ ABI spec: http://www.codesourcery.com/public/cxx-abi/abi-eh.html > Please note that SEH is also the underlying mechanism used by C++ > exceptions on windows platforms. Yep, so we know it all has to be possible somehow! cheers, DaveK