ZTS: Use correct signal numbers for status checks

Different operating systems encode exit status in different ways.
The logapi shell library assumes the Solaris meaning of exit codes,
which is not correct on other platforms.

Define the needed constants according to the platform we are running
on and use those to decode process exit status.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #10121
This commit is contained in:
Ryan Moeller 2020-03-12 13:50:51 -04:00 committed by GitHub
parent cdbc34fc2b
commit 94eb65b4c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 29 additions and 6 deletions

View File

@ -165,6 +165,29 @@ function log_mustnot_expect
(( $? != 0 )) && log_fail
}
# Exit status encoding is platform-dependent
case $(uname) in
Darwin|FreeBSD)
EXIT_SIGNAL=128
SIGBUS=10
SIGSEGV=11
;;
illumos)
EXIT_SIGNAL=256
SIGBUS=7
SIGSEGV=11
;;
Linux|*)
EXIT_SIGNAL=128
SIGBUS=7
SIGSEGV=11
;;
esac
EXIT_SUCCESS=0
EXIT_NOTFOUND=127
EXIT_SIGBUS=$((EXIT_SIGNAL + SIGBUS))
EXIT_SIGSEGV=$((EXIT_SIGNAL + SIGSEGV))
# Execute and print command with status where success equals non-zero result
# or output includes expected keyword
#
@ -191,19 +214,19 @@ function log_neg_expect
out="cat $logfile"
# unexpected status
if (( $status == 0 )); then
if (( $status == EXIT_SUCCESS )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status"
# missing binary
elif (( $status == 127 )); then
elif (( $status == EXIT_NOTFOUND )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status (File not found)"
# bus error - core dump (256+signal, SIGBUS=7)
elif (( $status == 263 )); then
# bus error - core dump
elif (( $status == EXIT_SIGBUS )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status (Bus Error)"
# segmentation violation - core dump (256+signal, SIGSEGV=11)
elif (( $status == 267 )); then
# segmentation violation - core dump
elif (( $status == EXIT_SIGSEGV )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status (SEGV)"
else