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.
This commit is contained in:
Yao Qi 2012-12-15 03:14:22 +00:00
parent 14a0047001
commit fee9eda9ee
2 changed files with 29 additions and 10 deletions

View File

@ -1,3 +1,13 @@
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>

View 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);
}