* [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp
@ 2015-09-18 19:53 Sandra Loosemore
2015-09-29 14:41 ` Pedro Alves
0 siblings, 1 reply; 5+ messages in thread
From: Sandra Loosemore @ 2015-09-18 19:53 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 551 bytes --]
This patch addresses a couple of problems in
gdb.base/paginate-bg-execution.exp:
(1) A different "Quit" message can appear in some cases, e.g. if GDB
thinks the terminal doesn't support job control -- see the definition of
quit in utils.c. The specific situation where I tripped over this was
running GDB in a CMD.EXE shell on a remote Windows host via ssh -T.
(2) The test was sending a ^C interrupt without testing whether the
target had the nointerrupts property set.
OK to commit? (I'm not sure this one qualifies as obvious.)
-Sandra
[-- Attachment #2: paginate.log --]
[-- Type: text/x-log, Size: 192 bytes --]
2015-09-18 Sandra Loosemore <sandra@codesourcery.com>
gdb/testsuite/
* gdb.base/paginate-bg-execution.exp: Accept alternate "Quit"
message. Skip ^C test if target has nointerrupts set.
[-- Attachment #3: paginate.patch --]
[-- Type: text/x-patch, Size: 956 bytes --]
diff --git a/gdb/testsuite/gdb.base/paginate-bg-execution.exp b/gdb/testsuite/gdb.base/paginate-bg-execution.exp
index f7437ac..7b96df7 100644
--- a/gdb/testsuite/gdb.base/paginate-bg-execution.exp
+++ b/gdb/testsuite/gdb.base/paginate-bg-execution.exp
@@ -104,6 +104,11 @@ proc test_bg_execution_pagination_cancel { how } {
-re "Quit\r\n$gdb_prompt $" {
pass $test
}
+ # This variant can show up e.g. in remote testing via ssh -T,
+ # so that GDB has no terminal.
+ -re "Quit (expect signal SIGINT when the program is resumed)\r\n$gdb_prompt $" {
+ pass $test
+ }
}
gdb_test "p 1" " = 1" "GDB accepts further input"
@@ -114,5 +119,7 @@ proc test_bg_execution_pagination_cancel { how } {
}
test_bg_execution_pagination_return
-test_bg_execution_pagination_cancel "ctrl-c"
+if ![target_info exists gdb,nointerrupts] {
+ test_bg_execution_pagination_cancel "ctrl-c"
+}
test_bg_execution_pagination_cancel "quit"
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp
2015-09-18 19:53 [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp Sandra Loosemore
@ 2015-09-29 14:41 ` Pedro Alves
2015-12-13 23:53 ` Sandra Loosemore
2015-12-13 23:54 ` Sandra Loosemore
0 siblings, 2 replies; 5+ messages in thread
From: Pedro Alves @ 2015-09-29 14:41 UTC (permalink / raw)
To: Sandra Loosemore, gdb-patches
On 09/18/2015 08:52 PM, Sandra Loosemore wrote:
> This patch addresses a couple of problems in
> gdb.base/paginate-bg-execution.exp:
>
> (1) A different "Quit" message can appear in some cases, e.g. if GDB
> thinks the terminal doesn't support job control -- see the definition of
> quit in utils.c. The specific situation where I tripped over this was
> running GDB in a CMD.EXE shell on a remote Windows host via ssh -T.
Seems to me that suggesting to "expect signal SIGINT when the program
is resumed" is bogus in this case. That can happen when you ctrl-c
the terminal, because a SIGINT ends up queued in both the inferior
and gdb, but I'm not seeing why that would happen in response to
the user typing "q" on a pagination prompt. I think prompt_for_continue
should call throw_quit("Quit") directly instead of quit().
>
> (2) The test was sending a ^C interrupt without testing whether the
> target had the nointerrupts property set.
Odd that almost no other ctrl-c test checks this:
$ git grep "\\\003" testsuite/
testsuite/gdb.base/completion.exp: send_gdb "\003"
testsuite/gdb.base/completion.exp: send_gdb "\003"
testsuite/gdb.base/double-prompt-target-event-error.exp: send_gdb "\003p 1\n"
testsuite/gdb.base/interrupt.exp: send_gdb "\003"
testsuite/gdb.base/interrupt.exp: send_gdb "\003"
testsuite/gdb.base/paginate-after-ctrl-c-running.exp: send_gdb "\003"
testsuite/gdb.base/paginate-bg-execution.exp: send_gdb "\003"
testsuite/gdb.base/paginate-execution-startup.exp: send_gdb "\003"
testsuite/gdb.base/printcmds.exp: gdb_test "p ctable1\[3\]" " = 3 '\\\\003'"
testsuite/gdb.base/printcmds.exp: " = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\001\\\\002\\\\003\\\\004\\\\005\\\\006\\\\a\\\\b\"..."
testsuite/gdb.base/random-signal.exp:after 500 {send_gdb "\003"}
testsuite/gdb.base/range-stepping.exp: send_gdb "\003"
testsuite/gdb.cp/annota2.exp:send_gdb "\003"
testsuite/gdb.cp/annota3.exp:send_gdb "\003"
testsuite/gdb.gdb/selftest.exp: send_gdb "\003"
testsuite/gdb.threads/continue-pending-status.exp: send_gdb "\003"
testsuite/gdb.threads/leader-exit.exp:send_gdb "\003"
testsuite/gdb.threads/manythreads.exp: send_gdb "\003"
testsuite/gdb.threads/pthreads.exp: send_gdb "\003"
testsuite/gdb.threads/schedlock.exp: after 1000 {send_gdb "\003"}
testsuite/gdb.threads/sigthread.exp:after 500 {send_gdb "\003"}
$ git grep nointerrupts
testsuite/gdb.base/interrupt.exp:if [target_info exists gdb,nointerrupts] {
testsuite/gdb.base/interrupt.exp: verbose "Skipping interrupt.exp because of nointerrupts."
What's going on?
>
> OK to commit? (I'm not sure this one qualifies as obvious.)
I don't think it is obvious.
Thanks,
Pedro Alves
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp
2015-09-29 14:41 ` Pedro Alves
@ 2015-12-13 23:53 ` Sandra Loosemore
2015-12-14 10:52 ` Pedro Alves
2015-12-13 23:54 ` Sandra Loosemore
1 sibling, 1 reply; 5+ messages in thread
From: Sandra Loosemore @ 2015-12-13 23:53 UTC (permalink / raw)
To: Pedro Alves, gdb-patches
[-- Attachment #1: Type: text/plain, Size: 3303 bytes --]
On 09/29/2015 08:41 AM, Pedro Alves wrote:
> On 09/18/2015 08:52 PM, Sandra Loosemore wrote:
>> This patch addresses a couple of problems in
>> gdb.base/paginate-bg-execution.exp:
>>
>> (1) A different "Quit" message can appear in some cases, e.g. if GDB
>> thinks the terminal doesn't support job control -- see the definition of
>> quit in utils.c. The specific situation where I tripped over this was
>> running GDB in a CMD.EXE shell on a remote Windows host via ssh -T.
>
> Seems to me that suggesting to "expect signal SIGINT when the program
> is resumed" is bogus in this case. That can happen when you ctrl-c
> the terminal, because a SIGINT ends up queued in both the inferior
> and gdb, but I'm not seeing why that would happen in response to
> the user typing "q" on a pagination prompt. I think prompt_for_continue
> should call throw_quit("Quit") directly instead of quit().
Hmmmm. If an actual code change is required here (instead of just a
testsuite fix), I'll split this off and try to deal with it separately.
>> (2) The test was sending a ^C interrupt without testing whether the
>> target had the nointerrupts property set.
>
> Odd that almost no other ctrl-c test checks this:
>
> $ git grep "\\\003" testsuite/
>
> testsuite/gdb.base/completion.exp: send_gdb "\003"
> testsuite/gdb.base/completion.exp: send_gdb "\003"
> testsuite/gdb.base/double-prompt-target-event-error.exp: send_gdb "\003p 1\n"
> testsuite/gdb.base/interrupt.exp: send_gdb "\003"
> testsuite/gdb.base/interrupt.exp: send_gdb "\003"
> testsuite/gdb.base/paginate-after-ctrl-c-running.exp: send_gdb "\003"
> testsuite/gdb.base/paginate-bg-execution.exp: send_gdb "\003"
> testsuite/gdb.base/paginate-execution-startup.exp: send_gdb "\003"
> testsuite/gdb.base/printcmds.exp: gdb_test "p ctable1\[3\]" " = 3 '\\\\003'"
> testsuite/gdb.base/printcmds.exp: " = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\001\\\\002\\\\003\\\\004\\\\005\\\\006\\\\a\\\\b\"..."
> testsuite/gdb.base/random-signal.exp:after 500 {send_gdb "\003"}
> testsuite/gdb.base/range-stepping.exp: send_gdb "\003"
> testsuite/gdb.cp/annota2.exp:send_gdb "\003"
> testsuite/gdb.cp/annota3.exp:send_gdb "\003"
> testsuite/gdb.gdb/selftest.exp: send_gdb "\003"
> testsuite/gdb.threads/continue-pending-status.exp: send_gdb "\003"
> testsuite/gdb.threads/leader-exit.exp:send_gdb "\003"
> testsuite/gdb.threads/manythreads.exp: send_gdb "\003"
> testsuite/gdb.threads/pthreads.exp: send_gdb "\003"
> testsuite/gdb.threads/schedlock.exp: after 1000 {send_gdb "\003"}
> testsuite/gdb.threads/sigthread.exp:after 500 {send_gdb "\003"}
>
> $ git grep nointerrupts
>
> testsuite/gdb.base/interrupt.exp:if [target_info exists gdb,nointerrupts] {
> testsuite/gdb.base/interrupt.exp: verbose "Skipping interrupt.exp because of nointerrupts."
>
> What's going on?
I had an older patch that dealt with most of these that I hadn't pushed
upstream yet. :") I also found that a few of the things on your list
were already being skipped for other reasons on the target I was testing
on, and I'd missed a couple that were failing via ERROR instead of FAIL.
Here's a revised patch that should take care of everything -- OK to
commit this one?
-Sandra
[-- Attachment #2: nointerrupts.log --]
[-- Type: text/x-log, Size: 845 bytes --]
2015-12-13 Sandra Loosemore <sandra@codesourcery.com>
gdb/testsuite/
* gdb.base/completion.exp: Skip tests that interrupt GDB with
ctrl-C if nointerrupts target property is set.
* gdb.base/double-prompt-target-event-error.exp: Likewise.
* gdb.base/paginate-after-ctrl-c-running.exp: Likewise.
* gdb.base/paginate-bg-execution.exp: Likewise.
* gdb.base/paginate-execution-startup.exp: Likewise.
* gdb.base/random-signal.exp: Likewise.
* gdb.base/range-stepping.exp: Likewise.
* gdb.cp/annota2.exp: Likewise.
* gdb.cp/annota3.exp: Likewise.
* gdb.gdb/selftest.exp: Likewise.
* gdb.threads/continue-pending-status.exp: Likewise.
* gdb.threads/leader-exit.exp: Likewise.
* gdb.threads/manythreads.exp: Likewise.
* gdb.threads/pthreads.exp: Likewise.
* gdb.threads/schedlock.exp: Likewise.
* gdb.threads/sigthread.exp: Likewise.
[-- Attachment #3: nointerrupts.patch --]
[-- Type: text/x-patch, Size: 11934 bytes --]
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index f0e4dec..2aabab5 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -944,7 +944,7 @@ gdb_test_multiple "" "$test" {
gdb_test_no_output "set max-completions unlimited"
-if {![skip_tui_tests]} {
+if {![skip_tui_tests] && ![target_info exists gdb,nointerrupts]} {
set test "test completion of layout names"
send_gdb "layout\t\t\t"
gdb_test_multiple "" "$test" {
@@ -960,7 +960,7 @@ if {![skip_tui_tests]} {
}
}
}
-if {![skip_tui_tests]} {
+if {![skip_tui_tests] && ![target_info exists gdb,nointerrupts]} {
with_test_prefix "focus command" {
set test "test completion"
send_gdb "focus \t\t"
diff --git a/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp b/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp
index 6e5085f..b5ad7eb 100644
--- a/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp
+++ b/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp
@@ -13,6 +13,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping double-prompt-target-event-error.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug] == -1} {
diff --git a/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp
index d721990..aae3122 100644
--- a/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp
+++ b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp
@@ -13,6 +13,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping paginate-after-ctrl-c-running.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} {
diff --git a/gdb/testsuite/gdb.base/paginate-bg-execution.exp b/gdb/testsuite/gdb.base/paginate-bg-execution.exp
index f7437ac..f2a4d73 100644
--- a/gdb/testsuite/gdb.base/paginate-bg-execution.exp
+++ b/gdb/testsuite/gdb.base/paginate-bg-execution.exp
@@ -114,5 +114,7 @@ proc test_bg_execution_pagination_cancel { how } {
}
test_bg_execution_pagination_return
-test_bg_execution_pagination_cancel "ctrl-c"
+if ![target_info exists gdb,nointerrupts] {
+ test_bg_execution_pagination_cancel "ctrl-c"
+}
test_bg_execution_pagination_cancel "quit"
diff --git a/gdb/testsuite/gdb.base/paginate-execution-startup.exp b/gdb/testsuite/gdb.base/paginate-execution-startup.exp
index cdade32..c5d8e23 100644
--- a/gdb/testsuite/gdb.base/paginate-execution-startup.exp
+++ b/gdb/testsuite/gdb.base/paginate-execution-startup.exp
@@ -174,7 +174,9 @@ proc test_fg_execution_pagination_cancel { how } {
if {[probe_can_run_cmdline] > 0} {
test_fg_execution_pagination_return
- test_fg_execution_pagination_cancel "ctrl-c"
+ if ![target_info exists gdb,nointerrupts] {
+ test_fg_execution_pagination_cancel "ctrl-c"
+ }
test_fg_execution_pagination_cancel "quit"
}
diff --git a/gdb/testsuite/gdb.base/random-signal.exp b/gdb/testsuite/gdb.base/random-signal.exp
index 566668a..47c3549 100644
--- a/gdb/testsuite/gdb.base/random-signal.exp
+++ b/gdb/testsuite/gdb.base/random-signal.exp
@@ -18,6 +18,12 @@ if [target_info exists gdb,nosignals] {
continue
}
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping random-signal.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
diff --git a/gdb/testsuite/gdb.base/range-stepping.exp b/gdb/testsuite/gdb.base/range-stepping.exp
index 79667ba..507d6cc 100644
--- a/gdb/testsuite/gdb.base/range-stepping.exp
+++ b/gdb/testsuite/gdb.base/range-stepping.exp
@@ -172,42 +172,44 @@ with_test_prefix "loop 2" {
# Check that range stepping works well even when it is interrupted by
# ctrl-c.
-with_test_prefix "interrupt" {
- gdb_test_no_output "set debug remote 1"
-
- send_gdb "next\n"
- sleep 1
- send_gdb "\003"
-
- # GDB should send one vCont;r and receive one stop reply for
- # SIGINT:
- # --> vCont;rSTART,END (range step)
- # <-- T02 (SIGINT)
-
- set vcont_r_counter 0
-
- set test "send ctrl-c to GDB"
- gdb_test_multiple "" $test {
- -re "vCont;r\[^\r\n\]*\.\.\." {
- incr vcont_r_counter
- exp_continue
+if ![target_info exists gdb,nointerrupts] {
+ with_test_prefix "interrupt" {
+ gdb_test_no_output "set debug remote 1"
+
+ send_gdb "next\n"
+ sleep 1
+ send_gdb "\003"
+
+ # GDB should send one vCont;r and receive one stop reply for
+ # SIGINT:
+ # --> vCont;rSTART,END (range step)
+ # <-- T02 (SIGINT)
+
+ set vcont_r_counter 0
+
+ set test "send ctrl-c to GDB"
+ gdb_test_multiple "" $test {
+ -re "vCont;r\[^\r\n\]*\.\.\." {
+ incr vcont_r_counter
+ exp_continue
+ }
+ -re "Program received signal SIGINT.*$gdb_prompt $" {
+ pass $test
+ }
}
- -re "Program received signal SIGINT.*$gdb_prompt $" {
- pass $test
+ gdb_test_no_output "set debug remote 0"
+
+ # Check the number of 'vCont;r' packets.
+ if { $vcont_r_counter == 1 } {
+ pass "${test}: 1 vCont;r"
+ } else {
+ fail "${test}: 1 vCont;r"
}
- }
- gdb_test_no_output "set debug remote 0"
- # Check the number of 'vCont;r' packets.
- if { $vcont_r_counter == 1 } {
- pass "${test}: 1 vCont;r"
- } else {
- fail "${test}: 1 vCont;r"
+ # Break the loop earlier and continue range stepping.
+ gdb_test "set variable c = 0"
+ exec_cmd_expect_vCont_count "next" 1
}
-
- # Break the loop earlier and continue range stepping.
- gdb_test "set variable c = 0"
- exec_cmd_expect_vCont_count "next" 1
}
# Check that range stepping doesn't break software watchpoints. With
diff --git a/gdb/testsuite/gdb.cp/annota2.exp b/gdb/testsuite/gdb.cp/annota2.exp
index 52ef3c4..953a724 100644
--- a/gdb/testsuite/gdb.cp/annota2.exp
+++ b/gdb/testsuite/gdb.cp/annota2.exp
@@ -262,12 +262,14 @@ gdb_test_multiple "next" "watch triggered on a.x" {
# test:
# annotate-quit
#
-send_gdb "\003"
-gdb_expect {
- -re "\r\n\032\032error-begin\r\nQuit\r\n\r\n\032\032quit\r\n$gdb_prompt$" \
+if ![target_info exists gdb,nointerrupts] {
+ send_gdb "\003"
+ gdb_expect {
+ -re "\r\n\032\032error-begin\r\nQuit\r\n\r\n\032\032quit\r\n$gdb_prompt$" \
{ pass "annotate-quit" }
- -re ".*$gdb_prompt$" { fail "annotate-quit" }
- timeout { fail "annotate-quit (timeout)" }
+ -re ".*$gdb_prompt$" { fail "annotate-quit" }
+ timeout { fail "annotate-quit (timeout)" }
+ }
}
#
diff --git a/gdb/testsuite/gdb.cp/annota3.exp b/gdb/testsuite/gdb.cp/annota3.exp
index e62bb29..055ed5c 100644
--- a/gdb/testsuite/gdb.cp/annota3.exp
+++ b/gdb/testsuite/gdb.cp/annota3.exp
@@ -177,11 +177,13 @@ gdb_test_multiple "next" "watch triggered on a.x" {
# test:
# annotate-quit
#
-send_gdb "\003"
-gdb_expect_list "annotate-quit" "$gdb_prompt$" {
- "\r\n\032\032error-begin\r\n"
- "Quit\r\n"
- "\r\n\032\032quit\r\n"
+if ![target_info exists gdb,nointerrupts] {
+ send_gdb "\003"
+ gdb_expect_list "annotate-quit" "$gdb_prompt$" {
+ "\r\n\032\032error-begin\r\n"
+ "Quit\r\n"
+ "\r\n\032\032quit\r\n"
+ }
}
#
diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp
index 8b1298f..e8644fb 100644
--- a/gdb/testsuite/gdb.gdb/selftest.exp
+++ b/gdb/testsuite/gdb.gdb/selftest.exp
@@ -433,17 +433,19 @@ proc test_with_self { executable } {
}
# kill the xgdb process
- set description "send ^C to child process"
- send_gdb "\003"
- gdb_expect {
- -re "Program received signal SIGINT.*$gdb_prompt $" {
- pass "$description"
- }
- -re ".*$gdb_prompt $" {
- fail "$description"
- }
- timeout {
- fail "$description (timeout)"
+ if ![target_info exists gdb,nointerrupts] {
+ set description "send ^C to child process"
+ send_gdb "\003"
+ gdb_expect {
+ -re "Program received signal SIGINT.*$gdb_prompt $" {
+ pass "$description"
+ }
+ -re ".*$gdb_prompt $" {
+ fail "$description"
+ }
+ timeout {
+ fail "$description (timeout)"
+ }
}
}
diff --git a/gdb/testsuite/gdb.threads/continue-pending-status.exp b/gdb/testsuite/gdb.threads/continue-pending-status.exp
index 1f170f7..0833065 100644
--- a/gdb/testsuite/gdb.threads/continue-pending-status.exp
+++ b/gdb/testsuite/gdb.threads/continue-pending-status.exp
@@ -17,6 +17,11 @@
# thread, then switching to a thread that has a status pending and
# continuing.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping continue-pending-status.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if [prepare_for_testing "failed to prepare" $testfile $srcfile {debug pthreads}] {
diff --git a/gdb/testsuite/gdb.threads/leader-exit.exp b/gdb/testsuite/gdb.threads/leader-exit.exp
index 01e3258..7de91a9 100644
--- a/gdb/testsuite/gdb.threads/leader-exit.exp
+++ b/gdb/testsuite/gdb.threads/leader-exit.exp
@@ -13,6 +13,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping leader-exit.exp because of nointerrupts."
+ return
+}
+
# Exit of the thread group leader should not break GDB.
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/manythreads.exp b/gdb/testsuite/gdb.threads/manythreads.exp
index 2a55f86..b6a1c21 100644
--- a/gdb/testsuite/gdb.threads/manythreads.exp
+++ b/gdb/testsuite/gdb.threads/manythreads.exp
@@ -16,6 +16,11 @@
# This file was written by Jeff Johnston. (jjohnstn@redhat.com)
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping manythreads.exp because of nointerrupts."
+ return
+}
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/pthreads.exp b/gdb/testsuite/gdb.threads/pthreads.exp
index 80cae2c..b456641 100644
--- a/gdb/testsuite/gdb.threads/pthreads.exp
+++ b/gdb/testsuite/gdb.threads/pthreads.exp
@@ -15,6 +15,11 @@
# This file was written by Fred Fish. (fnf@cygnus.com)
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping pthreads.exp because of nointerrupts."
+ return
+}
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/schedlock.exp b/gdb/testsuite/gdb.threads/schedlock.exp
index 54e847e..65b13ff 100644
--- a/gdb/testsuite/gdb.threads/schedlock.exp
+++ b/gdb/testsuite/gdb.threads/schedlock.exp
@@ -18,6 +18,12 @@
#
# This test covers the various forms of "set scheduler-locking".
+# This test requires sending ^C to interrupt the running target.
+
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping schedlock.exp because of nointerrupts."
+ return
+}
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/sigthread.exp b/gdb/testsuite/gdb.threads/sigthread.exp
index ea3a62d..cc1634a 100644
--- a/gdb/testsuite/gdb.threads/sigthread.exp
+++ b/gdb/testsuite/gdb.threads/sigthread.exp
@@ -37,6 +37,12 @@ gdb_test_multiple "continue" "continue" {
}
}
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping sigthread.exp because of nointerrupts."
+ return
+}
+
# For this to work we must be sure to consume the "Continuing."
# message first, or GDB's signal handler may not be in place.
after 500 {send_gdb "\003"}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp
2015-09-29 14:41 ` Pedro Alves
2015-12-13 23:53 ` Sandra Loosemore
@ 2015-12-13 23:54 ` Sandra Loosemore
1 sibling, 0 replies; 5+ messages in thread
From: Sandra Loosemore @ 2015-12-13 23:54 UTC (permalink / raw)
To: Pedro Alves, gdb-patches
[-- Attachment #1: Type: text/plain, Size: 3303 bytes --]
On 09/29/2015 08:41 AM, Pedro Alves wrote:
> On 09/18/2015 08:52 PM, Sandra Loosemore wrote:
>> This patch addresses a couple of problems in
>> gdb.base/paginate-bg-execution.exp:
>>
>> (1) A different "Quit" message can appear in some cases, e.g. if GDB
>> thinks the terminal doesn't support job control -- see the definition of
>> quit in utils.c. The specific situation where I tripped over this was
>> running GDB in a CMD.EXE shell on a remote Windows host via ssh -T.
>
> Seems to me that suggesting to "expect signal SIGINT when the program
> is resumed" is bogus in this case. That can happen when you ctrl-c
> the terminal, because a SIGINT ends up queued in both the inferior
> and gdb, but I'm not seeing why that would happen in response to
> the user typing "q" on a pagination prompt. I think prompt_for_continue
> should call throw_quit("Quit") directly instead of quit().
Hmmmm. If an actual code change is required here (instead of just a
testsuite fix), I'll split this off and try to deal with it separately.
>> (2) The test was sending a ^C interrupt without testing whether the
>> target had the nointerrupts property set.
>
> Odd that almost no other ctrl-c test checks this:
>
> $ git grep "\\\003" testsuite/
>
> testsuite/gdb.base/completion.exp: send_gdb "\003"
> testsuite/gdb.base/completion.exp: send_gdb "\003"
> testsuite/gdb.base/double-prompt-target-event-error.exp: send_gdb "\003p 1\n"
> testsuite/gdb.base/interrupt.exp: send_gdb "\003"
> testsuite/gdb.base/interrupt.exp: send_gdb "\003"
> testsuite/gdb.base/paginate-after-ctrl-c-running.exp: send_gdb "\003"
> testsuite/gdb.base/paginate-bg-execution.exp: send_gdb "\003"
> testsuite/gdb.base/paginate-execution-startup.exp: send_gdb "\003"
> testsuite/gdb.base/printcmds.exp: gdb_test "p ctable1\[3\]" " = 3 '\\\\003'"
> testsuite/gdb.base/printcmds.exp: " = \\(unsigned char \\*\\) <ctable1\\+$decimal> \"\\\\001\\\\002\\\\003\\\\004\\\\005\\\\006\\\\a\\\\b\"..."
> testsuite/gdb.base/random-signal.exp:after 500 {send_gdb "\003"}
> testsuite/gdb.base/range-stepping.exp: send_gdb "\003"
> testsuite/gdb.cp/annota2.exp:send_gdb "\003"
> testsuite/gdb.cp/annota3.exp:send_gdb "\003"
> testsuite/gdb.gdb/selftest.exp: send_gdb "\003"
> testsuite/gdb.threads/continue-pending-status.exp: send_gdb "\003"
> testsuite/gdb.threads/leader-exit.exp:send_gdb "\003"
> testsuite/gdb.threads/manythreads.exp: send_gdb "\003"
> testsuite/gdb.threads/pthreads.exp: send_gdb "\003"
> testsuite/gdb.threads/schedlock.exp: after 1000 {send_gdb "\003"}
> testsuite/gdb.threads/sigthread.exp:after 500 {send_gdb "\003"}
>
> $ git grep nointerrupts
>
> testsuite/gdb.base/interrupt.exp:if [target_info exists gdb,nointerrupts] {
> testsuite/gdb.base/interrupt.exp: verbose "Skipping interrupt.exp because of nointerrupts."
>
> What's going on?
I had an older patch that dealt with most of these that I hadn't pushed
upstream yet. :") I also found that a few of the things on your list
were already being skipped for other reasons on the target I was testing
on, and I'd missed a couple that were failing via ERROR instead of FAIL.
Here's a revised patch that should take care of everything -- OK to
commit this one?
-Sandra
[-- Attachment #2: nointerrupts.log --]
[-- Type: text/x-log, Size: 845 bytes --]
2015-12-13 Sandra Loosemore <sandra@codesourcery.com>
gdb/testsuite/
* gdb.base/completion.exp: Skip tests that interrupt GDB with
ctrl-C if nointerrupts target property is set.
* gdb.base/double-prompt-target-event-error.exp: Likewise.
* gdb.base/paginate-after-ctrl-c-running.exp: Likewise.
* gdb.base/paginate-bg-execution.exp: Likewise.
* gdb.base/paginate-execution-startup.exp: Likewise.
* gdb.base/random-signal.exp: Likewise.
* gdb.base/range-stepping.exp: Likewise.
* gdb.cp/annota2.exp: Likewise.
* gdb.cp/annota3.exp: Likewise.
* gdb.gdb/selftest.exp: Likewise.
* gdb.threads/continue-pending-status.exp: Likewise.
* gdb.threads/leader-exit.exp: Likewise.
* gdb.threads/manythreads.exp: Likewise.
* gdb.threads/pthreads.exp: Likewise.
* gdb.threads/schedlock.exp: Likewise.
* gdb.threads/sigthread.exp: Likewise.
[-- Attachment #3: nointerrupts.patch --]
[-- Type: text/x-patch, Size: 11934 bytes --]
diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp
index f0e4dec..2aabab5 100644
--- a/gdb/testsuite/gdb.base/completion.exp
+++ b/gdb/testsuite/gdb.base/completion.exp
@@ -944,7 +944,7 @@ gdb_test_multiple "" "$test" {
gdb_test_no_output "set max-completions unlimited"
-if {![skip_tui_tests]} {
+if {![skip_tui_tests] && ![target_info exists gdb,nointerrupts]} {
set test "test completion of layout names"
send_gdb "layout\t\t\t"
gdb_test_multiple "" "$test" {
@@ -960,7 +960,7 @@ if {![skip_tui_tests]} {
}
}
}
-if {![skip_tui_tests]} {
+if {![skip_tui_tests] && ![target_info exists gdb,nointerrupts]} {
with_test_prefix "focus command" {
set test "test completion"
send_gdb "focus \t\t"
diff --git a/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp b/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp
index 6e5085f..b5ad7eb 100644
--- a/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp
+++ b/gdb/testsuite/gdb.base/double-prompt-target-event-error.exp
@@ -13,6 +13,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping double-prompt-target-event-error.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug] == -1} {
diff --git a/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp
index d721990..aae3122 100644
--- a/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp
+++ b/gdb/testsuite/gdb.base/paginate-after-ctrl-c-running.exp
@@ -13,6 +13,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping paginate-after-ctrl-c-running.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} {
diff --git a/gdb/testsuite/gdb.base/paginate-bg-execution.exp b/gdb/testsuite/gdb.base/paginate-bg-execution.exp
index f7437ac..f2a4d73 100644
--- a/gdb/testsuite/gdb.base/paginate-bg-execution.exp
+++ b/gdb/testsuite/gdb.base/paginate-bg-execution.exp
@@ -114,5 +114,7 @@ proc test_bg_execution_pagination_cancel { how } {
}
test_bg_execution_pagination_return
-test_bg_execution_pagination_cancel "ctrl-c"
+if ![target_info exists gdb,nointerrupts] {
+ test_bg_execution_pagination_cancel "ctrl-c"
+}
test_bg_execution_pagination_cancel "quit"
diff --git a/gdb/testsuite/gdb.base/paginate-execution-startup.exp b/gdb/testsuite/gdb.base/paginate-execution-startup.exp
index cdade32..c5d8e23 100644
--- a/gdb/testsuite/gdb.base/paginate-execution-startup.exp
+++ b/gdb/testsuite/gdb.base/paginate-execution-startup.exp
@@ -174,7 +174,9 @@ proc test_fg_execution_pagination_cancel { how } {
if {[probe_can_run_cmdline] > 0} {
test_fg_execution_pagination_return
- test_fg_execution_pagination_cancel "ctrl-c"
+ if ![target_info exists gdb,nointerrupts] {
+ test_fg_execution_pagination_cancel "ctrl-c"
+ }
test_fg_execution_pagination_cancel "quit"
}
diff --git a/gdb/testsuite/gdb.base/random-signal.exp b/gdb/testsuite/gdb.base/random-signal.exp
index 566668a..47c3549 100644
--- a/gdb/testsuite/gdb.base/random-signal.exp
+++ b/gdb/testsuite/gdb.base/random-signal.exp
@@ -18,6 +18,12 @@ if [target_info exists gdb,nosignals] {
continue
}
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping random-signal.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
diff --git a/gdb/testsuite/gdb.base/range-stepping.exp b/gdb/testsuite/gdb.base/range-stepping.exp
index 79667ba..507d6cc 100644
--- a/gdb/testsuite/gdb.base/range-stepping.exp
+++ b/gdb/testsuite/gdb.base/range-stepping.exp
@@ -172,42 +172,44 @@ with_test_prefix "loop 2" {
# Check that range stepping works well even when it is interrupted by
# ctrl-c.
-with_test_prefix "interrupt" {
- gdb_test_no_output "set debug remote 1"
-
- send_gdb "next\n"
- sleep 1
- send_gdb "\003"
-
- # GDB should send one vCont;r and receive one stop reply for
- # SIGINT:
- # --> vCont;rSTART,END (range step)
- # <-- T02 (SIGINT)
-
- set vcont_r_counter 0
-
- set test "send ctrl-c to GDB"
- gdb_test_multiple "" $test {
- -re "vCont;r\[^\r\n\]*\.\.\." {
- incr vcont_r_counter
- exp_continue
+if ![target_info exists gdb,nointerrupts] {
+ with_test_prefix "interrupt" {
+ gdb_test_no_output "set debug remote 1"
+
+ send_gdb "next\n"
+ sleep 1
+ send_gdb "\003"
+
+ # GDB should send one vCont;r and receive one stop reply for
+ # SIGINT:
+ # --> vCont;rSTART,END (range step)
+ # <-- T02 (SIGINT)
+
+ set vcont_r_counter 0
+
+ set test "send ctrl-c to GDB"
+ gdb_test_multiple "" $test {
+ -re "vCont;r\[^\r\n\]*\.\.\." {
+ incr vcont_r_counter
+ exp_continue
+ }
+ -re "Program received signal SIGINT.*$gdb_prompt $" {
+ pass $test
+ }
}
- -re "Program received signal SIGINT.*$gdb_prompt $" {
- pass $test
+ gdb_test_no_output "set debug remote 0"
+
+ # Check the number of 'vCont;r' packets.
+ if { $vcont_r_counter == 1 } {
+ pass "${test}: 1 vCont;r"
+ } else {
+ fail "${test}: 1 vCont;r"
}
- }
- gdb_test_no_output "set debug remote 0"
- # Check the number of 'vCont;r' packets.
- if { $vcont_r_counter == 1 } {
- pass "${test}: 1 vCont;r"
- } else {
- fail "${test}: 1 vCont;r"
+ # Break the loop earlier and continue range stepping.
+ gdb_test "set variable c = 0"
+ exec_cmd_expect_vCont_count "next" 1
}
-
- # Break the loop earlier and continue range stepping.
- gdb_test "set variable c = 0"
- exec_cmd_expect_vCont_count "next" 1
}
# Check that range stepping doesn't break software watchpoints. With
diff --git a/gdb/testsuite/gdb.cp/annota2.exp b/gdb/testsuite/gdb.cp/annota2.exp
index 52ef3c4..953a724 100644
--- a/gdb/testsuite/gdb.cp/annota2.exp
+++ b/gdb/testsuite/gdb.cp/annota2.exp
@@ -262,12 +262,14 @@ gdb_test_multiple "next" "watch triggered on a.x" {
# test:
# annotate-quit
#
-send_gdb "\003"
-gdb_expect {
- -re "\r\n\032\032error-begin\r\nQuit\r\n\r\n\032\032quit\r\n$gdb_prompt$" \
+if ![target_info exists gdb,nointerrupts] {
+ send_gdb "\003"
+ gdb_expect {
+ -re "\r\n\032\032error-begin\r\nQuit\r\n\r\n\032\032quit\r\n$gdb_prompt$" \
{ pass "annotate-quit" }
- -re ".*$gdb_prompt$" { fail "annotate-quit" }
- timeout { fail "annotate-quit (timeout)" }
+ -re ".*$gdb_prompt$" { fail "annotate-quit" }
+ timeout { fail "annotate-quit (timeout)" }
+ }
}
#
diff --git a/gdb/testsuite/gdb.cp/annota3.exp b/gdb/testsuite/gdb.cp/annota3.exp
index e62bb29..055ed5c 100644
--- a/gdb/testsuite/gdb.cp/annota3.exp
+++ b/gdb/testsuite/gdb.cp/annota3.exp
@@ -177,11 +177,13 @@ gdb_test_multiple "next" "watch triggered on a.x" {
# test:
# annotate-quit
#
-send_gdb "\003"
-gdb_expect_list "annotate-quit" "$gdb_prompt$" {
- "\r\n\032\032error-begin\r\n"
- "Quit\r\n"
- "\r\n\032\032quit\r\n"
+if ![target_info exists gdb,nointerrupts] {
+ send_gdb "\003"
+ gdb_expect_list "annotate-quit" "$gdb_prompt$" {
+ "\r\n\032\032error-begin\r\n"
+ "Quit\r\n"
+ "\r\n\032\032quit\r\n"
+ }
}
#
diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp
index 8b1298f..e8644fb 100644
--- a/gdb/testsuite/gdb.gdb/selftest.exp
+++ b/gdb/testsuite/gdb.gdb/selftest.exp
@@ -433,17 +433,19 @@ proc test_with_self { executable } {
}
# kill the xgdb process
- set description "send ^C to child process"
- send_gdb "\003"
- gdb_expect {
- -re "Program received signal SIGINT.*$gdb_prompt $" {
- pass "$description"
- }
- -re ".*$gdb_prompt $" {
- fail "$description"
- }
- timeout {
- fail "$description (timeout)"
+ if ![target_info exists gdb,nointerrupts] {
+ set description "send ^C to child process"
+ send_gdb "\003"
+ gdb_expect {
+ -re "Program received signal SIGINT.*$gdb_prompt $" {
+ pass "$description"
+ }
+ -re ".*$gdb_prompt $" {
+ fail "$description"
+ }
+ timeout {
+ fail "$description (timeout)"
+ }
}
}
diff --git a/gdb/testsuite/gdb.threads/continue-pending-status.exp b/gdb/testsuite/gdb.threads/continue-pending-status.exp
index 1f170f7..0833065 100644
--- a/gdb/testsuite/gdb.threads/continue-pending-status.exp
+++ b/gdb/testsuite/gdb.threads/continue-pending-status.exp
@@ -17,6 +17,11 @@
# thread, then switching to a thread that has a status pending and
# continuing.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping continue-pending-status.exp because of nointerrupts."
+ return
+}
+
standard_testfile
if [prepare_for_testing "failed to prepare" $testfile $srcfile {debug pthreads}] {
diff --git a/gdb/testsuite/gdb.threads/leader-exit.exp b/gdb/testsuite/gdb.threads/leader-exit.exp
index 01e3258..7de91a9 100644
--- a/gdb/testsuite/gdb.threads/leader-exit.exp
+++ b/gdb/testsuite/gdb.threads/leader-exit.exp
@@ -13,6 +13,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping leader-exit.exp because of nointerrupts."
+ return
+}
+
# Exit of the thread group leader should not break GDB.
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/manythreads.exp b/gdb/testsuite/gdb.threads/manythreads.exp
index 2a55f86..b6a1c21 100644
--- a/gdb/testsuite/gdb.threads/manythreads.exp
+++ b/gdb/testsuite/gdb.threads/manythreads.exp
@@ -16,6 +16,11 @@
# This file was written by Jeff Johnston. (jjohnstn@redhat.com)
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping manythreads.exp because of nointerrupts."
+ return
+}
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/pthreads.exp b/gdb/testsuite/gdb.threads/pthreads.exp
index 80cae2c..b456641 100644
--- a/gdb/testsuite/gdb.threads/pthreads.exp
+++ b/gdb/testsuite/gdb.threads/pthreads.exp
@@ -15,6 +15,11 @@
# This file was written by Fred Fish. (fnf@cygnus.com)
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping pthreads.exp because of nointerrupts."
+ return
+}
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/schedlock.exp b/gdb/testsuite/gdb.threads/schedlock.exp
index 54e847e..65b13ff 100644
--- a/gdb/testsuite/gdb.threads/schedlock.exp
+++ b/gdb/testsuite/gdb.threads/schedlock.exp
@@ -18,6 +18,12 @@
#
# This test covers the various forms of "set scheduler-locking".
+# This test requires sending ^C to interrupt the running target.
+
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping schedlock.exp because of nointerrupts."
+ return
+}
standard_testfile
diff --git a/gdb/testsuite/gdb.threads/sigthread.exp b/gdb/testsuite/gdb.threads/sigthread.exp
index ea3a62d..cc1634a 100644
--- a/gdb/testsuite/gdb.threads/sigthread.exp
+++ b/gdb/testsuite/gdb.threads/sigthread.exp
@@ -37,6 +37,12 @@ gdb_test_multiple "continue" "continue" {
}
}
+# This test requires sending ^C to interrupt the running target.
+if [target_info exists gdb,nointerrupts] {
+ verbose "Skipping sigthread.exp because of nointerrupts."
+ return
+}
+
# For this to work we must be sure to consume the "Continuing."
# message first, or GDB's signal handler may not be in place.
after 500 {send_gdb "\003"}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp
2015-12-13 23:53 ` Sandra Loosemore
@ 2015-12-14 10:52 ` Pedro Alves
0 siblings, 0 replies; 5+ messages in thread
From: Pedro Alves @ 2015-12-14 10:52 UTC (permalink / raw)
To: Sandra Loosemore, gdb-patches
On 12/13/2015 11:53 PM, Sandra Loosemore wrote:
> Hmmmm. If an actual code change is required here (instead of just a
> testsuite fix), I'll split this off and try to deal with it separately.
Thanks. I do think a code change is required here. It should
be a simple one, I believe.
> I had an older patch that dealt with most of these that I hadn't pushed
> upstream yet. :") I also found that a few of the things on your list
> were already being skipped for other reasons on the target I was testing
> on, and I'd missed a couple that were failing via ERROR instead of FAIL.
> Here's a revised patch that should take care of everything -- OK to
> commit this one?
OK.
Thanks,
Pedro Alves
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-12-14 10:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-18 19:53 [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp Sandra Loosemore
2015-09-29 14:41 ` Pedro Alves
2015-12-13 23:53 ` Sandra Loosemore
2015-12-14 10:52 ` Pedro Alves
2015-12-13 23:54 ` Sandra Loosemore
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox