From patchwork Sun Dec 13 23:53:13 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sandra Loosemore X-Patchwork-Id: 9998 Received: (qmail 64938 invoked by alias); 13 Dec 2015 23:53:49 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 64927 invoked by uid 89); 13 Dec 2015 23:53:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.8 required=5.0 tests=AWL, BAYES_50, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 13 Dec 2015 23:53:44 +0000 Received: from svr-orw-fem-05.mgc.mentorg.com ([147.34.97.43]) by relay1.mentorg.com with esmtp id 1a8GSS-0007aF-L2 from Sandra_Loosemore@mentor.com ; Sun, 13 Dec 2015 15:53:40 -0800 Received: from [IPv6:::1] (147.34.91.1) by svr-orw-fem-05.mgc.mentorg.com (147.34.97.43) with Microsoft SMTP Server id 14.3.224.2; Sun, 13 Dec 2015 15:53:40 -0800 Subject: Re: [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp To: Pedro Alves , gdb-patches References: <55FC6B86.8090700@codesourcery.com> <560AA30A.6080202@redhat.com> From: Sandra Loosemore Message-ID: <566E04E9.7010501@codesourcery.com> Date: Sun, 13 Dec 2015 16:53:13 -0700 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <560AA30A.6080202@redhat.com> 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 \\*\\) \"\\\\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 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 . +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 . +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 . +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"}