PerfTest::assemble functions return results.

gdb/testsuite/ChangeLog:

	* lib/perftest.exp (PerfTest::compile): Unconditionally call body.
	(PerfTest::startup): New function.
	(PerfTest::run): Return result of calling body.
	(PerfTest::assemble): Rewrite.
	* gdb.perf/backtrace.exp (PerfTest::assemble): Update function result.
	* gdb.perf/disassemble.exp (PerfTest::assemble): Ditto.
	* gdb.perf/single-step.exp (PerfTest::assemble): Ditto.
	* gdb.perf/skip-prologue.exp (PerfTest::assemble): Ditto.
	* gdb.perf/solib.exp (PerfTest::assemble): Ditto.
This commit is contained in:
Doug Evans
2015-07-24 15:38:21 -07:00
parent 7b606f95c9
commit 63738bfdb9
7 changed files with 61 additions and 19 deletions

@ -1,3 +1,15 @@
2015-07-24 Doug Evans <dje@google.com>
* lib/perftest.exp (PerfTest::compile): Unconditionally call body.
(PerfTest::startup): New function.
(PerfTest::run): Return result of calling body.
(PerfTest::assemble): Rewrite.
* gdb.perf/backtrace.exp (PerfTest::assemble): Update function result.
* gdb.perf/disassemble.exp (PerfTest::assemble): Ditto.
* gdb.perf/single-step.exp (PerfTest::assemble): Ditto.
* gdb.perf/skip-prologue.exp (PerfTest::assemble): Ditto.
* gdb.perf/solib.exp (PerfTest::assemble): Ditto.
2015-07-24 Doug Evans <dje@google.com> 2015-07-24 Doug Evans <dje@google.com>
* lib/gdb.exp (clean_restart): Make executable optional. * lib/gdb.exp (clean_restart): Make executable optional.

@ -58,9 +58,12 @@ PerfTest::assemble {
gdb_breakpoint "fun2" gdb_breakpoint "fun2"
gdb_continue_to_breakpoint "fun2" gdb_continue_to_breakpoint "fun2"
return 0
} { } {
global BACKTRACE_DEPTH global BACKTRACE_DEPTH
gdb_test "python BackTrace\($BACKTRACE_DEPTH\).run()" gdb_test "python BackTrace\($BACKTRACE_DEPTH\).run()"
return 0
} }

@ -52,6 +52,9 @@ PerfTest::assemble {
if ![runto_main] { if ![runto_main] {
return -1 return -1
} }
return 0
} { } {
gdb_test "python Disassemble\(\).run()" gdb_test "python Disassemble\(\).run()"
return 0
} }

@ -47,10 +47,12 @@ PerfTest::assemble {
fail "Can't run to main" fail "Can't run to main"
return -1 return -1
} }
return 0
} { } {
global SINGLE_STEP_COUNT global SINGLE_STEP_COUNT
gdb_test_no_output "python SingleStep\(${SINGLE_STEP_COUNT}\).run()" gdb_test_no_output "python SingleStep\(${SINGLE_STEP_COUNT}\).run()"
# Terminate the loop. # Terminate the loop.
gdb_test "set variable flag = 0" gdb_test "set variable flag = 0"
return 0
} }

@ -52,6 +52,7 @@ PerfTest::assemble {
fail "Can't run to main" fail "Can't run to main"
return -1 return -1
} }
return 0
} { } {
global SKIP_PROLOGUE_COUNT global SKIP_PROLOGUE_COUNT
@ -66,4 +67,5 @@ PerfTest::assemble {
pass $test pass $test
} }
} }
return 0
} }

@ -80,8 +80,10 @@ PerfTest::assemble {
fail "Can't run to main" fail "Can't run to main"
return -1 return -1
} }
return 0
} { } {
global SOLIB_COUNT global SOLIB_COUNT
gdb_test_no_output "python SolibLoadUnload\($SOLIB_COUNT\).run()" gdb_test_no_output "python SolibLoadUnload\($SOLIB_COUNT\).run()"
return 0
} }

