Jamie Lokier <ja...@shareable.org> writes: > Paolo Bonzini wrote: >> On 03/15/2010 07:36 PM, Markus Armbruster wrote: >> >Please don't tell me that user emulators make abort() return. abort() >> >is declared __noreturn__, and the optimizer may well rely on that. >> >> If the user programs make a "signal (SIGABRT, SIG_IGN)" call, I suppose >> abort() will return. > > On Linux, man abort says: > > If the SIGABRT signal is ignored, or caught by a handler that returns, > the abort() function will still terminate the process. It does this by > restoring the default disposition for SIGABRT and then raising the sig‐ > nal for a second time. > > However I have a suspicious that I've seen abort() return on some > other OS in the distant past, maybe SunOS 4.
Dark age. > I wouldn't rely on abort() always terminating the process on all OSes. Such behavior is not permitted by ISO C: 7.20.4.1 The abort function [...] The abort function causes abnormal program termination to occur, unless the signal SIGABRT is being caught and the signal handler does not return. [...] The abort function does not return to its caller.