From 94eb65b4c1ff02653c00c8f30b1a2a9617afa556 Mon Sep 17 00:00:00 2001 From: Ryan Moeller Date: Thu, 12 Mar 2020 13:50:51 -0400 Subject: [PATCH] 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 Signed-off-by: Ryan Moeller Closes #10121 --- tests/test-runner/include/logapi.shlib | 35 +++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/tests/test-runner/include/logapi.shlib b/tests/test-runner/include/logapi.shlib index 3c8324d57c5f..86a345b7a38b 100644 --- a/tests/test-runner/include/logapi.shlib +++ b/tests/test-runner/include/logapi.shlib @@ -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