aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-06-17 15:40:41 +0200
committerTom de Vries <tdevries@suse.de>2020-06-17 15:40:41 +0200
commit081e778cb855581fe63a9b26aa582900da5d1a8b (patch)
treef0a1adee5c862eb79340abab1cb20cb9d0843e77 /gdb
parentb25e22fd1698b600310fc56f01b6005b5a3f6227 (diff)
downloadgdb-081e778cb855581fe63a9b26aa582900da5d1a8b.zip
gdb-081e778cb855581fe63a9b26aa582900da5d1a8b.tar.gz
gdb-081e778cb855581fe63a9b26aa582900da5d1a8b.tar.bz2
[gdb/testsuite] Remove dependence on tcl_unknown
In gdb_init we install a local version of ::unknown, which relies on ::tcl_unknown, which is defined by dejagnu. This proc may be moved into a namespace, or disappear altogether, as indicated by dejagnu maintainers, so we can't rely on it. Fix this by recreating tcl's version of unknown, and using that instead. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-06-17 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_tcl_unknown): New proc. (gdb_init): Use gdb_tcl_unknown for ::unknown override. Make override conditional on presence of gdb_tcl_unknown. (gdb_finish): Make override undo conditional on presence of gdb_tcl_unknown.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/testsuite/ChangeLog8
-rw-r--r--gdb/testsuite/lib/gdb.exp37
2 files changed, 34 insertions, 11 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 97fecf6..d010125 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2020-06-17 Tom de Vries <tdevries@suse.de>
+
+ * lib/gdb.exp (gdb_tcl_unknown): New proc.
+ (gdb_init): Use gdb_tcl_unknown for ::unknown override. Make override
+ conditional on presence of gdb_tcl_unknown.
+ (gdb_finish): Make override undo conditional on presence of
+ gdb_tcl_unknown.
+
2020-06-16 Tom Tromey <tom@tromey.com>
* gdb.python/tui-window.py (failwin): New function. Register it
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index f502eb1..02867fb 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -5177,6 +5177,17 @@ proc gdb_cleanup_globals {} {
}
}
+# Create gdb_tcl_unknown, a copy tcl's ::unknown, provided it's present as a
+# proc.
+set temp [interp create]
+if { [interp eval $temp "info procs ::unknown"] != "" } {
+ set old_args [interp eval $temp "info args ::unknown"]
+ set old_body [interp eval $temp "info body ::unknown"]
+ eval proc gdb_tcl_unknown {$old_args} {$old_body}
+}
+interp delete $temp
+unset temp
+
proc gdb_init { test_file_name } {
# Reset the timeout value to the default. This way, any testcase
# that changes the timeout value without resetting it cannot affect
@@ -5283,14 +5294,16 @@ proc gdb_init { test_file_name } {
gdb_setup_known_globals
- # 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]
+ if { [info procs ::gdb_tcl_unknown] != "" } {
+ # 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 } {
+ # Use tcl's unknown.
+ return [uplevel 1 ::gdb_tcl_unknown $args]
+ }
}
return $res
@@ -5302,9 +5315,11 @@ proc gdb_finish { } {
global cleanfiles
global known_globals
- # Restore dejagnu's version of proc unknown.
- rename ::unknown ""
- rename ::dejagnu_unknown ::unknown
+ if { [info procs ::gdb_tcl_unknown] != "" } {
+ # 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