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.


Reply via email to