* gdb.mi/mi-nonstop.exp: Fix the check for non-stop
authorVladimir Prus <vladimir@codesourcery.com>
Thu, 21 Aug 2008 15:09:42 +0000 (15:09 +0000)
committerVladimir Prus <vladimir@codesourcery.com>
Thu, 21 Aug 2008 15:09:42 +0000 (15:09 +0000)
support.  Adjust the order of "*running" notifications.
* gdb.mi/non-stop.c: Don't cast from int to void* and
back.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.mi/mi-nonstop.exp
gdb/testsuite/gdb.mi/non-stop.c

index eced7020653a31f2f5c11d7c7ac9b12caf6432de..3d7333fc97268dfec7de176a619eef230a6038b9 100644 (file)
@@ -1,3 +1,10 @@
+2008-08-21  Vladimir Prus  <vladimir@codesourcery.com>
+
+       * gdb.mi/mi-nonstop.exp: Fix the check for non-stop
+       support.  Adjust the order of "*running" notifications.
+       * gdb.mi/non-stop.c: Don't cast from int to void* and
+       back.
+
 2008-08-20  Mark Kettenis  <kettenis@gnu.org>
 
        * gdb.arch/powerpc-prologue.exp: Code doesn't save %r31 so don't
index 9c2c29976082aa92066b98ed930259f071e3bf31..4aa3a5a8a1241cb4ee24c4151248abe82d1e4126 100644 (file)
@@ -76,17 +76,32 @@ gdb_expect {
     }
 }
 
-if { $supported == 0 } {
-    verbose -log "Non-stop mode not supported by the target, skipping tests"
-    return
-
-}
-
 mi_gdb_test "-gdb-set non-stop 1" ".*"
 mi_gdb_test "-gdb-set target-async 1" ".*"
 detect_async
 
-mi_runto main
+mi_gdb_test "200-break-insert -t main" ".*"
+# 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.*$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
+    }
+}
+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"
 
@@ -130,12 +145,9 @@ gdb_expect {
 sleep 1
 check_thread_states {"stopped" "stopped" "stopped"} "thread state, stop 4"
 
-# Note that the order of *running notifications below is 'unnatural'. This is because
-# we do only one out-of-line step at the time, so one thread gets resumed immediately
-# and another has to wait.
 send_gdb "-exec-continue --all\n"
 gdb_expect {
-    -re ".*\\*running,thread-id=\"3\".*\\*running,thread-id=\"1\".*\\*running,thread-id=\"2\"\r\n" {
+    -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"
     }
     timeout {
index 9b006ebf576dbb6e24078cc7fe690436575041f4..83acc8223b7b009adb7548f7d2b4fdd7d109baee 100644 (file)
@@ -42,7 +42,7 @@ void break_at_me (int id, int i)
 void *
 worker (void *arg)
 {
-  int id = (int)arg;
+  int id = *(int *)arg;
   int i = 0;
   
   /* When gdb is running, it sets hidden breakpoints in the thread
@@ -66,8 +66,11 @@ pthread_t
 create_thread (int id)
 {
   pthread_t tid;
+  /* This memory will be leaked, we don't care for a test.  */
+  int *id2 = malloc (sizeof (int));
+  *id2 = id;
 
-  if (pthread_create (&tid, PTHREAD_CREATE_NULL_ARG2, worker, (void *) id))
+  if (pthread_create (&tid, PTHREAD_CREATE_NULL_ARG2, worker, (void *) id2))
     {
       perror ("pthread_create 1");
       exit (1);