@ -42,14 +42,13 @@ namespace eval PerfTest {
# actual compilation. Return zero if compilation is successful, # actual compilation. Return zero if compilation is successful,
# otherwise return non-zero. # otherwise return non-zero.
proc compile {body} { proc compile {body} {
global GDB_PERFTEST_MODE
if { [info exists GDB_PERFTEST_MODE]
&& [string compare $GDB_PERFTEST_MODE "run"] } {
return [uplevel 2 $body] return [uplevel 2 $body]
} }
return 0 # Run the startup code. Return zero if startup is successful,
# otherwise return non-zero.
proc startup {body} {
return [uplevel 2 $body]
} }
# Start up GDB. # Start up GDB.
@ -57,7 +56,8 @@ namespace eval PerfTest {
uplevel 2 $body uplevel 2 $body
} }
# Run the performance test. # Run the performance test. Return zero if the run is successful,
# otherwise return non-zero.
proc run {body} { proc run {body} {
global timeout global timeout
global GDB_PERFTEST_TIMEOUT global GDB_PERFTEST_TIMEOUT
@ -68,36 +68,56 @@ namespace eval PerfTest {
} else { } else {
set timeout 3000 set timeout 3000
} }
uplevel 2 $body set result [uplevel 2 $body]
set timeout $oldtimeout set timeout $oldtimeout
return $result
} }
# The top-level interface to PerfTest. # The top-level interface to PerfTest.
# COMPILE is the tcl code to generate and compile source files. # COMPILE is the tcl code to generate and compile source files.
# Return zero if compilation is successful, otherwise return
# non-zero.
# STARTUP is the tcl code to start up GDB. # STARTUP is the tcl code to start up GDB.
# RUN is the tcl code to drive GDB to do some operations. # RUN is the tcl code to drive GDB to do some operations.
# Each of COMPILE, STARTUP, and RUN return zero if successful, and
# non-zero if there's a failure.
proc assemble {compile startup run} { proc assemble {compile startup run} {
global GDB_PERFTEST_MODE global GDB_PERFTEST_MODE
if ![info exists GDB_PERFTEST_MODE] {
return
}
if { [string compare $GDB_PERFTEST_MODE "run"] != 0 } {
if { [eval compile {$compile}] } { if { [eval compile {$compile}] } {
untested "Could not compile source files." untested "Could not compile source files."
return return
} }
}
# Don't execute the run if GDB_PERFTEST_MODE=compile. # Don't execute the run if GDB_PERFTEST_MODE=compile.
if { [info exists GDB_PERFTEST_MODE] if { [string compare $GDB_PERFTEST_MODE "compile"] == 0} {
&& [string compare $GDB_PERFTEST_MODE "compile"] == 0} {
return return
} }
eval $startup verbose -log "PerfTest::assemble, startup ..."
if [eval startup {$startup}] {
fail "startup"
return
}
verbose -log "PerfTest::assemble, done startup"
_setup_perftest _setup_perftest
eval run {$run} verbose -log "PerfTest::assemble, run ..."
if [eval run {$run}] {
fail "run"
}
verbose -log "PerfTest::assemble, run complete."
_teardown_perftest _teardown_perftest
} }
@ -109,11 +129,9 @@ proc skip_perf_tests { } {
global GDB_PERFTEST_MODE global GDB_PERFTEST_MODE
if [info exists GDB_PERFTEST_MODE] { if [info exists GDB_PERFTEST_MODE] {
if { "$GDB_PERFTEST_MODE" != "compile" if { "$GDB_PERFTEST_MODE" != "compile"
&& "$GDB_PERFTEST_MODE" != "run" && "$GDB_PERFTEST_MODE" != "run"
&& "$GDB_PERFTEST_MODE" != "both" } { && "$GDB_PERFTEST_MODE" != "both" } {
# GDB_PERFTEST_MODE=compile|run|both is allowed.
error "Unknown value of GDB_PERFTEST_MODE." error "Unknown value of GDB_PERFTEST_MODE."
return 1 return 1
} }