]> git.lizzy.rs Git - rust.git/commitdiff
Auto merge of #31457 - lambda:rtabort-use-libc-abort, r=alexcrichton
authorbors <bors@rust-lang.org>
Mon, 23 May 2016 06:14:11 +0000 (23:14 -0700)
committerbors <bors@rust-lang.org>
Mon, 23 May 2016 06:14:11 +0000 (23:14 -0700)
Use libc::abort, not intrinsics::abort, in rtabort!

intrinsics::abort compiles down to an illegal instruction, which on
Unix-like platforms causes the process to be killed with SIGILL.  A more
appropriate way to kill the process would be SIGABRT; this indicates
better that the runtime has explicitly aborted, rather than some kind of
compiler bug or architecture mismatch that SIGILL might indicate.

For rtassert!, replace this with libc::abort.  libc::abort raises
SIGABRT, but is defined to do so in such a way that it will terminate
the process even if SIGABRT is currently masked or caught by a signal
handler that returns.

On non-Unix platforms, retain the existing behavior.  On Windows we
prefer to avoid depending on the C runtime, and we need a fallback for
any other platforms that may be defined.  An alternative on Windows
would be to call TerminateProcess, but this seems less essential than
switching to using SIGABRT on Unix-like platforms, where it is common
for the process-killing signal to be printed out or logged.

This is a [breaking-change] for any code that depends on the exact
signal raised to abort a process via rtabort!

cc #31273
cc #31333

1  2 
src/test/run-pass/out-of-stack.rs

Simple merge