This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch, testsuite] fix problems in gdb.base/paginate-bg-execution.exp


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

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.
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"}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]