[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.
This commit is contained in:
Tom de Vries 2020-06-17 15:40:41 +02:00
parent b25e22fd16
commit 081e778cb8
2 changed files with 34 additions and 11 deletions

View File

@ -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

View File

@ -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