binutils-gdb/gdb/testsuite/gdb.base/watchpoint-solib.exp
Maciej W. Rozycki 33aeebcf58 GDB/testsuite: Correct gdb.base/watchpoint-solib.exp timeout tweak
Similarly to the previous changes to gdb.reverse/sigall-reverse.exp and
gdb.reverse/until-precsave.exp this corrects the timeout tweak in
gdb.base/watchpoint-solib.exp.

This test case executes a large amount of code with a software watchpoint
enabled.  This means single-stepping all the way through and takes a lot
of time, e.g. for an ARMv7 Panda board and a `-march=armv5te' multilib:

PASS: gdb.base/watchpoint-solib.exp: continue to foo again
elapsed: 714

for the same board and a `-mthumb -march=armv5te' multilib:

PASS: gdb.base/watchpoint-solib.exp: continue to foo again
elapsed: 1275

and for QEMU in the system emulation mode and a `-march=armv4t'
multilib:

PASS: gdb.base/watchpoint-solib.exp: continue to foo again
elapsed: 115

(values in seconds) -- all of which having the default timeout of 60s,
set based on the requirement of the remaining test cases (other than
gdb.reverse ones).

Here again the timeout extension to have a meaning should be calculated
by scaling rather than using an arbitrary constant, and a larger factor
of 30 will do, leaving some margin.  Hopefully for everyone or otherwise
we'll probably have to come up with a smarter solution.

OTOH the other test cases in this script do not require the extension so
they can be moved outside its umbrella so as to avoid unnecessary delays
if something goes wrong and a genuine timeout triggers.

	* gdb.base/watchpoint-solib.exp: Increase the timeout by a factor
	of 30 rather than hardcoding 120 for a slow test case.  Take the
	`gdb,timeout' target setting into account for this calculation.
	Don't extend the timeout for the test cases that don't need it.
2014-09-09 17:39:17 +01:00

92 lines
2.7 KiB
Plaintext

# Copyright 2007-2014 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# test running programs
#
if {[skip_shlib_tests]} {
return 0
}
set testfile "watchpoint-solib"
set libfile "watchpoint-solib-shr"
set libname "${libfile}.sl"
set libsrcfile ${libfile}.c
set srcfile $srcdir/$subdir/$testfile.c
set binfile [standard_output_file $testfile]
set shlibdir [standard_output_file {}]
set libsrc $srcdir/$subdir/$libfile.c
set lib_sl [standard_output_file $libname]
set lib_dlopen [shlib_target_file ${libname}]
set lib_syms [shlib_symbol_file ${libname}]
if [get_compiler_info] {
return -1
}
set lib_opts debug
set exec_opts [list debug shlib_load additional_flags=-DSHLIB_NAME=\"${lib_dlopen}\"]
if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != ""
|| [gdb_compile $srcfile $binfile executable $exec_opts] != ""} {
untested "Couldn't compile $libsrc or $srcfile."
return -1
}
# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_load_shlibs $lib_sl
runto_main
# Disable hardware watchpoints if necessary.
if [target_info exists gdb,no_hardware_watchpoints] {
gdb_test_no_output "set can-use-hw-watchpoints 0" ""
}
# Test that if we set a watchpoint on a global variable
# in a explicitly loaded shared library, and then
# re-run the application, gdb does not crash.
gdb_test_multiple "break foo" "set pending breakpoint" {
-re ".*Make breakpoint pending.*y or \\\[n\\\]. $" {
gdb_test "y" "Breakpoint.*foo.*pending." "set pending breakpoint"
}
}
gdb_test "continue" ".*Breakpoint 2.*foo.*" "continue to foo"
gdb_test "watch g" "atchpoint 3: g" "set watchpoint on g"
gdb_test "continue" ".*New value = 1.*" "continue to watchpoint hit"
rerun_to_main
set savedtimeout $timeout
if { [target_info exists gdb,timeout]
&& $timeout < [target_info gdb,timeout] } {
set oldtimeout [target_info gdb,timeout]
} else {
set oldtimeout $timeout
}
set timeout [expr $oldtimeout * 30]
gdb_test "continue" ".*Breakpoint 2.*foo.*" "continue to foo again"
set timeout $savedtimeout
gdb_test "continue" ".*New value = 1.*" "continue to watchpoint hit again"