Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Enable non-stop mode MI tests against remote targets.
@ 2009-03-26  1:03 Pedro Alves
  2009-03-26  4:25 ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2009-03-26  1:03 UTC (permalink / raw)
  To: gdb-patches; +Cc: Vladimir Prus

With this patch, the MI non-stop mode tests pass cleanly against
gdbserver once the gdbserver non-stop mode patch is applied:

 http://sourceware.org/ml/gdb-patches/2009-03/msg00582.html

The tests currently assume a native GDB.  They use -exec-run
directly.  I've changed them to use mi_run_to_main, which
works nicelly.  To make the tests fails fail gracefully when
the remote side doesn't support non-stop mode, I've made
mi_run_to_main and its callees propagate an error return up,
similarly to CLI's runto_main.  This means that this patch can go
in before the gdbserver bits go in.  Most other MI tests could be
adjusted to do the same "if { [mi_run_to_main] < 0 } { BAIL }"
check, which avoids cascasted FAILs and timeouts.

Vladimir, do you think this looks OK?

-- 
Pedro Alves

2009-03-26  Pedro Alves  <pedro@codesourcery.com>

	* gdb.mi/mi-nonstop.exp: Don't check isnative.  Use
	mi_run_to_main.  Skip thread exit test on remote targets.
	* gdb.mi/mi-nsintrall.exp: Don't check isnative.  Use
	mi_run_to_main.
	* gdb.mi/mi-nsmoribund.exp: Don't check isnative.  Use
	mi_run_to_main.
	* lib/mi-support.exp (mi_gdb_target_cmd): Remove trailing anchor
	when expecting ^connected.  Detect when the target doesn't support
	non-stop mode.
	(mi_run_cmd): Return -1 on error, 0 on success.
	(mi_runto_helper): Don't expect a stop if mi_run_cmd failed.
	(mi_runto): Return mi_runto_helper's result explicitly.

---
 gdb/testsuite/gdb.mi/mi-nonstop.exp    |   73 +++++++++++----------------------
 gdb/testsuite/gdb.mi/mi-nsintrall.exp  |   36 +---------------
 gdb/testsuite/gdb.mi/mi-nsmoribund.exp |   36 +---------------
 gdb/testsuite/lib/mi-support.exp       |   24 +++++++---
 4 files changed, 47 insertions(+), 122 deletions(-)

Index: src/gdb/testsuite/gdb.mi/mi-nonstop.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.mi/mi-nonstop.exp	2009-03-24 18:29:16.000000000 +0000
+++ src/gdb/testsuite/gdb.mi/mi-nonstop.exp	2009-03-25 04:23:57.000000000 +0000
@@ -14,11 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This only works with native configurations
-if {![isnative]} {
-  return
-}
-
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
@@ -46,9 +41,9 @@ set supported 0
 send_gdb "-gdb-show non-stop\n"
 gdb_expect {
     -re ".*\\^done,value=\"off\",supported=\"(\[^\"\]+)\"\r\n$mi_gdb_prompt$" {
-        if { $expect_out(1,string) == "1" } {
-            set supported 1
-        }
+	if { $expect_out(1,string) == "1" } {
+	    set supported 1
+	}
     }
     -re ".$mi_gdb_prompt$" {
     }
@@ -58,34 +53,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set target-async 1" ".*"
 detect_async
 
-mi_gdb_test "200-break-insert -t main" ".*"
-
-set created "=thread-created,id=\"$decimal\"\r\n"
-set running "\\*running,thread-id=\"$decimal\"\r\n"
-
-set notifs "($created)*($running)*($library_loaded_re)*"
-
-# Note: presently, we skip this test on non-native targets,
-# so 'run' is OK.  As soon as we start to run this on remote
-# target, the logic from mi_run_cmd will have to be refactored.
-send_gdb "-exec-run\n"
-gdb_expect {
-    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
-    }
-    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
-        verbose -log "Non-stop mode not supported, skipping all tests"
-        return
-    }
-    -re "\r\n$mi_gdb_prompt" {
-        perror "Cannot start target (unknown output after running)"
-        return -1
-    }
-    timeout {
-        perror "Cannot start target (timeout)"
-        return -1
-    }
+if { [mi_run_to_main] < 0 } {
+    perror "mi-nonstop.exp tests suppressed"
+    continue
 }
-mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" { "" "disp=\"del\"" } "run to main"
 
 mi_create_breakpoint break_at_me 2 keep break_at_me .* .* .* "breakpoint at marker"
 
@@ -114,13 +85,13 @@ mi_varobj_update * {I_W1 I_W0} "update v
 mi_check_varobj_value I_W0 1 "check varobj, w0, 1"
 mi_check_varobj_value I_W1 1 "check varobj, w1, 1"
 
-send_gdb "-exec-interrupt --thread 1\n" 
+send_gdb "-exec-interrupt --thread 1\n"
 gdb_expect {
     -re "\\^done\r\n$mi_gdb_prompt\\*stopped\[^\r\n\]+\r\n$" {
-        pass "interrupted"
+	pass "interrupted"
     }
     timeout {
-        fail "interrupted (timeout)"
+	fail "interrupted (timeout)"
     }
 }
 # The interrupt command sends SIGINT to the target, and therefore the
