diff options
author | Pedro Alves <pedro@palves.net> | 2021-06-18 13:50:45 +0100 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2021-07-06 11:51:57 +0100 |
commit | e3e837844a32374a5d787a11ed5e54a856d4d4b0 (patch) | |
tree | 5eab61600a71baef9460045b0f9793354f9e692f | |
parent | 0d4e283965dae2c05cf0c85dccea6144a2c6293e (diff) | |
download | fsf-binutils-gdb-e3e837844a32374a5d787a11ed5e54a856d4d4b0.zip fsf-binutils-gdb-e3e837844a32374a5d787a11ed5e54a856d4d4b0.tar.gz fsf-binutils-gdb-e3e837844a32374a5d787a11ed5e54a856d4d4b0.tar.bz2 |
gdb.perf/: FAIL on Python errors, avoid "ERROR: internal buffer is full"
Currently, if you run make check-perf on a system with Python 3.8,
tests seen to PASS, but they actually test a lot less than intended,
due to:
PerfTest::assemble, run ...
python BackTrace(64).run()
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/perftest.py", line 65, in run
self.execute_test()
File "<string>", line 49, in execute_test
File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 45, in measure
m.start(id)
File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 102, in start
self.start_time = time.clock()
AttributeError: module 'time' has no attribute 'clock'
Error while executing Python code.
(gdb) PASS: gdb.perf/backtrace.exp: python BackTrace(64).run()
And then, after fixing the above Python compatibility issues (which
will be a separate patch), I get 86 instances of overflowing expect's
buffer, like:
ERROR: internal buffer is full.
UNRESOLVED: gdb.perf/single-step.exp: python SingleStep(1000).run()
This patch fixes both problems by adding & using a gdb_test_python_run
routine that:
- checks for Python errors
- consumes output line by line
gdb/testsuite/ChangeLog:
yyyy-mm-dd Pedro Alves <pedro@palves.net>
* gdb.perf/backtrace.exp: Use gdb_test_python_run.
* gdb.perf/disassemble.exp: Use gdb_test_python_run.
* gdb.perf/single-step.exp: Use gdb_test_python_run.
* gdb.perf/skip-command.exp: Use gdb_test_python_run.
* gdb.perf/skip-prologue.exp: Use gdb_test_python_run.
* gdb.perf/solib.exp: Use gdb_test_python_run.
* gdb.perf/template-breakpoints.exp: Use gdb_test_python_run.
* lib/perftest.exp (gdb_test_python_run): New.
Change-Id: I007af36f164b3f4cda41033616eaaa4e268dfd2f
-rw-r--r-- | gdb/testsuite/gdb.perf/backtrace.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/disassemble.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/single-step.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/skip-command.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/skip-prologue.exp | 12 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/solib.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.perf/template-breakpoints.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/lib/perftest.exp | 25 |
8 files changed, 32 insertions, 17 deletions
diff --git a/gdb/testsuite/gdb.perf/backtrace.exp b/gdb/testsuite/gdb.perf/backtrace.exp index 1e1243c..ced653c 100644 --- a/gdb/testsuite/gdb.perf/backtrace.exp +++ b/gdb/testsuite/gdb.perf/backtrace.exp @@ -63,7 +63,7 @@ PerfTest::assemble { } { global BACKTRACE_DEPTH - gdb_test "python BackTrace\($BACKTRACE_DEPTH\).run()" + gdb_test_python_run "BackTrace\($BACKTRACE_DEPTH\)" return 0 } diff --git a/gdb/testsuite/gdb.perf/disassemble.exp b/gdb/testsuite/gdb.perf/disassemble.exp index 55261d0..4a79e29 100644 --- a/gdb/testsuite/gdb.perf/disassemble.exp +++ b/gdb/testsuite/gdb.perf/disassemble.exp @@ -55,6 +55,6 @@ PerfTest::assemble { return 0 } { - gdb_test "python Disassemble\(\).run()" + gdb_test_python_run "Disassemble\(\)" return 0 } diff --git a/gdb/testsuite/gdb.perf/single-step.exp b/gdb/testsuite/gdb.perf/single-step.exp index 4a8eafe..7a5d068 100644 --- a/gdb/testsuite/gdb.perf/single-step.exp +++ b/gdb/testsuite/gdb.perf/single-step.exp @@ -51,7 +51,7 @@ PerfTest::assemble { } { global SINGLE_STEP_COUNT - gdb_test_no_output "python SingleStep\(${SINGLE_STEP_COUNT}\).run()" + gdb_test_python_run "SingleStep\(${SINGLE_STEP_COUNT}\)" # Terminate the loop. gdb_test "set variable flag = 0" return 0 diff --git a/gdb/testsuite/gdb.perf/skip-command.exp b/gdb/testsuite/gdb.perf/skip-command.exp index dfd84a1..e396262af 100644 --- a/gdb/testsuite/gdb.perf/skip-command.exp +++ b/gdb/testsuite/gdb.perf/skip-command.exp @@ -103,7 +103,7 @@ proc run_skip_bench { kind text } { for { set i 0 } { $i < 5 } { incr i } { set nr_skips [expr $i * $SKIP_DIRECTIVE_COUNT] install_skips $kind $text $nr_skips - gdb_test_no_output "python SkipCommand\(\"skip-$kind-$nr_skips\", ${SKIP_STEP_COUNT}\).run()" + gdb_test_python_run "SkipCommand\(\"skip-$kind-$nr_skips\", ${SKIP_STEP_COUNT}\)" } gdb_test "set variable flag = 0" diff --git a/gdb/testsuite/gdb.perf/skip-prologue.exp b/gdb/testsuite/gdb.perf/skip-prologue.exp index 8ff9238..7caff66 100644 --- a/gdb/testsuite/gdb.perf/skip-prologue.exp +++ b/gdb/testsuite/gdb.perf/skip-prologue.exp @@ -63,16 +63,6 @@ PerfTest::assemble { } { global SKIP_PROLOGUE_COUNT - set test "run" - gdb_test_multiple "python SkipPrologue\($SKIP_PROLOGUE_COUNT\).run()" $test { - -re "Breakpoint $decimal at \[^\n\]*\n" { - # GDB prints some messages on breakpoint creation. - # Consume the output to avoid internal buffer full. - exp_continue - } - -re ".*$gdb_prompt $" { - pass $test - } - } + gdb_test_python_run "SkipPrologue\($SKIP_PROLOGUE_COUNT\)" "run" return 0 } diff --git a/gdb/testsuite/gdb.perf/solib.exp b/gdb/testsuite/gdb.perf/solib.exp index 61e9a95..e0cd341 100644 --- a/gdb/testsuite/gdb.perf/solib.exp +++ b/gdb/testsuite/gdb.perf/solib.exp @@ -84,6 +84,6 @@ PerfTest::assemble { } { global SOLIB_COUNT - gdb_test_no_output "python SolibLoadUnload\($SOLIB_COUNT\).run()" + gdb_test_python_run "SolibLoadUnload\($SOLIB_COUNT\)" return 0 } diff --git a/gdb/testsuite/gdb.perf/template-breakpoints.exp b/gdb/testsuite/gdb.perf/template-breakpoints.exp index aa4dc95..96c1209 100644 --- a/gdb/testsuite/gdb.perf/template-breakpoints.exp +++ b/gdb/testsuite/gdb.perf/template-breakpoints.exp @@ -59,7 +59,7 @@ PerfTest::assemble { return 0 } { - gdb_test "python TemplateBreakpoints().run()" + gdb_test_python_run "TemplateBreakpoints()" return 0 } diff --git a/gdb/testsuite/lib/perftest.exp b/gdb/testsuite/lib/perftest.exp index 5549a72..de99518 100644 --- a/gdb/testsuite/lib/perftest.exp +++ b/gdb/testsuite/lib/perftest.exp @@ -155,3 +155,28 @@ proc tcl_string_list_to_python_list { l } { } return "([join $quoted_list {, }])" } + +# Helper routine for PerfTest::assemble "run" step implementations. +# Issues the "python ${OBJ}.run()" command, and consumes GDB output +# line by line. Issues a FAIL if the command fails with a Python +# error. Issues a PASS on success. MESSAGE is an optional message to +# be printed. If this is omitted, then the pass/fail messages use the +# command string as the message. + +proc gdb_test_python_run {obj {message ""}} { + global gdb_prompt + + set saw_error 0 + gdb_test_multiple "python ${obj}.run()" $message { + -re "Error while executing Python code\\." { + set saw_error 1 + exp_continue + } + -re "\[^\r\n\]*\r\n" { + exp_continue + } + -re "$gdb_prompt $" { + gdb_assert {!$saw_error} $gdb_test_name + } + } +} |