News for hackers. Stuff that matters.
Re:On libunwind and dynamically generated code on x86-64 by wolfgke on Tuesday April 12, 2016 @09:20AM (#11479269)
SEH was there before C++ was fully standardized (first standardized version was C++98). In this sense one can argue that the definition of RAII is leaky since it "forgot" that SEH was already there and not the other way round. A proper solution would have been that functions where RAII is used must not call functions that can throw an SEH exception.
Re:On libunwind and dynamically generated code on x86-64 by pjc50 on Tuesday April 12, 2016 @09:35AM (#11479399)
All kinds of functions can throw SEH exceptions, because they're machine check exceptions (divide by zero, reference invalid page/null pointer).

I went and looked this up to refresh my memory: https://msdn.microsoft.com/en-us/library/swezty51.aspx

Microsoft recommend you don't mix the use of SEH exceptions with C++, or that you use the flag which turns SEH into C++ exceptions (and therefore calls destructors). In our case we didn't want to do that, because we're doing our own crash reporting and all we want is to log a backtrace while exiting the program, and do not want to call destructors which may themselves crash because the program is in an invalid state.

Re:On libunwind and dynamically generated code on x86-64 by wolfgke on Tuesday April 12, 2016 @09:39AM (#11479437)
To me this all looks like stuff that is undefined behavior in C++, so a C++ program for which such a problem occurs is by definition invalid. In other words: You have a large problem in your code.
Re:On libunwind and dynamically generated code on x86-64 by pjc50 on Tuesday April 12, 2016 @10:44AM (#11479977)
Like I said: it's crash logging code, to be used for detecting problems in the code. Undefined behaviour is not invalid: if C++ compilers rejected all UB it would be considerably easier to ship (harder to write!) reliable programs.
Re:On libunwind and dynamically generated code on x86-64 by wolfgke on Tuesday April 12, 2016 @11:15AM (#11480256)
No: The C++ standard requires from programmer that it will not trigger UB. This is a kind of contract between the programmer and the compiler.
Re:On libunwind and dynamically generated code on x86-64 by zvrba on Wednesday April 13, 2016 @01:26AM (#11485954)
The compiler vendor is free to extend the standard and define UB.
Re:On libunwind and dynamically generated code on x86-64 by kaushiks on Tuesday April 12, 2016 @05:45PM (#11483848)
C++ exception handling is implemented using SEH (so is CLR's IIRC, and Chakra's). SEH is implemented by the OS and is available to non-C++ code too (including C).