@@ -132,10 +103,10 @@ mi_check_thread_states {"stopped" "stopp
 send_gdb "-exec-continue --all\n"
 gdb_expect {
     -re ".*\\*running,thread-id=\"3\"\r\n\\*running,thread-id=\"2\"\r\n\\*running,thread-id=\"1\"\r\n$mi_gdb_prompt" {
-        pass "resume all"
+	pass "resume all"
     }
     timeout {
-        fail "resume all (timeout)"
+	fail "resume all (timeout)"
     }
 }
 
@@ -172,12 +143,20 @@ mi_gdb_test "-stack-list-frames --thread
 mi_gdb_test "-thread-select 2" "\\^done.*" "select first worker thread"
 # Since thread 2 is running, we need to set variable via another thread.
 mi_gdb_test "-gdb-set --thread 3 variable exit_first_thread=1" ".*\\^done" "ask the second thread to exit"
-gdb_expect {
-    -re ".*=thread-exited,id=\"2\",group-id=\"\[0-9\]+\"\r\n$" {
-        pass "wait for thread exit"
-    }
-    timeout {
-        fail "wait for thread exit (timeout)"
+
+set test "wait for thread exit"
+if { [is_remote target] } {
+    # The remote protocol doesn't have support for thread exit
+    # notifications.
+    unsupported $test
+} else {
+    gdb_expect {
+	-re ".*=thread-exited,id=\"2\",group-id=\"\[0-9\]+\"\r\n$" {
+	    pass $test
+	}
+	timeout {
+	    fail "$test (timeout)"
+	}
     }
 }
 
@@ -186,6 +165,4 @@ mi_gdb_test "-stack-list-frames --thread
     "\\^done,stack=\\\[frame={level=\"0\",addr=\".*\",func=\"break_at_me\".*" \
     "stacktrace of stopped thread"
 
-    
 mi_gdb_exit
-
Index: src/gdb/testsuite/gdb.mi/mi-nsintrall.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.mi/mi-nsintrall.exp	2009-03-24 18:29:16.000000000 +0000
+++ src/gdb/testsuite/gdb.mi/mi-nsintrall.exp	2009-03-24 20:18:38.000000000 +0000
@@ -13,11 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This only works with native configurations
-if {![isnative]} {
-  return
-}
-
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
@@ -57,35 +52,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set target-async 1" ".*"
 detect_async
 
-mi_gdb_test "200-break-insert -t main" ".*"
-
-set created "=thread-created,id=\"$decimal\"\r\n"
-set running "\\*running,thread-id=\"$decimal\"\r\n"
-
-set notifs "($created)*($running)*($library_loaded_re)*"
-
-# Note: presently, we skip this test on non-native targets,
-# so 'run' is OK.  As soon as we start to run this on remote
-# target, the logic from mi_run_cmd will have to be refactored.
-send_gdb "-exec-run\n"
-gdb_expect {
-    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
-    }
-    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
-	verbose -log "Non-stop mode not supported, skipping all tests"
-	return
-    }
-    -re "\r\n$mi_gdb_prompt" {
-	perror "Cannot start target (unknown output after running)"
-	return -1
-    }
-    timeout {
-	perror "Cannot start target (timeout)"
-	return -1
-    }
+if { [mi_run_to_main] < 0 } {
+    perror "mi-nsintrall.exp tests suppressed"
+    continue
 }
-mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" \
-    { "" "disp=\"del\"" } "run to main"
 
 mi_create_breakpoint thread_function 2 keep thread_function .* .* .* \
     "breakpoint at thread_function"
Index: src/gdb/testsuite/gdb.mi/mi-nsmoribund.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.mi/mi-nsmoribund.exp	2009-03-24 18:29:16.000000000 +0000
+++ src/gdb/testsuite/gdb.mi/mi-nsmoribund.exp	2009-03-24 20:18:38.000000000 +0000
@@ -13,11 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This only works with native configurations
-if {![isnative]} {
-  return
-}
-
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
@@ -57,35 +52,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set target-async 1" ".*"
 detect_async
 
-mi_gdb_test "200-break-insert -t main" ".*"
-
-set created "=thread-created,id=\"$decimal\"\r\n"
-set running "\\*running,thread-id=\"$decimal\"\r\n"
-
-set notifs "($created)*($running)*($library_loaded_re)*"
-
-# Note: presently, we skip this test on non-native targets,
-# so 'run' is OK.  As soon as we start to run this on remote
-# target, the logic from mi_run_cmd will have to be refactored.
-send_gdb "-exec-run\n"
-gdb_expect {
-    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
-    }
-    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
-	verbose -log "Non-stop mode not supported, skipping all tests"
-	return
-    }
-    -re "\r\n$mi_gdb_prompt" {
-	perror "Cannot start target (unknown output after running)"
-	return -1
-    }
-    timeout {
-	perror "Cannot start target (timeout)"
-	return -1
-    }
+if { [mi_run_to_main] < 0 } {
+    perror "mi-nsmoribund.exp tests suppressed"
+    continue
 }
-mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" \
-    { "" "disp=\"del\"" } "run to main"
 
 # Keep this in sync with THREADS in the the $srcfile.
 set nthreads 10
