Add a function that reads test output streams and just forwards it on to stdout, except when a line is 'EXIT: STATUS=%d', at which point it grabs the status to use as the exit code. Tests that always exit with zero (due to how they inform QEMU to quit), can now return other status codes. Run with . scripts/functions.bash $test_cmdline | snoop_exitcode The unit test must call print_exit_line(code) before invoking its method to quit QEMU. For arm and powerpc, we just add the print_exit_line calls to their exit() functions right now. Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> --- configure | 5 ++++- lib/arm/io.c | 1 + lib/libcflat.h | 3 +++ lib/powerpc/io.c | 1 + scripts/functions.bash | 11 +++++++++++ 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/configure b/configure index b2ad199da7873..e1f70bd79d4f7 100755 --- a/configure +++ b/configure @@ -10,6 +10,7 @@ ar=ar arch=`uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/'` host=$arch cross_prefix= +snooper= usage() { cat <<-EOF @@ -81,8 +82,9 @@ if [ "$arch" = "i386" ] || [ "$arch" = "x86_64" ]; then testdir=x86 elif [ "$arch" = "arm" ] || [ "$arch" = "arm64" ]; then testdir=arm -elif [ "$arch" = "ppc64" ]; then +elif [ "$arch" = "powerpc" ] || [ "$arch" = "ppc64" ]; then testdir=powerpc + snooper=snoop_exitcode else testdir=$arch fi @@ -137,4 +139,5 @@ OBJDUMP=$cross_prefix$objdump AR=$cross_prefix$ar API=$api TEST_DIR=$testdir +SNOOPER="$snooper" EOF diff --git a/lib/arm/io.c b/lib/arm/io.c index a08d394e4aa1c..487071d2edcd3 100644 --- a/lib/arm/io.c +++ b/lib/arm/io.c @@ -78,6 +78,7 @@ void puts(const char *s) void exit(int code) { + print_exit_line(code); chr_testdev_exit(code); halt(code); } diff --git a/lib/libcflat.h b/lib/libcflat.h index 8411f6c5d92e3..c3d90a0af831a 100644 --- a/lib/libcflat.h +++ b/lib/libcflat.h @@ -77,4 +77,7 @@ do { \ abort(); \ } while (0) +#define print_exit_line(code) \ + printf("\nEXIT: STATUS=%d\n", ((code) << 1) | 1) + #endif diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c index 25cdd0ad961ee..b68d33b9ef740 100644 --- a/lib/powerpc/io.c +++ b/lib/powerpc/io.c @@ -29,6 +29,7 @@ void puts(const char *s) void exit(int code) { + print_exit_line(code); rtas_power_off(); halt(code); } diff --git a/scripts/functions.bash b/scripts/functions.bash index 7ed5a517250bc..7b4a5e4e63c9b 100644 --- a/scripts/functions.bash +++ b/scripts/functions.bash @@ -40,3 +40,14 @@ function for_each_unittest() "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" exec {fd}<&- } + +function snoop_exitcode() +{ + while read line; do + if [[ $line =~ ^EXIT:\ STATUS=(.*)$ ]]; then + code=${BASH_REMATCH[1]} + fi + echo $line + done + exit $code +} -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html