[PATCH][gdb/testsuite] Don't abort testrun for invalid command in test-case

Tom de Vries
2020-06-11T14:35:26Z

Hi,

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 limiting the scope of dejagnu's ::unknown override.

Tested on x86_64-linux.

Any comments?

Thanks,
- Tom

[gdb/testsuite] Don't abort testrun for invalid command in test-case

gdb/testsuite/ChangeLog:

2020-06-11 Tom de Vries <tdevries@suse.de>

PR testsuite/26110
* lib/gdb.exp (::dejagnu_unknown): Rename from ::unknown.
(unknown): New proc.

---
gdb/testsuite/lib/gdb.exp | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 51f8a05464..e25f2e74f7 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -7243,5 +7243,32 @@ proc with_override { name override body } {
return $result
}

+# Save the unknown proc defined by dejagnu.
+rename ::unknown ::dejagnu_unknown
+
+# Override the unknown proc with a gdb-local version.
+proc unknown { args } {
+ set script [info script]
+
+ set script [file dirname $script]
+ set subdir3 [file tail $script]
+
+ set script [file dirname $script]
+ set subdir2 [file tail $script]
+
+ set script [file dirname $script]
+ set subdir1 [file tail $script]
+
+ if { $subdir1 == "gdb"
+ && $subdir2 == "testsuite"
+ && [regexp {^gdb[.]} $subdir3] } {
+ # If we're executing a gdb test-case, skip dejagnu_unknown to prevent
+ # it from exiting and aborting the entire test run.
+ return [uplevel 1 ::tcl_unknown $args]
+ }
+
+ return [uplevel 1 ::dejagnu_unknown $args]
+}
+
# Always load compatibility stuff.
load_lib future.exp