diff options
-rw-r--r-- | gdb/testsuite/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/watch-bitfields.exp | 18 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/watchpoint-solib.exp | 13 | ||||
-rw-r--r-- | gdb/testsuite/gdb.reverse/sigall-reverse.exp | 15 | ||||
-rw-r--r-- | gdb/testsuite/gdb.reverse/until-precsave.exp | 21 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 66 |
6 files changed, 92 insertions, 54 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c49519f..6098a62 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2015-04-15 Pedro Alves <palves@redhat.com> + Yao Qi <yao.qi@linaro.org> + + * gdb.base/watch-bitfields.exp (test_watch_location): Increase + timeout by factor of 4. + (test_regular_watch): Likewise. + * gdb.base/watchpoint-solib.exp: Use with_timeout_factor. + * gdb.reverse/sigall-reverse.exp: Likewise. + * gdb.reverse/until-precsave.exp: Likewise. + * lib/gdb.exp (with_timeout_factor): New proc. + (gdb_expect): Move some code to ... + (get_largest_timeout): ... here. New procedure. + 2015-04-14 Luis Machado <lgustavo@codesourcery.com> * gdb.base/bp-permanent.exp (test): Reinstate correct test message. diff --git a/gdb/testsuite/gdb.base/watch-bitfields.exp b/gdb/testsuite/gdb.base/watch-bitfields.exp index 9d5293b..4f97043 100644 --- a/gdb/testsuite/gdb.base/watch-bitfields.exp +++ b/gdb/testsuite/gdb.base/watch-bitfields.exp @@ -54,7 +54,14 @@ proc test_watch_location {} { expect_watchpoint "q.e" 0 5 expect_watchpoint "q.a" 1 0 expect_watchpoint "q.e" 5 4 - gdb_continue_to_end + + # It'll execute a large amount of code with software watchpoint + # enabled, which means GDB will single stepping all the way + # through til the inferior exits. Increase the timeout by a + # factor of 4. + with_timeout_factor 4 { + gdb_continue_to_end + } } } @@ -73,7 +80,14 @@ proc test_regular_watch {} { expect_watchpoint "q.d + q.f + q.g" 3 2 expect_watchpoint "q.d + q.f + q.g" 2 1 expect_watchpoint "q.d + q.f + q.g" 1 0 - gdb_continue_to_end + + # It'll execute a large amount of code with software watchpoint + # enabled, which means GDB will single stepping all the way + # through til the inferior exits. Increase the timeout by a + # factor of 4. + with_timeout_factor 4 { + gdb_continue_to_end + } } } diff --git a/gdb/testsuite/gdb.base/watchpoint-solib.exp b/gdb/testsuite/gdb.base/watchpoint-solib.exp index 85e83f7..9475b37 100644 --- a/gdb/testsuite/gdb.base/watchpoint-solib.exp +++ b/gdb/testsuite/gdb.base/watchpoint-solib.exp @@ -75,17 +75,8 @@ 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 +with_timeout_factor 30 { + gdb_test "continue" ".*Breakpoint 2.*foo.*" "continue to foo again" } -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" diff --git a/gdb/testsuite/gdb.reverse/sigall-reverse.exp b/gdb/testsuite/gdb.reverse/sigall-reverse.exp index 69152d4..065eea7 100644 --- a/gdb/testsuite/gdb.reverse/sigall-reverse.exp +++ b/gdb/testsuite/gdb.reverse/sigall-reverse.exp @@ -251,18 +251,11 @@ gdb_test "continue" \ "get signal TERM" gdb_test "continue" "Breakpoint.*handle_TERM.*" "send signal TERM" -set savedtimeout $timeout -if { [target_info exists gdb,timeout] - && $timeout < [target_info gdb,timeout] } { - set oldtimeout [target_info gdb,timeout] -} else { - set oldtimeout $timeout +with_timeout_factor 2 { + gdb_test "continue" "\[process \[0-9\]+ .*" "continue to signal exit" \ + "The next instruction is syscall exit_group.* program...y. or n. " \ + "yes" } -set timeout [expr $oldtimeout * 2] -gdb_test "continue" "\[process \[0-9\]+ .*" "continue to signal exit" \ - "The next instruction is syscall exit_group.* program...y. or n. " \ - "yes" -set timeout $savedtimeout foreach sig [lreverse $signals] { test_one_sig_reverse $sig diff --git a/gdb/testsuite/gdb.reverse/until-precsave.exp b/gdb/testsuite/gdb.reverse/until-precsave.exp index 1684645..640839f 100644 --- a/gdb/testsuite/gdb.reverse/until-precsave.exp +++ b/gdb/testsuite/gdb.reverse/until-precsave.exp @@ -49,22 +49,17 @@ gdb_test "break $end_of_main" \ "BP at end of main" # This can take awhile. -set savedtimeout $timeout -if { [target_info exists gdb,timeout] - && $timeout < [target_info gdb,timeout] } { - set oldtimeout [target_info gdb,timeout] -} else { - set oldtimeout $timeout +with_timeout_factor 15 { + gdb_test "continue" "Breakpoint .* set breakpoint 10a here .*" "run to end of main" } -set timeout [expr $oldtimeout * 15] -gdb_test "continue" "Breakpoint .* set breakpoint 10a here .*" "run to end of main" # So can this, against gdbserver, for example. -set timeout [expr $oldtimeout * 3] -gdb_test "record save $precsave" \ - "Saved core file $precsave with execution log\." \ - "save process recfile" -set timeout $savedtimeout + +with_timeout_factor 3 { + gdb_test "record save $precsave" \ + "Saved core file $precsave with execution log\." \ + "save process recfile" +} gdb_test "kill" "" "Kill process, prepare to debug log file" \ "Kill the program being debugged\\? \\(y or n\\) " "y" diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index f1616e3..7d8720b 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1894,6 +1894,54 @@ proc with_target_charset { target_charset body } { } } +# Select the largest timeout from all the timeouts: +# - the local "timeout" variable of the scope two levels above, +# - the global "timeout" variable, +# - the board variable "gdb,timeout". + +proc get_largest_timeout {} { + upvar #0 timeout gtimeout + upvar 2 timeout timeout + + set tmt 0 + if [info exists timeout] { + set tmt $timeout + } + if { [info exists gtimeout] && $gtimeout > $tmt } { + set tmt $gtimeout + } + if { [target_info exists gdb,timeout] + && [target_info gdb,timeout] > $tmt } { + set tmt [target_info gdb,timeout] + } + if { $tmt == 0 } { + # Eeeeew. + set tmt 60 + } + + return $tmt +} + +# Run tests in BODY with timeout increased by factor of FACTOR. When +# BODY is finished, restore timeout. + +proc with_timeout_factor { factor body } { + global timeout + + set savedtimeout $timeout + + set timeout [expr [get_largest_timeout] * $factor] + set code [catch {uplevel 1 $body} result] + + set timeout $savedtimeout + if {$code == 1} { + global errorInfo errorCode + return -code $code -errorinfo $errorInfo -errorcode $errorCode $result + } else { + return -code $code $result + } +} + # Return 1 if _Complex types are supported, otherwise, return 0. gdb_caching_proc support_complex_tests { @@ -3266,26 +3314,10 @@ proc gdb_expect { args } { # A timeout argument takes precedence, otherwise of all the timeouts # select the largest. - upvar #0 timeout gtimeout - upvar timeout timeout if [info exists atimeout] { set tmt $atimeout } else { - set tmt 0 - if [info exists timeout] { - set tmt $timeout - } - if { [info exists gtimeout] && $gtimeout > $tmt } { - set tmt $gtimeout - } - if { [target_info exists gdb,timeout] - && [target_info gdb,timeout] > $tmt } { - set tmt [target_info gdb,timeout] - } - if { $tmt == 0 } { - # Eeeeew. - set tmt 60 - } + set tmt [get_largest_timeout] } global suppress_flag |