Fix mi-nonstop.exp with extended-remote
authorPedro Alves <palves@redhat.com>
Mon, 30 Nov 2015 16:05:12 +0000 (16:05 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 30 Nov 2015 18:36:30 +0000 (18:36 +0000)
Testing with "maint set target-non-stop on" makes mi-nonstop.exp run
with the extended-remote board.  That reveals that mi-nonstop.exp is
using the wrong predicate to check for "using remote protocol".

This is not visible today because non-stop tests all fail to run with
extended-remote board, because they spawn gdb and then do "set
non-stop on".  However, with that board, gdb connects to the gdbserver
from within mi_gdb_start, and changing non-stop when already connected
doesn't work.  Fix that by instead enabling non-stop mode on gdb's
command line.

gdb/testsuite/ChangeLog:
2015-11-30  Pedro Alves  <palves@redhat.com>

* gdb.mi/mi-nonstop.exp: Append "set non-stop on" to GDBFLAGS
instead of issuing "-gdb-set non-stop 1" after starting gdb.
Use mi_is_target_remote instead of checking "is_remote target".
* lib/gdb.exp (gdb_is_target_remote): Rename to ...
(gdb_is_target_remote_prompt): ... this, and add 'prompt_regexp'
parameter.
(gdb_is_target_remote): Reimplement.
* lib/mi-support.exp (mi_is_target_remote): New procedure.

gdb/ChangeLog
gdb/testsuite/gdb.mi/mi-nonstop.exp
gdb/testsuite/lib/gdb.exp
gdb/testsuite/lib/mi-support.exp

index 209f7c74b5901b517fa39885963880bee4f18456..c4b89e729fa413d34119098baeb561faf6ff6619 100644 (file)
@@ -1,3 +1,14 @@
+2015-11-30  Pedro Alves  <palves@redhat.com>
+
+       * gdb.mi/mi-nonstop.exp: Append "set non-stop on" to GDBFLAGS
+       instead of issuing "-gdb-set non-stop 1" after starting gdb.
+       Use mi_is_target_remote instead of checking "is_remote target".
+       * lib/gdb.exp (gdb_is_target_remote): Rename to ...
+       (gdb_is_target_remote_prompt): ... this, and add 'prompt_regexp'
+       parameter.
+       (gdb_is_target_remote): Reimplement.
+       * lib/mi-support.exp (mi_is_target_remote): New procedure.
+
 2014-11-28  Pedro Alves  <palves@redhat.com>
 
        * cp-name-parser.y (conversion_op): Use
index d2cb95b0a9526ce62bbb9a9aefa437981f6a3136..50cf4979e0131c74c07385f4fd2ee7c309fa85b3 100644 (file)
@@ -23,8 +23,12 @@ load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
 gdb_exit
-if {[mi_gdb_start]} {
-    continue
+
+save_vars { GDBFLAGS } {
+    append GDBFLAGS " -ex \"set non-stop on\""
+    if {[mi_gdb_start]} {
+       continue
+    }
 }
 
 proc mi_nonstop_resume { command test } {
@@ -49,7 +53,6 @@ if {[gdb_compile_pthreads "$srcdir/$subdir/$srcfile" $binfile executable $option
 mi_gdb_reinitialize_dir $srcdir/$subdir
 mi_gdb_load $binfile
 
-mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set mi-async 1" ".*"
 mi_detect_async
 
@@ -132,7 +135,7 @@ mi_gdb_test "-thread-select 2" "\\^done.*" "select first worker thread"
 mi_gdb_test "-gdb-set --thread 3 variable exit_first_thread=1" ".*\\^done" "ask the second thread to exit"
 
 set test "wait for thread exit"
-if { [is_remote target] } {
+if { [mi_is_target_remote] } {
     # The remote protocol doesn't have support for thread exit
     # notifications.
     unsupported $test
index 90e864467310d15c45ebe84320c6ab7169cca44e..beb97ea1a02e290a712673d5be9ef12b2e9ef9f3 100644 (file)
@@ -3023,25 +3023,33 @@ proc skip_compile_feature_tests {} {
     return $result
 }
 
-# Check whether we're testing with the remote or extended-remote
-# targets.
+# Helper for gdb_is_target_remote.  PROMPT_REGEXP is the expected
+# prompt.
 
-proc gdb_is_target_remote {} {
-    global gdb_prompt
+proc gdb_is_target_remote_prompt { prompt_regexp } {
 
     set test "probe for target remote"
     gdb_test_multiple "maint print target-stack" $test {
-       -re ".*emote serial target in gdb-specific protocol.*$gdb_prompt $" {
+       -re ".*emote serial target in gdb-specific protocol.*$prompt_regexp" {
            pass $test
            return 1
        }
-       -re "$gdb_prompt $" {
+       -re "$prompt_regexp" {
            pass $test
        }
     }
     return 0
 }
 
+# Check whether we're testing with the remote or extended-remote
+# targets.
+
+proc gdb_is_target_remote {} {
+    global gdb_prompt
+
+    return [gdb_is_target_remote_prompt "$gdb_prompt $"]
+}
+
 # Return 1 if the current remote target is an instance of our GDBserver, 0
 # otherwise.  Return -1 if there was an error and we can't tell.
 
index 07a84eacd691d9132c899ecc7e01a8753bae379d..9619fb30893785f5d8c6abde2f730f4d4f214743 100644 (file)
@@ -2499,3 +2499,12 @@ proc mi_skip_python_tests {} {
     global mi_gdb_prompt
     return [skip_python_tests_prompt "$mi_gdb_prompt$"]
 }
+
+# Check whether we're testing with the remote or extended-remote
+# targets.
+
+proc mi_is_target_remote {} {
+    global mi_gdb_prompt
+
+    return [gdb_is_target_remote_prompt "$mi_gdb_prompt"]
+}