Index: src/gdb/testsuite/lib/mi-support.exp
===================================================================
--- src.orig/gdb/testsuite/lib/mi-support.exp	2009-03-24 20:17:57.000000000 +0000
+++ src/gdb/testsuite/lib/mi-support.exp	2009-03-25 04:23:57.000000000 +0000
@@ -333,7 +333,7 @@ proc mi_gdb_target_cmd { targetname seri
     for {set i 1} {$i <= 3} {incr i} {
 	send_gdb "47-target-select $targetname $serialport\n"
 	gdb_expect 60 {
-	    -re "47\\^connected.*$mi_gdb_prompt$" {
+	    -re "47\\^connected.*$mi_gdb_prompt" {
 		verbose "Set target to $targetname";
 		return 0;
 	    }
@@ -365,6 +365,10 @@ proc mi_gdb_target_cmd { targetname seri
 		sleep 5
 		continue
 	    }
+	    -re "Non-stop mode requested, but remote does not support non-stop.*$mi_gdb_prompt" {
+		unsupported "Non-stop mode unsupported"
+		return 1
+	    }
 	    -re "Timeout reading from remote system.*$mi_gdb_prompt$" {
 		verbose "Got timeout error from gdb.";
 	    }
@@ -787,13 +791,13 @@ proc mi_run_cmd {args} {
 	    -re "$mi_gdb_prompt$" { }
 	    default {
 		perror "gdb_init_command for target failed";
-		return;
+		return -1;
 	    }
 	}
     }
 
     if { [mi_gdb_target_load] < 0 } {
-	return
+	return -1
     }
 
     if [target_info exists use_gdb_stub] {
@@ -803,7 +807,7 @@ proc mi_run_cmd {args} {
 		-re "220\\^running\[\r\n\]+\\*running,thread-id=\"\[^\"\]+\"\r\n$mi_gdb_prompt" {}
 		default {}
 	    }
-	    return;
+	    return 0;
 	}
 
 	if [target_info exists gdb,start_symbol] {
@@ -816,7 +820,7 @@ proc mi_run_cmd {args} {
 	# to better handle RUN.
 	send_gdb  "jump *$start\n"
 	warning "Using CLI jump command, expect run-to-main FAIL"
-	return
+	return 0
     }
 
     send_gdb "220-exec-run $args\n"
@@ -825,10 +829,12 @@ proc mi_run_cmd {args} {
 	}
 	timeout {
 	    perror "Unable to start target"
-	    return
+	    return -1
 	}
     }
     # NOTE: Shortly after this there will be a ``000*stopped,...(gdb)''
+
+    return 0
 }
 
 #
@@ -884,7 +890,9 @@ proc mi_runto_helper {func run_or_contin
   }
 
   if {$run_or_continue == "run"} {
-      mi_run_cmd
+      if { [mi_run_cmd] < 0 } {
+	  return -1
+      }
   } else {
       mi_send_resuming_command "exec-continue" "$test"
   }
@@ -893,7 +901,7 @@ proc mi_runto_helper {func run_or_contin
 }
 
 proc mi_runto {func} {
-    mi_runto_helper $func "run"
+    return [mi_runto_helper $func "run"]
 }
 
 # Next to the next statement


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Enable non-stop mode MI tests against remote targets.
  2009-03-26  1:03 Enable non-stop mode MI tests against remote targets Pedro Alves
@ 2009-03-26  4:25 ` Pedro Alves
  2009-04-01 23:23   ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2009-03-26  4:25 UTC (permalink / raw)
  To: gdb-patches; +Cc: Vladimir Prus

On Thursday 26 March 2009 00:54:52, Pedro Alves wrote:
> With this patch, the MI non-stop mode tests pass cleanly against
> gdbserver once the gdbserver non-stop mode patch is applied:
> 
>  http://sourceware.org/ml/gdb-patches/2009-03/msg00582.html
> 
> The tests currently assume a native GDB.  They use -exec-run
> directly.  I've changed them to use mi_run_to_main, which
> works nicelly.  To make the tests fails fail gracefully when
> the remote side doesn't support non-stop mode, I've made
> mi_run_to_main and its callees propagate an error return up,
> similarly to CLI's runto_main.  This means that this patch can go
> in before the gdbserver bits go in.  Most other MI tests could be
> adjusted to do the same "if { [mi_run_to_main] < 0 } { BAIL }"
> check, which avoids cascasted FAILs and timeouts.
> 
> Vladimir, do you think this looks OK?
> 

Huh!  I was so focused on remote targets, that I forgot to
make native targets still fail gracefully if non-stop is
not supported.

This updated patch adds this bit on top of the previous one.

@@ -827,6 +827,10 @@ proc mi_run_cmd {args} {
     gdb_expect {
        -re "220\\^running\r\n(\\*running,thread-id=\"\[^\"\]+\"\r\n|=thread-created,id=\"1\",group-id=\"\[0-9\]+\"\r\n)*(${library_loaded_re})*(${thread_selected_re})?${mi_gdb_prompt}" {
        }
+       -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
+           unsupported "Non-stop mode not supported"
+           return -1
+       }
        timeout {
            perror "Unable to start target"
            return -1


-- 
Pedro Alves

2009-03-26  Pedro Alves  <pedro@codesourcery.com>

	* gdb.mi/mi-nonstop.exp: Don't check isnative.  Use
	mi_run_to_main.  Skip thread exit test on remote targets.
	* gdb.mi/mi-nsintrall.exp: Don't check isnative.  Use
	mi_run_to_main.
	* gdb.mi/mi-nsmoribund.exp: Don't check isnative.  Use
	mi_run_to_main.
	* lib/mi-support.exp (mi_gdb_target_cmd): Remove trailing anchor
	when expecting ^connected.  Detect when the target doesn't support
	non-stop mode.
	(mi_run_cmd): Detect if non-stop mode was requested by isn't
	supported.  Return -1 on error, 0 on success.
	(mi_runto_helper): Don't expect a stop if mi_run_cmd failed.
	(mi_runto): Return mi_runto_helper's result explicitly.

---
 gdb/testsuite/gdb.mi/mi-nonstop.exp    |   73 +++++++++++----------------------
 gdb/testsuite/gdb.mi/mi-nsintrall.exp  |   36 +---------------
 gdb/testsuite/gdb.mi/mi-nsmoribund.exp |   36 +---------------
 gdb/testsuite/lib/mi-support.exp       |   28 +++++++++---
 4 files changed, 51 insertions(+), 122 deletions(-)

Index: src/gdb/testsuite/gdb.mi/mi-nonstop.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.mi/mi-nonstop.exp	2009-03-26 01:15:13.000000000 +0000
+++ src/gdb/testsuite/gdb.mi/mi-nonstop.exp	2009-03-26 02:18:13.000000000 +0000
@@ -14,11 +14,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This only works with native configurations
-if {![isnative]} {
-  return
-}
-
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
@@ -46,9 +41,9 @@ set supported 0
 send_gdb "-gdb-show non-stop\n"
 gdb_expect {
     -re ".*\\^done,value=\"off\",supported=\"(\[^\"\]+)\"\r\n$mi_gdb_prompt$" {
-        if { $expect_out(1,string) == "1" } {
-            set supported 1
-        }
+	if { $expect_out(1,string) == "1" } {
+	    set supported 1
+	}
     }
     -re ".$mi_gdb_prompt$" {
     }
@@ -58,34 +53,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set target-async 1" ".*"
 detect_async
 
-mi_gdb_test "200-break-insert -t main" ".*"
-
-set created "=thread-created,id=\"$decimal\"\r\n"
-set running "\\*running,thread-id=\"$decimal\"\r\n"
-
-set notifs "($created)*($running)*($library_loaded_re)*"
-
-# Note: presently, we skip this test on non-native targets,
-# so 'run' is OK.  As soon as we start to run this on remote
-# target, the logic from mi_run_cmd will have to be refactored.
-send_gdb "-exec-run\n"
-gdb_expect {
-    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
-    }
-    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
-        verbose -log "Non-stop mode not supported, skipping all tests"
-        return
-    }
-    -re "\r\n$mi_gdb_prompt" {
-        perror "Cannot start target (unknown output after running)"
-        return -1
-    }
-    timeout {
-        perror "Cannot start target (timeout)"
-        return -1
-    }
+if { [mi_run_to_main] < 0 } {
+    perror "mi-nonstop.exp tests suppressed"
+    continue
 }
-mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" { "" "disp=\"del\"" } "run to main"
 
 mi_create_breakpoint break_at_me 2 keep break_at_me .* .* .* "breakpoint at marker"
 
@@ -114,13 +85,13 @@ mi_varobj_update * {I_W1 I_W0} "update v
 mi_check_varobj_value I_W0 1 "check varobj, w0, 1"
 mi_check_varobj_value I_W1 1 "check varobj, w1, 1"
 
-send_gdb "-exec-interrupt --thread 1\n" 
+send_gdb "-exec-interrupt --thread 1\n"
 gdb_expect {
     -re "\\^done\r\n$mi_gdb_prompt\\*stopped\[^\r\n\]+\r\n$" {
-        pass "interrupted"
+	pass "interrupted"
     }
     timeout {
-        fail "interrupted (timeout)"
+	fail "interrupted (timeout)"
     }
 }
 # The interrupt command sends SIGINT to the target, and therefore the
@@ -132,10 +103,10 @@ mi_check_thread_states {"stopped" "stopp
 send_gdb "-exec-continue --all\n"
 gdb_expect {
     -re ".*\\*running,thread-id=\"3\"\r\n\\*running,thread-id=\"2\"\r\n\\*running,thread-id=\"1\"\r\n$mi_gdb_prompt" {
-        pass "resume all"
+	pass "resume all"
     }
     timeout {
-        fail "resume all (timeout)"
+	fail "resume all (timeout)"
     }
 }
 
@@ -172,12 +143,20 @@ mi_gdb_test "-stack-list-frames --thread
 mi_gdb_test "-thread-select 2" "\\^done.*" "select first worker thread"
 # Since thread 2 is running, we need to set variable via another thread.
 mi_gdb_test "-gdb-set --thread 3 variable exit_first_thread=1" ".*\\^done" "ask the second thread to exit"
-gdb_expect {
-    -re ".*=thread-exited,id=\"2\",group-id=\"\[0-9\]+\"\r\n$" {
-        pass "wait for thread exit"
-    }
-    timeout {
-        fail "wait for thread exit (timeout)"
+
+set test "wait for thread exit"
+if { [is_remote target] } {
+    # The remote protocol doesn't have support for thread exit
+    # notifications.
+    unsupported $test
+} else {
+    gdb_expect {
+	-re ".*=thread-exited,id=\"2\",group-id=\"\[0-9\]+\"\r\n$" {
+	    pass $test
+	}
+	timeout {
+	    fail "$test (timeout)"
+	}
     }
 }
 
@@ -186,6 +165,4 @@ mi_gdb_test "-stack-list-frames --thread
     "\\^done,stack=\\\[frame={level=\"0\",addr=\".*\",func=\"break_at_me\".*" \
     "stacktrace of stopped thread"
 
-    
 mi_gdb_exit
-
Index: src/gdb/testsuite/gdb.mi/mi-nsintrall.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.mi/mi-nsintrall.exp	2009-03-26 01:15:13.000000000 +0000
+++ src/gdb/testsuite/gdb.mi/mi-nsintrall.exp	2009-03-26 02:18:13.000000000 +0000
@@ -13,11 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This only works with native configurations
-if {![isnative]} {
-  return
-}
-
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
@@ -57,35 +52,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set target-async 1" ".*"
 detect_async
 
-mi_gdb_test "200-break-insert -t main" ".*"
-
-set created "=thread-created,id=\"$decimal\"\r\n"
-set running "\\*running,thread-id=\"$decimal\"\r\n"
-
-set notifs "($created)*($running)*($library_loaded_re)*"
-
-# Note: presently, we skip this test on non-native targets,
-# so 'run' is OK.  As soon as we start to run this on remote
-# target, the logic from mi_run_cmd will have to be refactored.
-send_gdb "-exec-run\n"
-gdb_expect {
-    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
-    }
-    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
-	verbose -log "Non-stop mode not supported, skipping all tests"
-	return
-    }
-    -re "\r\n$mi_gdb_prompt" {
-	perror "Cannot start target (unknown output after running)"
-	return -1
-    }
-    timeout {
-	perror "Cannot start target (timeout)"
-	return -1
-    }
+if { [mi_run_to_main] < 0 } {
+    perror "mi-nsintrall.exp tests suppressed"
+    continue
 }
-mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" \
-    { "" "disp=\"del\"" } "run to main"
 
 mi_create_breakpoint thread_function 2 keep thread_function .* .* .* \
     "breakpoint at thread_function"
Index: src/gdb/testsuite/gdb.mi/mi-nsmoribund.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.mi/mi-nsmoribund.exp	2009-03-26 01:15:13.000000000 +0000
+++ src/gdb/testsuite/gdb.mi/mi-nsmoribund.exp	2009-03-26 02:18:13.000000000 +0000
@@ -13,11 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This only works with native configurations
-if {![isnative]} {
-  return
-}
-
 load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
@@ -57,35 +52,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set target-async 1" ".*"
 detect_async
 
-mi_gdb_test "200-break-insert -t main" ".*"
-
-set created "=thread-created,id=\"$decimal\"\r\n"
-set running "\\*running,thread-id=\"$decimal\"\r\n"
-
-set notifs "($created)*($running)*($library_loaded_re)*"
-
-# Note: presently, we skip this test on non-native targets,
-# so 'run' is OK.  As soon as we start to run this on remote
-# target, the logic from mi_run_cmd will have to be refactored.
-send_gdb "-exec-run\n"
-gdb_expect {
-    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
-    }
-    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
-	verbose -log "Non-stop mode not supported, skipping all tests"
-	return
-    }
-    -re "\r\n$mi_gdb_prompt" {
-	perror "Cannot start target (unknown output after running)"
-	return -1
-    }
-    timeout {
-	perror "Cannot start target (timeout)"
-	return -1
-    }
+if { [mi_run_to_main] < 0 } {
+    perror "mi-nsmoribund.exp tests suppressed"
+    continue
 }
-mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" \
-    { "" "disp=\"del\"" } "run to main"
 
 # Keep this in sync with THREADS in the the $srcfile.
 set nthreads 10
Index: src/gdb/testsuite/lib/mi-support.exp
===================================================================
--- src.orig/gdb/testsuite/lib/mi-support.exp	2009-03-26 01:15:13.000000000 +0000
+++ src/gdb/testsuite/lib/mi-support.exp	2009-03-26 02:25:20.000000000 +0000
@@ -333,7 +333,7 @@ proc mi_gdb_target_cmd { targetname seri
     for {set i 1} {$i <= 3} {incr i} {
 	send_gdb "47-target-select $targetname $serialport\n"
 	gdb_expect 60 {
-	    -re "47\\^connected.*$mi_gdb_prompt$" {
+	    -re "47\\^connected.*$mi_gdb_prompt" {
 		verbose "Set target to $targetname";
 		return 0;
 	    }
@@ -365,6 +365,10 @@ proc mi_gdb_target_cmd { targetname seri
 		sleep 5
 		continue
 	    }
+	    -re "Non-stop mode requested, but remote does not support non-stop.*$mi_gdb_prompt" {
+		unsupported "Non-stop mode not supported"
+		return 1
+	    }
 	    -re "Timeout reading from remote system.*$mi_gdb_prompt$" {
 		verbose "Got timeout error from gdb.";
 	    }
@@ -787,13 +791,13 @@ proc mi_run_cmd {args} {
 	    -re "$mi_gdb_prompt$" { }
 	    default {
 		perror "gdb_init_command for target failed";
-		return;
+		return -1;
 	    }
 	}
     }
 
     if { [mi_gdb_target_load] < 0 } {
-	return
+	return -1
     }
 
     if [target_info exists use_gdb_stub] {
@@ -803,7 +807,7 @@ proc mi_run_cmd {args} {
 		-re "220\\^running\[\r\n\]+\\*running,thread-id=\"\[^\"\]+\"\r\n$mi_gdb_prompt" {}
 		default {}
 	    }
-	    return;
+	    return 0;
 	}
 
 	if [target_info exists gdb,start_symbol] {
@@ -816,19 +820,25 @@ proc mi_run_cmd {args} {
 	# to better handle RUN.
 	send_gdb  "jump *$start\n"
 	warning "Using CLI jump command, expect run-to-main FAIL"
-	return
+	return 0
     }
 
     send_gdb "220-exec-run $args\n"
     gdb_expect {
 	-re "220\\^running\r\n(\\*running,thread-id=\"\[^\"\]+\"\r\n|=thread-created,id=\"1\",group-id=\"\[0-9\]+\"\r\n)*(${library_loaded_re})*(${thread_selected_re})?${mi_gdb_prompt}" {
 	}
+	-re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
+	    unsupported "Non-stop mode not supported"
+	    return -1
+	}
 	timeout {
 	    perror "Unable to start target"
-	    return
+	    return -1
 	}
     }
     # NOTE: Shortly after this there will be a ``000*stopped,...(gdb)''
+
+    return 0
 }
 
 #
@@ -884,7 +894,9 @@ proc mi_runto_helper {func run_or_contin
   }
 
   if {$run_or_continue == "run"} {
-      mi_run_cmd
+      if { [mi_run_cmd] < 0 } {
+	  return -1
+      }
   } else {
       mi_send_resuming_command "exec-continue" "$test"
   }
@@ -893,7 +905,7 @@ proc mi_runto_helper {func run_or_contin
 }
 
 proc mi_runto {func} {
-    mi_runto_helper $func "run"
+    return [mi_runto_helper $func "run"]
 }
 
 # Next to the next statement
-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Enable non-stop mode MI tests against remote targets.
  2009-03-26  4:25 ` Pedro Alves
@ 2009-04-01 23:23   ` Pedro Alves
  2009-04-02 14:08     ` Vladimir Prus
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2009-04-01 23:23 UTC (permalink / raw)
  To: gdb-patches; +Cc: Vladimir Prus

On Thursday 26 March 2009 02:28:28, Pedro Alves wrote:
> On Thursday 26 March 2009 00:54:52, Pedro Alves wrote:
> > With this patch, the MI non-stop mode tests pass cleanly against
> > gdbserver once the gdbserver non-stop mode patch is applied:
> > 
> >  http://sourceware.org/ml/gdb-patches/2009-03/msg00582.html
> > 
> > The tests currently assume a native GDB.  They use -exec-run
> > directly.  I've changed them to use mi_run_to_main, which
> > works nicelly.  To make the tests fails fail gracefully when
> > the remote side doesn't support non-stop mode, I've made
> > mi_run_to_main and its callees propagate an error return up,
> > similarly to CLI's runto_main.  This means that this patch can go
> > in before the gdbserver bits go in.  Most other MI tests could be
> > adjusted to do the same "if { [mi_run_to_main] < 0 } { BAIL }"
> > check, which avoids cascasted FAILs and timeouts.
> > 
> > Vladimir, do you think this looks OK?


Hi Vladimir, gdbserver now supports non-stop mode, so we need
to be able to test it.  :-)  Do you have any comments on
this approach?


> > 
> 
> Huh!  I was so focused on remote targets, that I forgot to
> make native targets still fail gracefully if non-stop is
> not supported.
> 
> This updated patch adds this bit on top of the previous one.
> 
> @@ -827,6 +827,10 @@ proc mi_run_cmd {args} {
>      gdb_expect {
>         -re "220\\^running\r\n(\\*running,thread-id=\"\[^\"\]+\"\r\n|=thread-created,id=\"1\",group-id=\"\[0-9\]+\"\r\n)*(${library_loaded_re})*(${thread_selected_re})?${mi_gdb_prompt}" {
>         }
> +       -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
> +           unsupported "Non-stop mode not supported"
> +           return -1
> +       }
>         timeout {
>             perror "Unable to start target"
>             return -1
> 
> 
> -- 
> Pedro Alves
> 
> 2009-03-26  Pedro Alves  <pedro@codesourcery.com>
> 
> 	* gdb.mi/mi-nonstop.exp: Don't check isnative.  Use
> 	mi_run_to_main.  Skip thread exit test on remote targets.
> 	* gdb.mi/mi-nsintrall.exp: Don't check isnative.  Use
> 	mi_run_to_main.
> 	* gdb.mi/mi-nsmoribund.exp: Don't check isnative.  Use
> 	mi_run_to_main.
> 	* lib/mi-support.exp (mi_gdb_target_cmd): Remove trailing anchor
> 	when expecting ^connected.  Detect when the target doesn't support
> 	non-stop mode.
> 	(mi_run_cmd): Detect if non-stop mode was requested by isn't
> 	supported.  Return -1 on error, 0 on success.
> 	(mi_runto_helper): Don't expect a stop if mi_run_cmd failed.
> 	(mi_runto): Return mi_runto_helper's result explicitly.
> 
> ---
>  gdb/testsuite/gdb.mi/mi-nonstop.exp    |   73 +++++++++++----------------------
>  gdb/testsuite/gdb.mi/mi-nsintrall.exp  |   36 +---------------
>  gdb/testsuite/gdb.mi/mi-nsmoribund.exp |   36 +---------------
>  gdb/testsuite/lib/mi-support.exp       |   28 +++++++++---
>  4 files changed, 51 insertions(+), 122 deletions(-)
> 
> Index: src/gdb/testsuite/gdb.mi/mi-nonstop.exp
> ===================================================================
> --- src.orig/gdb/testsuite/gdb.mi/mi-nonstop.exp	2009-03-26 01:15:13.000000000 +0000
> +++ src/gdb/testsuite/gdb.mi/mi-nonstop.exp	2009-03-26 02:18:13.000000000 +0000
> @@ -14,11 +14,6 @@
>  # You should have received a copy of the GNU General Public License
>  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  
> -# This only works with native configurations
> -if {![isnative]} {
> -  return
> -}
> -
>  load_lib mi-support.exp
>  set MIFLAGS "-i=mi"
>  
> @@ -46,9 +41,9 @@ set supported 0
>  send_gdb "-gdb-show non-stop\n"
>  gdb_expect {
>      -re ".*\\^done,value=\"off\",supported=\"(\[^\"\]+)\"\r\n$mi_gdb_prompt$" {
> -        if { $expect_out(1,string) == "1" } {
> -            set supported 1
> -        }
> +	if { $expect_out(1,string) == "1" } {
> +	    set supported 1
> +	}
>      }
>      -re ".$mi_gdb_prompt$" {
>      }
> @@ -58,34 +53,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
>  mi_gdb_test "-gdb-set target-async 1" ".*"
>  detect_async
>  
> -mi_gdb_test "200-break-insert -t main" ".*"
> -
> -set created "=thread-created,id=\"$decimal\"\r\n"
> -set running "\\*running,thread-id=\"$decimal\"\r\n"
> -
> -set notifs "($created)*($running)*($library_loaded_re)*"
> -
> -# Note: presently, we skip this test on non-native targets,
> -# so 'run' is OK.  As soon as we start to run this on remote
> -# target, the logic from mi_run_cmd will have to be refactored.
> -send_gdb "-exec-run\n"
> -gdb_expect {
> -    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
> -    }
> -    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
> -        verbose -log "Non-stop mode not supported, skipping all tests"
> -        return
> -    }
> -    -re "\r\n$mi_gdb_prompt" {
> -        perror "Cannot start target (unknown output after running)"
> -        return -1
> -    }
> -    timeout {
> -        perror "Cannot start target (timeout)"
> -        return -1
> -    }
> +if { [mi_run_to_main] < 0 } {
> +    perror "mi-nonstop.exp tests suppressed"
> +    continue
>  }
> -mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" { "" "disp=\"del\"" } "run to main"
>  
>  mi_create_breakpoint break_at_me 2 keep break_at_me .* .* .* "breakpoint at marker"
>  
> @@ -114,13 +85,13 @@ mi_varobj_update * {I_W1 I_W0} "update v
>  mi_check_varobj_value I_W0 1 "check varobj, w0, 1"
>  mi_check_varobj_value I_W1 1 "check varobj, w1, 1"
>  
> -send_gdb "-exec-interrupt --thread 1\n" 
> +send_gdb "-exec-interrupt --thread 1\n"
>  gdb_expect {
>      -re "\\^done\r\n$mi_gdb_prompt\\*stopped\[^\r\n\]+\r\n$" {
> -        pass "interrupted"
> +	pass "interrupted"
>      }
>      timeout {
> -        fail "interrupted (timeout)"
> +	fail "interrupted (timeout)"
>      }
>  }
>  # The interrupt command sends SIGINT to the target, and therefore the
> @@ -132,10 +103,10 @@ mi_check_thread_states {"stopped" "stopp
>  send_gdb "-exec-continue --all\n"
>  gdb_expect {
>      -re ".*\\*running,thread-id=\"3\"\r\n\\*running,thread-id=\"2\"\r\n\\*running,thread-id=\"1\"\r\n$mi_gdb_prompt" {
> -        pass "resume all"
> +	pass "resume all"
>      }
>      timeout {
> -        fail "resume all (timeout)"
> +	fail "resume all (timeout)"
>      }
>  }
>  
> @@ -172,12 +143,20 @@ mi_gdb_test "-stack-list-frames --thread
>  mi_gdb_test "-thread-select 2" "\\^done.*" "select first worker thread"
>  # Since thread 2 is running, we need to set variable via another thread.
>  mi_gdb_test "-gdb-set --thread 3 variable exit_first_thread=1" ".*\\^done" "ask the second thread to exit"
> -gdb_expect {
> -    -re ".*=thread-exited,id=\"2\",group-id=\"\[0-9\]+\"\r\n$" {
> -        pass "wait for thread exit"
> -    }
> -    timeout {
> -        fail "wait for thread exit (timeout)"
> +
> +set test "wait for thread exit"
> +if { [is_remote target] } {
> +    # The remote protocol doesn't have support for thread exit
> +    # notifications.
> +    unsupported $test
> +} else {
> +    gdb_expect {
> +	-re ".*=thread-exited,id=\"2\",group-id=\"\[0-9\]+\"\r\n$" {
> +	    pass $test
> +	}
> +	timeout {
> +	    fail "$test (timeout)"
> +	}
>      }
>  }
>  
> @@ -186,6 +165,4 @@ mi_gdb_test "-stack-list-frames --thread
>      "\\^done,stack=\\\[frame={level=\"0\",addr=\".*\",func=\"break_at_me\".*" \
>      "stacktrace of stopped thread"
>  
> -    
>  mi_gdb_exit
> -
> Index: src/gdb/testsuite/gdb.mi/mi-nsintrall.exp
> ===================================================================
> --- src.orig/gdb/testsuite/gdb.mi/mi-nsintrall.exp	2009-03-26 01:15:13.000000000 +0000
> +++ src/gdb/testsuite/gdb.mi/mi-nsintrall.exp	2009-03-26 02:18:13.000000000 +0000
> @@ -13,11 +13,6 @@
>  # You should have received a copy of the GNU General Public License
>  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  
> -# This only works with native configurations
> -if {![isnative]} {
> -  return
> -}
> -
>  load_lib mi-support.exp
>  set MIFLAGS "-i=mi"
>  
> @@ -57,35 +52,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
>  mi_gdb_test "-gdb-set target-async 1" ".*"
>  detect_async
>  
> -mi_gdb_test "200-break-insert -t main" ".*"
> -
> -set created "=thread-created,id=\"$decimal\"\r\n"
> -set running "\\*running,thread-id=\"$decimal\"\r\n"
> -
> -set notifs "($created)*($running)*($library_loaded_re)*"
> -
> -# Note: presently, we skip this test on non-native targets,
> -# so 'run' is OK.  As soon as we start to run this on remote
> -# target, the logic from mi_run_cmd will have to be refactored.
> -send_gdb "-exec-run\n"
> -gdb_expect {
> -    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
> -    }
> -    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
> -	verbose -log "Non-stop mode not supported, skipping all tests"
> -	return
> -    }
> -    -re "\r\n$mi_gdb_prompt" {
> -	perror "Cannot start target (unknown output after running)"
> -	return -1
> -    }
> -    timeout {
> -	perror "Cannot start target (timeout)"
> -	return -1
> -    }
> +if { [mi_run_to_main] < 0 } {
> +    perror "mi-nsintrall.exp tests suppressed"
> +    continue
>  }
> -mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" \
> -    { "" "disp=\"del\"" } "run to main"
>  
>  mi_create_breakpoint thread_function 2 keep thread_function .* .* .* \
>      "breakpoint at thread_function"
> Index: src/gdb/testsuite/gdb.mi/mi-nsmoribund.exp
> ===================================================================
> --- src.orig/gdb/testsuite/gdb.mi/mi-nsmoribund.exp	2009-03-26 01:15:13.000000000 +0000
> +++ src/gdb/testsuite/gdb.mi/mi-nsmoribund.exp	2009-03-26 02:18:13.000000000 +0000
> @@ -13,11 +13,6 @@
>  # You should have received a copy of the GNU General Public License
>  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  
> -# This only works with native configurations
> -if {![isnative]} {
> -  return
> -}
> -
>  load_lib mi-support.exp
>  set MIFLAGS "-i=mi"
>  
> @@ -57,35 +52,10 @@ mi_gdb_test "-gdb-set non-stop 1" ".*"
>  mi_gdb_test "-gdb-set target-async 1" ".*"
>  detect_async
>  
> -mi_gdb_test "200-break-insert -t main" ".*"
> -
> -set created "=thread-created,id=\"$decimal\"\r\n"
> -set running "\\*running,thread-id=\"$decimal\"\r\n"
> -
> -set notifs "($created)*($running)*($library_loaded_re)*"
> -
> -# Note: presently, we skip this test on non-native targets,
> -# so 'run' is OK.  As soon as we start to run this on remote
> -# target, the logic from mi_run_cmd will have to be refactored.
> -send_gdb "-exec-run\n"
> -gdb_expect {
> -    -re "\\^running\r\n$notifs$mi_gdb_prompt" {
> -    }
> -    -re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
> -	verbose -log "Non-stop mode not supported, skipping all tests"
> -	return
> -    }
> -    -re "\r\n$mi_gdb_prompt" {
> -	perror "Cannot start target (unknown output after running)"
> -	return -1
> -    }
> -    timeout {
> -	perror "Cannot start target (timeout)"
> -	return -1
> -    }
> +if { [mi_run_to_main] < 0 } {
> +    perror "mi-nsmoribund.exp tests suppressed"
> +    continue
>  }
> -mi_expect_stop "breakpoint-hit" main ".*" ".*" "\[0-9\]+" \
> -    { "" "disp=\"del\"" } "run to main"
>  
>  # Keep this in sync with THREADS in the the $srcfile.
>  set nthreads 10
> Index: src/gdb/testsuite/lib/mi-support.exp
> ===================================================================
> --- src.orig/gdb/testsuite/lib/mi-support.exp	2009-03-26 01:15:13.000000000 +0000
> +++ src/gdb/testsuite/lib/mi-support.exp	2009-03-26 02:25:20.000000000 +0000
> @@ -333,7 +333,7 @@ proc mi_gdb_target_cmd { targetname seri
>      for {set i 1} {$i <= 3} {incr i} {
>  	send_gdb "47-target-select $targetname $serialport\n"
>  	gdb_expect 60 {
> -	    -re "47\\^connected.*$mi_gdb_prompt$" {
> +	    -re "47\\^connected.*$mi_gdb_prompt" {
>  		verbose "Set target to $targetname";
>  		return 0;
>  	    }
> @@ -365,6 +365,10 @@ proc mi_gdb_target_cmd { targetname seri
>  		sleep 5
>  		continue
>  	    }
> +	    -re "Non-stop mode requested, but remote does not support non-stop.*$mi_gdb_prompt" {
> +		unsupported "Non-stop mode not supported"
> +		return 1
> +	    }
>  	    -re "Timeout reading from remote system.*$mi_gdb_prompt$" {
>  		verbose "Got timeout error from gdb.";
>  	    }
> @@ -787,13 +791,13 @@ proc mi_run_cmd {args} {
>  	    -re "$mi_gdb_prompt$" { }
>  	    default {
>  		perror "gdb_init_command for target failed";
> -		return;
> +		return -1;
>  	    }
>  	}
>      }
>  
>      if { [mi_gdb_target_load] < 0 } {
> -	return
> +	return -1
>      }
>  
>      if [target_info exists use_gdb_stub] {
> @@ -803,7 +807,7 @@ proc mi_run_cmd {args} {
>  		-re "220\\^running\[\r\n\]+\\*running,thread-id=\"\[^\"\]+\"\r\n$mi_gdb_prompt" {}
>  		default {}
>  	    }
> -	    return;
> +	    return 0;
>  	}
>  
>  	if [target_info exists gdb,start_symbol] {
> @@ -816,19 +820,25 @@ proc mi_run_cmd {args} {
>  	# to better handle RUN.
>  	send_gdb  "jump *$start\n"
>  	warning "Using CLI jump command, expect run-to-main FAIL"
> -	return
> +	return 0
>      }
>  
>      send_gdb "220-exec-run $args\n"
>      gdb_expect {
>  	-re "220\\^running\r\n(\\*running,thread-id=\"\[^\"\]+\"\r\n|=thread-created,id=\"1\",group-id=\"\[0-9\]+\"\r\n)*(${library_loaded_re})*(${thread_selected_re})?${mi_gdb_prompt}" {
>  	}
> +	-re "\\^error,msg=\"The target does not support running in non-stop mode.\"" {
> +	    unsupported "Non-stop mode not supported"
> +	    return -1
> +	}
>  	timeout {
>  	    perror "Unable to start target"
> -	    return
> +	    return -1
>  	}
>      }
>      # NOTE: Shortly after this there will be a ``000*stopped,...(gdb)''
> +
> +    return 0
>  }
>  
>  #
> @@ -884,7 +894,9 @@ proc mi_runto_helper {func run_or_contin
>    }
>  
>    if {$run_or_continue == "run"} {
> -      mi_run_cmd
> +      if { [mi_run_cmd] < 0 } {
> +	  return -1
> +      }
>    } else {
>        mi_send_resuming_command "exec-continue" "$test"
>    }
> @@ -893,7 +905,7 @@ proc mi_runto_helper {func run_or_contin
>  }
>  
>  proc mi_runto {func} {
> -    mi_runto_helper $func "run"
> +    return [mi_runto_helper $func "run"]
>  }
>  
>  # Next to the next statement



-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Enable non-stop mode MI tests against remote targets.
  2009-04-01 23:23   ` Pedro Alves
@ 2009-04-02 14:08     ` Vladimir Prus
  2009-04-02 16:13       ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Vladimir Prus @ 2009-04-02 14:08 UTC (permalink / raw)
  To: gdb-patches

Pedro Alves wrote:

> On Thursday 26 March 2009 02:28:28, Pedro Alves wrote:
>> On Thursday 26 March 2009 00:54:52, Pedro Alves wrote:
>> > With this patch, the MI non-stop mode tests pass cleanly against
>> > gdbserver once the gdbserver non-stop mode patch is applied:
>> > 
>> >  http://sourceware.org/ml/gdb-patches/2009-03/msg00582.html
>> > 
>> > The tests currently assume a native GDB.  They use -exec-run
>> > directly.  I've changed them to use mi_run_to_main, which
>> > works nicelly.  To make the tests fails fail gracefully when
>> > the remote side doesn't support non-stop mode, I've made
>> > mi_run_to_main and its callees propagate an error return up,
>> > similarly to CLI's runto_main.  This means that this patch can go
>> > in before the gdbserver bits go in.  Most other MI tests could be
>> > adjusted to do the same "if { [mi_run_to_main] < 0 } { BAIL }"
>> > check, which avoids cascasted FAILs and timeouts.
>> > 
>> > Vladimir, do you think this looks OK?
> 
> 
> Hi Vladimir, gdbserver now supports non-stop mode, so we need
> to be able to test it.  :-)  Do you have any comments on
> this approach?

Thanks for asking. I think it's fine!

- Volodya



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Enable non-stop mode MI tests against remote targets.
  2009-04-02 14:08     ` Vladimir Prus
@ 2009-04-02 16:13       ` Pedro Alves
  0 siblings, 0 replies; 5+ messages in thread
From: Pedro Alves @ 2009-04-02 16:13 UTC (permalink / raw)
  To: gdb-patches; +Cc: Vladimir Prus

On Thursday 02 April 2009 15:07:56, Vladimir Prus wrote:

> Thanks for asking. I think it's fine!

Great, thanks!  I've checked in the patch.  I'll give the new
mi-nonstop-exit.exp test the same treatment in a bit.

-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-04-02 16:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-03-26  1:03 Enable non-stop mode MI tests against remote targets Pedro Alves
2009-03-26  4:25 ` Pedro Alves
2009-04-01 23:23   ` Pedro Alves
2009-04-02 14:08     ` Vladimir Prus
2009-04-02 16:13       ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox