[gdb/testsuite] Ignore pass in gdb_caching_proc
Before commit d4295de4f3
"[gdb/testsuite] Handle missing gnatmake in
gnat_runtime_has_debug_info", calling the gdb_caching_proc
gnat_runtime_has_debug_info could generate a pass because of using
gdb_compile_ada.
This has been fixed in that commit by using a factored out variant
gdb_compile_ada_1, which does not call pass.
Additionally, fix cases like this in more generic way: by ignoring pass calls
during execution of a gdb_caching_proc.
Build and reg-tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-02-19 Tom de Vries <tdevries@suse.de>
* lib/cache.exp (ignore_pass, gdb_do_cache_wrap): New proc.
(gdb_do_cache): Use gdb_do_cache_wrap.
* gdb.base/gdb-caching-proc.exp (test_proc): Use gdb_do_cache_wrap.
This commit is contained in:
parent
2c7c5554df
commit
9db2b96b07
|
@ -1,3 +1,9 @@
|
|||
2020-02-19 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* lib/cache.exp (ignore_pass, gdb_do_cache_wrap): New proc.
|
||||
(gdb_do_cache): Use gdb_do_cache_wrap.
|
||||
* gdb.base/gdb-caching-proc.exp (test_proc): Use gdb_do_cache_wrap.
|
||||
|
||||
2020-02-19 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* lib/dtrace.exp (dtrace_build_usdt_test_program): Use quiet as
|
||||
|
|
|
@ -28,7 +28,7 @@ proc test_proc { name } {
|
|||
|
||||
set resultlist [list]
|
||||
|
||||
set first [$real_name]
|
||||
set first [gdb_do_cache_wrap $real_name]
|
||||
lappend resultlist $first
|
||||
|
||||
# Ten repetitions was enough to trigger target_supports_scheduler_locking,
|
||||
|
@ -37,7 +37,7 @@ proc test_proc { name } {
|
|||
|
||||
set racy 0
|
||||
for {set i 0} {$i < $repeat} {incr i} {
|
||||
set rerun [$real_name]
|
||||
set rerun [gdb_do_cache_wrap $real_name]
|
||||
lappend resultlist $rerun
|
||||
if { $rerun != $first } {
|
||||
set racy 1
|
||||
|
|
|
@ -17,6 +17,35 @@
|
|||
# The in-memory cache.
|
||||
array set gdb_data_cache {}
|
||||
|
||||
# Print pass message msg into gdb.log
|
||||
proc ignore_pass { msg } {
|
||||
verbose -log "gdb_do_cache_wrap ignoring pass: $msg"
|
||||
}
|
||||
|
||||
# Call proc real_name and return the result, while ignoring calls to pass.
|
||||
proc gdb_do_cache_wrap {real_name} {
|
||||
if { [info procs save_pass] != "" } {
|
||||
return [uplevel 2 $real_name]
|
||||
}
|
||||
|
||||
rename pass save_pass
|
||||
rename ignore_pass pass
|
||||
|
||||
set code [catch {uplevel 2 $real_name} result]
|
||||
|
||||
rename pass ignore_pass
|
||||
rename save_pass pass
|
||||
|
||||
if {$code == 1} {
|
||||
global errorInfo errorCode
|
||||
return -code error -errorinfo $errorInfo -errorcode $errorCode $result
|
||||
} elseif {$code > 1} {
|
||||
return -code $code $result
|
||||
}
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
# A helper for gdb_caching_proc that handles the caching.
|
||||
|
||||
proc gdb_do_cache {name} {
|
||||
|
@ -46,7 +75,7 @@ proc gdb_do_cache {name} {
|
|||
}
|
||||
|
||||
set real_name gdb_real__$name
|
||||
set gdb_data_cache($cache_name) [uplevel 1 $real_name]
|
||||
set gdb_data_cache($cache_name) [gdb_do_cache_wrap $real_name]
|
||||
|
||||
if {[info exists GDB_PARALLEL]} {
|
||||
verbose "$name: returning '$gdb_data_cache($cache_name)' and writing file" 2
|
||||
|
|
Loading…
Reference in New Issue