From: Yao Qi <qiyaoltc@gmail.com>
To: gdb-patches@sourceware.org
Subject: [PATCH] Increase timeout in watch-bitfields.exp for software watchpoint
Date: Tue, 14 Apr 2015 15:01:00 -0000 [thread overview]
Message-ID: <1429023644-13403-1-git-send-email-qiyaoltc@gmail.com> (raw)
From: Yao Qi <yao.qi@linaro.org>
I see the following two timeout fails on pandaboard (arm-linux target),
FAIL: gdb.base/watch-bitfields.exp: -location watch against bitfields: continue until exit (timeout)
FAIL: gdb.base/watch-bitfields.exp: regular watch against bitfields: continue until exit (timeout)
In this test, more than one watchpoint is used, so the following
watchpoint requests fall back to software watchpoint, so that GDB
will single step all the way and it is very slow.
This patch is to copy the fix from
[PATCH] GDB/testsuite: Correct gdb.base/watchpoint-solib.exp timeout tweak
https://sourceware.org/ml/gdb-patches/2014-07/msg00716.html
I find the left-over of this patch review is to factor out code into
a procedure, so I do that in this patch.
Re-run tests watch-bitfields.exp, watchpoint-solib.exp, sigall-reverse.exp,
and until-precsave.exp on pandaboard, no regression.
gdb/testsuite:
2015-04-14 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/testsuite/gdb.base/watch-bitfields.exp | 22 ++++++++++++++++++++--
gdb/testsuite/gdb.base/watchpoint-solib.exp | 13 ++-----------
gdb/testsuite/gdb.reverse/sigall-reverse.exp | 15 ++++-----------
gdb/testsuite/gdb.reverse/until-precsave.exp | 21 ++++++++-------------
gdb/testsuite/lib/gdb.exp | 26 ++++++++++++++++++++++++++
5 files changed, 60 insertions(+), 37 deletions(-)
diff --git a/gdb/testsuite/gdb.base/watch-bitfields.exp b/gdb/testsuite/gdb.base/watch-bitfields.exp
index 9d5293b..b7896bb 100644
--- a/gdb/testsuite/gdb.base/watch-bitfields.exp
+++ b/gdb/testsuite/gdb.base/watch-bitfields.exp
@@ -43,6 +43,8 @@ proc expect_watchpoint { expr old new } {
# Check that -location watchpoints against bitfields trigger properly.
proc test_watch_location {} {
+ global timeout
+
with_test_prefix "-location watch against bitfields" {
if {![runto_main]} {
return -1
@@ -54,13 +56,22 @@ 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
+ }
}
}
# Check that regular watchpoints against expressions involving
# bitfields trigger properly.
proc test_regular_watch {} {
+ global timeout
+
with_test_prefix "regular watch against bitfields" {
if {![runto_main]} {
return -1
@@ -73,7 +84,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 1448fba..bf72c53 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1919,6 +1919,32 @@ proc with_target_charset { target_charset body } {
}
}
+# 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
+ 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 * $factor]
+
+ set code [catch {uplevel 1 $body} result]
+ if {$code == 1} {
+ global errorInfo errorCode
+ return -code $code -errorinfo $errorInfo -errorcode $errorCode $result
+ } else {
+ return -code $code $result
+ }
+
+ set timeout $savedtimeout
+}
+
# Return 1 if _Complex types are supported, otherwise, return 0.
gdb_caching_proc support_complex_tests {
--
1.9.1
next reply other threads:[~2015-04-14 15:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-14 15:01 Yao Qi [this message]
2015-04-14 15:27 ` Pedro Alves
2015-04-14 16:35 ` Yao Qi
2015-04-14 17:05 ` Pedro Alves
2015-04-15 9:17 ` Yao Qi
2015-04-15 11:00 ` Pedro Alves
2015-04-15 11:48 ` Yao Qi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1429023644-13403-1-git-send-email-qiyaoltc@gmail.com \
--to=qiyaoltc@gmail.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox