diff options
author | Mike Frysinger <vapier@gentoo.org> | 2021-01-05 01:26:21 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2021-01-15 01:33:35 -0500 |
commit | 37a9c3a53e3705c5120506e457455642702845e6 (patch) | |
tree | bd55d53db865c08ba94edebf9e9b3a44538f97ae /sim | |
parent | 3624a6c15ce48e03d43983ec11d586d97ca08728 (diff) | |
download | fsf-binutils-gdb-37a9c3a53e3705c5120506e457455642702845e6.zip fsf-binutils-gdb-37a9c3a53e3705c5120506e457455642702845e6.tar.gz fsf-binutils-gdb-37a9c3a53e3705c5120506e457455642702845e6.tar.bz2 |
sim: testsuite: allow tests to declare expected exit status
Some tests want to verify they can control the exit status, and
allowing any non-zero value would allow tests to silently fail:
if it crashed & exited 1, or forced all non-zero to 1, then we
wouldn't be able to differentiate with a test exiting with a
status like 47.
Extend the test harness to allow tests to declare their expected
exit status that would be defined as a "pass". This requires a
small tweak to the sim_run API to return the status directly, but
that shouldn't be a big deal as it's only used by sim code.
Diffstat (limited to 'sim')
-rw-r--r-- | sim/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | sim/testsuite/lib/sim-defs.exp | 23 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/ChangeLog | 7 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/c.exp | 7 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp | 2 |
5 files changed, 32 insertions, 13 deletions
diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog index a32672a..1245ab4 100644 --- a/sim/testsuite/ChangeLog +++ b/sim/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2021-01-15 Mike Frysinger <vapier@gentoo.org> + + * lib/sim-defs.exp (sim_run): Delete status and return return_code. + (run_sim_test): Define status option. Change sim_run return to + return_code. Define status. Log return_code. + 2021-01-11 Mike Frysinger <vapier@gentoo.org> * common/alu-tst.c: Include stdlib.h. diff --git a/sim/testsuite/lib/sim-defs.exp b/sim/testsuite/lib/sim-defs.exp index b8ce230..43a0705 100644 --- a/sim/testsuite/lib/sim-defs.exp +++ b/sim/testsuite/lib/sim-defs.exp @@ -62,7 +62,7 @@ proc sim_compile { source dest type options } { # timeout=val - set the timeout to val for this run # # The result is a list of two elements. -# The first is one of pass/fail/etc. +# The first is the program's exit status (0/1/etc...). # The second is the program's output. # # This is different than the sim_load routine provided by @@ -156,15 +156,7 @@ proc sim_run { prog sim_opts prog_opts redir options } { remote_file host delete $prog } - # ??? Not sure the test for pass/fail is right. - # We just care that the simulator ran correctly, not whether the simulated - # program return 0 or non-zero from `main'. - set status fail - if { $return_code == 0 } { - set status pass - } - - return [list $status $output] + return [list $return_code $output] } # Run testcase NAME. @@ -183,6 +175,7 @@ proc sim_run { prog sim_opts prog_opts redir options } { # cc[(mach-list)]: <compiler options> # sim[(mach-list)]: <simulator options> # progopts: <arguments to the program being simulated> +# status: program exit status to treat as "pass" # output: program output pattern to match with string-match # xerror: program is expected to return with a "failure" exit code # xfail: <PRMS-opt> <target-triplets-where-test-fails> @@ -223,6 +216,7 @@ proc run_sim_test { name requested_machs } { set opts(cc) "" set opts(progopts) "" set opts(sim) "" + set opts(status) "0" set opts(output) "" set opts(mach) "" set opts(timeout) "" @@ -385,15 +379,21 @@ proc run_sim_test { name requested_machs } { } set result [sim_run ${name}.x "$opts(sim,$mach) $global_sim_options" "$opts(progopts)" "" "$options"] - set status [lindex $result 0] + set return_code [lindex $result 0] set output [lindex $result 1] + set status fail + if { $return_code == $opts(status) } { + set status pass + } + if { "$status" == "pass" } { if { "$opts(xerror)" == "no" } { if [string match $opts(output) $output] { pass "$mach $testname" file delete ${name}.o ${name}.x } else { + verbose -log "status: $return_code" 3 verbose -log "output: $output" 3 verbose -log "pattern: $opts(output)" 3 fail "$mach $testname (execution)" @@ -410,6 +410,7 @@ proc run_sim_test { name requested_machs } { pass "$mach $testname" file delete ${name}.o ${name}.x } else { + verbose -log "status: $return_code" 3 verbose -log "output: $output" 3 verbose -log "pattern: $opts(output)" 3 fail "$mach $testname (execution)" diff --git a/sim/testsuite/sim/cris/ChangeLog b/sim/testsuite/sim/cris/ChangeLog index 9cfffd1..16c7c27 100644 --- a/sim/testsuite/sim/cris/ChangeLog +++ b/sim/testsuite/sim/cris/ChangeLog @@ -1,3 +1,10 @@ +2021-01-15 Mike Frysinger <vapier@gentoo.org> + + * c/c.exp: Change sim_run return to return_code. Set status to + pass/fail based on return_code. + * hw/rv-n-cris/rvc.exp (sim_has_rv_and_cris): Compare return_code + to 0. + 2021-01-09 Mike Frysinger <vapier@gentoo.org> * readlink4.c (main): Change rindex to strrchr. diff --git a/sim/testsuite/sim/cris/c/c.exp b/sim/testsuite/sim/cris/c/c.exp index 034c4bf..08ea188 100644 --- a/sim/testsuite/sim/cris/c/c.exp +++ b/sim/testsuite/sim/cris/c/c.exp @@ -214,9 +214,14 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] { set result [sim_run $dest "$opts(sim,$mach)" "$opts(progoptions)" \ "" "$opts(simenv)"] - set status [lindex $result 0] + set return_code [lindex $result 0] set output [lindex $result 1] + set status fail + if { $return_code == 0 } { + set status pass + } + if { "$status" == "pass" } { if { "$opts(xerror)" == "no" } { if [string match $opts(output) $output] { diff --git a/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp b/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp index 98fc717..0f9ecec 100644 --- a/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp +++ b/sim/testsuite/sim/cris/hw/rv-n-cris/rvc.exp @@ -67,7 +67,7 @@ proc sim_has_rv_and_cris {} { set return_code [lindex $result 0] set output [lindex $result 1] - if { "$return_code" == "pass" } { + if { $return_code == 0 } { return 1 } |