gdb/
authorYao Qi <yao@codesourcery.com>
Sat, 15 Dec 2012 03:14:22 +0000 (03:14 +0000)
committerYao Qi <yao@codesourcery.com>
Sat, 15 Dec 2012 03:14:22 +0000 (03:14 +0000)
2012-12-15  Yao Qi  <yao@codesourcery.com>

* remote.c (getpkt_or_notif_sane): Add one more argument in
its declaration.
(getpkt_or_notif_sane_1): Add one more argument.
(getpkt_sane): Update caller.
(getpkt_or_notif_sane): Likewise.  Update call
togetpkt_or_notif_sane_1.
(remote_wait_ns): Update caller.

gdb/ChangeLog
gdb/remote.c

index 28008da..6c6c205 100644 (file)
@@ -1,4 +1,14 @@
 2012-12-15  Yao Qi  <yao@codesourcery.com>
+
+       * remote.c (getpkt_or_notif_sane): Add one more argument in
+       its declaration.
+       (getpkt_or_notif_sane_1): Add one more argument.
+       (getpkt_sane): Update caller.
+       (getpkt_or_notif_sane): Likewise.  Update call
+       togetpkt_or_notif_sane_1.
+       (remote_wait_ns): Update caller.
+
+2012-12-15  Yao Qi  <yao@codesourcery.com>
            Doug Evans  <dje@google.com>
 
        * common/queue.h: New.
index 929d4f5..0a83944 100644 (file)
@@ -89,7 +89,7 @@ static void cleanup_sigint_signal_handler (void *dummy);
 static void initialize_sigint_signal_handler (void);
 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
-                                int forever);
+                                int forever, int *is_notif);
 
 static void handle_remote_sigint (int);
 static void handle_remote_sigint_twice (int);
@@ -5634,15 +5634,16 @@ remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
   struct remote_state *rs = get_remote_state ();
   struct stop_reply *stop_reply;
   int ret;
+  int is_notif = 0;
 
   /* If in non-stop mode, get out of getpkt even if a
      notification is received. */
 
   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
-                             0 /* forever */);
+                             0 /* forever */, &is_notif);
   while (1)
     {
-      if (ret != -1)
+      if (ret != -1 && !is_notif)
        switch (rs->buf[0])
          {
          case 'E':             /* Error of some sort.  */
@@ -5679,7 +5680,7 @@ remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
 
       /* Otherwise do a blocking wait.  */
       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
-                                 1 /* forever */);
+                                 1 /* forever */, &is_notif);
     }
 }
 
@@ -7410,11 +7411,13 @@ getpkt (char **buf,
    0, this function is allowed to time out gracefully and return an
    indication of this to the caller.  Otherwise return the number of
    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
-   enough reason to return to the caller.  */
+   enough reason to return to the caller.  *IS_NOTIF is an output
+   boolean that indicates whether *BUF holds a notification or not
+   (a regular packet).  */
 
 static int
 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
-                       int expecting_notif)
+                       int expecting_notif, int *is_notif)
 {
   struct remote_state *rs = get_remote_state ();
   int c;
@@ -7515,6 +7518,8 @@ getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
          /* Skip the ack char if we're in no-ack mode.  */
          if (!rs->noack_mode)
            serial_write (remote_desc, "+", 1);
+         if (is_notif != NULL)
+           *is_notif = 0;
          return val;
        }
 
@@ -7536,13 +7541,15 @@ getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
                                  str);
              do_cleanups (old_chain);
            }
+         if (is_notif != NULL)
+           *is_notif = 1;
 
          handle_notification (*buf);
 
          /* Notifications require no acknowledgement.  */
 
          if (expecting_notif)
-           return -1;
+           return val;
        }
     }
 }
@@ -7550,13 +7557,15 @@ getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
 static int
 getpkt_sane (char **buf, long *sizeof_buf, int forever)
 {
-  return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0);
+  return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
 }
 
 static int
-getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever)
+getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
+                     int *is_notif)
 {
-  return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1);
+  return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
+                                is_notif);
 }
 
 \f