aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <pedro@palves.net>2021-06-18 13:50:45 +0100
committerPedro Alves <pedro@palves.net>2021-07-06 11:51:57 +0100
commite3e837844a32374a5d787a11ed5e54a856d4d4b0 (patch)
tree5eab61600a71baef9460045b0f9793354f9e692f
parent0d4e283965dae2c05cf0c85dccea6144a2c6293e (diff)
downloadfsf-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.exp2
-rw-r--r--gdb/testsuite/gdb.perf/disassemble.exp2
-rw-r--r--gdb/testsuite/gdb.perf/single-step.exp2
-rw-r--r--gdb/testsuite/gdb.perf/skip-command.exp2
-rw-r--r--gdb/testsuite/gdb.perf/skip-prologue.exp12
-rw-r--r--gdb/testsuite/gdb.perf/solib.exp2
-rw-r--r--gdb/testsuite/gdb.perf/template-breakpoints.exp2
-rw-r--r--gdb/testsuite/lib/perftest.exp25
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
+ }
+ }
+}