aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/testsuite/ChangeLog13
-rw-r--r--gdb/testsuite/gdb.base/watch-bitfields.exp18
-rw-r--r--gdb/testsuite/gdb.base/watchpoint-solib.exp13
-rw-r--r--gdb/testsuite/gdb.reverse/sigall-reverse.exp15
-rw-r--r--gdb/testsuite/gdb.reverse/until-precsave.exp21
-rw-r--r--gdb/testsuite/lib/gdb.exp66
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