summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-06-12 09:13:17 +0200
committerTom de Vries <tdevries@suse.de>2020-06-12 09:13:17 +0200
commit26783bce15adc0316f9167a216519cebcf1ccac3 (patch)
tree65cf0274d276e64edf61bc0e87005dca3e9d0ad1
parent453c733fcf74893b5907f935283976c11cd46ad5 (diff)
downloadbinutils-gdb-26783bce15adc0316f9167a216519cebcf1ccac3.tar.gz
[gdb/testsuite] Don't abort testrun for invalid command in test-case
Say we add a call to foobar at the end of a test-case, and run the test-suite. We'll run into a dejagnu error: ... ERROR: (DejaGnu) proc "foobar" does not exist. ... and the test-suite run is aborted. It's reasonable that the test-case is aborted, but it's not reasonable that the testsuite run is aborted. Problems in one test-case should not leak into other test-cases, and they generally don't. The exception is the "invalid command name" problem due to an override of ::unknown in dejagnu's framework.exp. Fix this by reverting dejagnu's ::unknown override for the duration of each test-case, using the gdb_init/gdb_finish hooks. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-06-12 Tom de Vries <tdevries@suse.de> PR testsuite/26110 * lib/gdb.exp (gdb_init): Revert dejagnu's override of ::unknown. (gdb_finish): Reinstall dejagnu's override of ::unknown.
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/lib/gdb.exp18
2 files changed, 23 insertions, 1 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0523f7cb881..ff834b7e3a0 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2020-06-12 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/26110
+ * lib/gdb.exp (gdb_init): Revert dejagnu's override of ::unknown.
+ (gdb_finish): Reinstall dejagnu's override of ::unknown.
+
2020-06-11 Tom Tromey <tom@tromey.com>
PR gdb/18318:
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 51f8a054645..64e667c20e0 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -5193,7 +5193,19 @@ proc gdb_init { test_file_name } {
global gdb_instances
set gdb_instances 0
- return [default_gdb_init $test_file_name]
+ set res [default_gdb_init $test_file_name]
+
+ # Dejagnu overrides proc unknown. The dejagnu version may trigger in a
+ # test-case but abort the entire test run. To fix this, we install a
+ # local version here, which reverts dejagnu's override, and restore
+ # dejagnu's version in gdb_finish.
+ rename ::unknown ::dejagnu_unknown
+ proc unknown { args } {
+ # Dejagnu saves the original version in ::tcl_unknown, use it.
+ return [uplevel 1 ::tcl_unknown $args]
+ }
+
+ return $res
}
proc gdb_finish { } {
@@ -5201,6 +5213,10 @@ proc gdb_finish { } {
global gdb_prompt
global cleanfiles
+ # Restore dejagnu's version of proc unknown.
+ rename ::unknown ""
+ rename ::dejagnu_unknown ::unknown
+
# Exit first, so that the files are no longer in use.
gdb_exit