diff options
author | Tom de Vries <tdevries@suse.de> | 2020-06-17 15:40:41 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2020-06-17 15:40:41 +0200 |
commit | 081e778cb855581fe63a9b26aa582900da5d1a8b (patch) | |
tree | f0a1adee5c862eb79340abab1cb20cb9d0843e77 /gdb | |
parent | b25e22fd1698b600310fc56f01b6005b5a3f6227 (diff) | |
download | gdb-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/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 37 |
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 |