On Tue, 09 Jun 2015 11:57:03 +0100, Stewart Gordon wrote: > On 27/04/2015 10:41, ketmar wrote: > <snip> >> i believe this has something to do with exception frames. but it needs >> further investigation. > > What is an exception frame, exactly?
to correctly do unwinding and other interesting things exception handler should do, compiler must establish special hidden structures in the form of single-linked list, so runtime can traverse it backwards if it needs to unwind the stack (i.e. calling destructors for structs, for example). > Moreover, are these frames applicable even in sections of code where no > throwing or catching of exceptions takes place? exception can be thrown by function that is called from your code. compiler needs to setup structures to correctly "unwind" the stack in this case. if nothing will throw, that setup cost as almost zero and can be ignored. but playing games with stack can lead to corruption of such structures (runtime doesn't know that stack was changed, and it can't update it's internal data structures accordingly). this may be harmless, or may lead to crash, or may lead to memory corruption without immediate crashing, or... effects are unpredictable. tldr; don't use setjmp/longjmp in the language with exceptions, unless you can describe it's runtime internals and exception handling down to assembler code when you're awaken at night completely drunk. ;-)
signature.asc
Description: PGP signature