1 # Copyright
2018-2022 Free Software Foundation
, Inc.
3 # This
program is free software
; you can redistribute it and
/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation
; either version
3 of the License
, or
6 #
(at your option
) any later version.
8 # This
program is distributed in the hope that it will be useful
,
9 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License
for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this
program.
If not
, see
<http
://www.gnu.org
/licenses
/>.
16 # When caching a proc using gdb_caching_proc
, it will become less likely to
17 # be executed
, and consequently it
's going to be harder to detect that the
18 # proc is racy. OTOH, in general the proc is easy to rerun. So, run all
19 # uncached gdb_caching_procs a number of times and detect inconsistent results.
20 # The purpose of caching is to reduce runtime, so rerunning is somewhat
21 # counter-productive in that aspect, but it's better than uncached
, because the
22 # number of reruns is constant
-bounded
, and the increase in runtime is bound to
23 # this test
-case
, and could be disabled
on slow targets.
25 # Test gdb_caching_proc
NAME
26 proc test_proc
{ name } {
27 set real_name gdb_real__$
name
31 with_test_prefix initial
{
32 set first
[gdb_do_cache_wrap $real_name
]
34 lappend resultlist $first
36 # Ten repetitions was enough to trigger target_supports_scheduler_locking
,
37 # and costs about
20 seconds on an i7
-6600U.
41 for {set i
0} {$i
< $repeat
} {incr i
} {
43 set rerun
[gdb_do_cache_wrap $real_name
]
45 lappend resultlist $rerun
46 if { $rerun
!= $first
} {
55 verbose
-log "$name: $resultlist"
59 # Test gdb_caching_procs in FILE
60 proc test_file
{ file
} {
65 while { [gets $fp line
] >= 0 } {
66 if [regexp
-- "^gdb_caching_proc \[ \t\]*(\[^ \t\]*)" $line \
68 lappend procnames $procname
73 if { [llength $procnames
] == 0 } {
77 if { [file tail $file
] == "gdb.exp" } {
80 load_lib
[file tail $file
]
83 foreach procname $procnames
{
84 with_test_prefix $procname
{
86 "is_address_zero_readable" { set setup_gdb 1 }
87 "target_is_gdbserver" { set setup_gdb 1 }
88 "supports_memtag" { set setup_gdb 1 }
89 default
{set setup_gdb
0 }
104 set me
"gdb_caching_proc"
105 set src
{ int main
() { return 0; } }
106 if { ![gdb_simple_compile $me $src executable
] } {
110 # Test gdb_caching_procs in gdb
/testsuite
/lib
/*.exp
111 set files
[eval glob
-types f $srcdir
/lib
/*.exp
]
112 set files
[lsort $files
]
113 foreach file $files
{
118 remote_file build
delete $
obj