Exit status 256+signum is actually baked in to ksh

While #10121 did fix the signal numbers for FreeBSD/Darwin, it
incorrectly changed the expected encoding of exit status for commands
that exited on a signal.  The encoding 256+signum is a feature of the
shell.  Only the signal numbers themselves are platform-dependent.

Always use the encoding 256+signum when checking exit status for
signal exits.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #10137
This commit is contained in:
Ryan Moeller 2020-03-17 12:49:58 -04:00 committed by GitHub
parent 4d32abaa87
commit e0d3284bc9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 3 additions and 9 deletions

View File

@ -165,26 +165,20 @@ function log_mustnot_expect
(( $? != 0 )) && log_fail (( $? != 0 )) && log_fail
} }
# Exit status encoding is platform-dependent # Signal numbers are platform-dependent
case $(uname) in case $(uname) in
Darwin|FreeBSD) Darwin|FreeBSD)
EXIT_SIGNAL=128
SIGBUS=10 SIGBUS=10
SIGSEGV=11 SIGSEGV=11
;; ;;
illumos) illumos|Linux|*)
EXIT_SIGNAL=256
SIGBUS=7
SIGSEGV=11
;;
Linux|*)
EXIT_SIGNAL=128
SIGBUS=7 SIGBUS=7
SIGSEGV=11 SIGSEGV=11
;; ;;
esac esac
EXIT_SUCCESS=0 EXIT_SUCCESS=0
EXIT_NOTFOUND=127 EXIT_NOTFOUND=127
EXIT_SIGNAL=256
EXIT_SIGBUS=$((EXIT_SIGNAL + SIGBUS)) EXIT_SIGBUS=$((EXIT_SIGNAL + SIGBUS))
EXIT_SIGSEGV=$((EXIT_SIGNAL + SIGSEGV)) EXIT_SIGSEGV=$((EXIT_SIGNAL + SIGSEGV))