[PATCH 6/8] Handle notification for all-stop.
Yao Qi
yao@codesourcery.com
Tue Dec 11 06:41:00 GMT 2012
Now, it is possible to get notifications in all-stop mode, so we
should use 'getpkt_or_notif_sane' instead of 'getpkt_sane'. Beside
this, once a notification arrives, GDB will return to core as this
event is not interesting and keep waiting back again.
gdb:
2012-12-11 Yao Qi <yao@codesourcery.com>
* remote.c (remote_wait_as): Call 'getpkt_or_notif_sane' instead
of 'getpkt_sane'.
Return minus_one_ptid early if gets a notification.
---
gdb/remote.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/gdb/remote.c b/gdb/remote.c
index f3ab5ce..5c8b20e 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -5768,6 +5768,7 @@ remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
else
{
int ret;
+ int is_notif;
if (!target_is_async_p ())
{
@@ -5785,7 +5786,15 @@ remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
_never_ wait for ever -> test on target_is_async_p().
However, before we do that we need to ensure that the caller
knows how to take the target into/out of async mode. */
- ret = getpkt_sane (&rs->buf, &rs->buf_size, wait_forever_enabled_p);
+ ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
+ wait_forever_enabled_p, &is_notif);
+
+ if (ret != -1 && is_notif)
+ {
+ /* The target didn't really stop; keep waiting. */
+ rs->waiting_for_stop_reply = 1;
+ return minus_one_ptid;
+ }
if (!target_is_async_p ())
signal (SIGINT, ofunc);
}
--
1.7.7.6
More information about the Gdb-patches
mailing list