mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 23:39:35 +08:00
gdb/
* remote.c (discard_pending_stop_replies_in_queue): Update declaration. (struct stop_reply) <rs>: New field. (remove_stop_reply_of_remote_state): New function. (discard_pending_stop_replies_in_queue): Add parameter 'rs'. Callers update. Pass remove_stop_reply_of_remote_state to QUEUE_iterate. (remote_parse_stop_reply): Initialize field 'rs'.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2013-10-11 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
|
* remote.c (discard_pending_stop_replies_in_queue): Update
|
||||||
|
declaration.
|
||||||
|
(struct stop_reply) <rs>: New field.
|
||||||
|
(remove_stop_reply_of_remote_state): New function.
|
||||||
|
(discard_pending_stop_replies_in_queue): Add parameter 'rs'.
|
||||||
|
Callers update. Pass remove_stop_reply_of_remote_state to
|
||||||
|
QUEUE_iterate.
|
||||||
|
(remote_parse_stop_reply): Initialize field 'rs'.
|
||||||
|
|
||||||
2013-10-10 Will Newton <will.newton@linaro.org>
|
2013-10-10 Will Newton <will.newton@linaro.org>
|
||||||
|
|
||||||
* aarch64-linux-tdep.c (aarch64_linux_init_abi): Call
|
* aarch64-linux-tdep.c (aarch64_linux_init_abi): Call
|
||||||
|
39
gdb/remote.c
39
gdb/remote.c
@ -220,7 +220,7 @@ struct stop_reply;
|
|||||||
static void stop_reply_xfree (struct stop_reply *);
|
static void stop_reply_xfree (struct stop_reply *);
|
||||||
static void remote_parse_stop_reply (char *, struct stop_reply *);
|
static void remote_parse_stop_reply (char *, struct stop_reply *);
|
||||||
static void push_stop_reply (struct stop_reply *);
|
static void push_stop_reply (struct stop_reply *);
|
||||||
static void discard_pending_stop_replies_in_queue (void);
|
static void discard_pending_stop_replies_in_queue (struct remote_state *);
|
||||||
static int peek_stop_reply (ptid_t ptid);
|
static int peek_stop_reply (ptid_t ptid);
|
||||||
|
|
||||||
static void remote_async_inferior_event_handler (gdb_client_data);
|
static void remote_async_inferior_event_handler (gdb_client_data);
|
||||||
@ -3069,7 +3069,7 @@ remote_close (void)
|
|||||||
|
|
||||||
/* We are closing the remote target, so we should discard
|
/* We are closing the remote target, so we should discard
|
||||||
everything of this target. */
|
everything of this target. */
|
||||||
discard_pending_stop_replies_in_queue ();
|
discard_pending_stop_replies_in_queue (rs);
|
||||||
|
|
||||||
if (remote_async_inferior_event_token)
|
if (remote_async_inferior_event_token)
|
||||||
delete_async_event_handler (&remote_async_inferior_event_token);
|
delete_async_event_handler (&remote_async_inferior_event_token);
|
||||||
@ -5274,6 +5274,11 @@ typedef struct stop_reply
|
|||||||
/* The identifier of the thread about this event */
|
/* The identifier of the thread about this event */
|
||||||
ptid_t ptid;
|
ptid_t ptid;
|
||||||
|
|
||||||
|
/* The remote state this event associated is with. When the remote
|
||||||
|
connection, represented by a remote_state object, is closed,
|
||||||
|
all the associated stop_reply events should be released. */
|
||||||
|
struct remote_state *rs;
|
||||||
|
|
||||||
struct target_waitstatus ws;
|
struct target_waitstatus ws;
|
||||||
|
|
||||||
/* Expedited registers. This makes remote debugging a bit more
|
/* Expedited registers. This makes remote debugging a bit more
|
||||||
@ -5434,19 +5439,40 @@ discard_pending_stop_replies (struct inferior *inf)
|
|||||||
remove_stop_reply_for_inferior, ¶m);
|
remove_stop_reply_for_inferior, ¶m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Discard the stop replies in stop_reply_queue. */
|
/* If its remote state is equal to the given remote state,
|
||||||
|
remove EVENT from the stop reply queue. */
|
||||||
|
|
||||||
|
static int
|
||||||
|
remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
|
||||||
|
QUEUE_ITER (stop_reply_p) *iter,
|
||||||
|
stop_reply_p event,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
struct queue_iter_param *param = data;
|
||||||
|
struct remote_state *rs = param->input;
|
||||||
|
|
||||||
|
if (event->rs == rs)
|
||||||
|
{
|
||||||
|
stop_reply_xfree (event);
|
||||||
|
QUEUE_remove_elem (stop_reply_p, q, iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discard the stop replies for RS in stop_reply_queue. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
discard_pending_stop_replies_in_queue (void)
|
discard_pending_stop_replies_in_queue (struct remote_state *rs)
|
||||||
{
|
{
|
||||||
struct queue_iter_param param;
|
struct queue_iter_param param;
|
||||||
|
|
||||||
param.input = NULL;
|
param.input = rs;
|
||||||
param.output = NULL;
|
param.output = NULL;
|
||||||
/* Discard the stop replies we have already pulled with
|
/* Discard the stop replies we have already pulled with
|
||||||
vStopped. */
|
vStopped. */
|
||||||
QUEUE_iterate (stop_reply_p, stop_reply_queue,
|
QUEUE_iterate (stop_reply_p, stop_reply_queue,
|
||||||
remove_stop_reply_for_inferior, ¶m);
|
remove_stop_reply_of_remote_state, ¶m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A parameter to pass data in and out. */
|
/* A parameter to pass data in and out. */
|
||||||
@ -5559,6 +5585,7 @@ remote_parse_stop_reply (char *buf, struct stop_reply *event)
|
|||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
event->ptid = null_ptid;
|
event->ptid = null_ptid;
|
||||||
|
event->rs = get_remote_state ();
|
||||||
event->ws.kind = TARGET_WAITKIND_IGNORE;
|
event->ws.kind = TARGET_WAITKIND_IGNORE;
|
||||||
event->ws.value.integer = 0;
|
event->ws.value.integer = 0;
|
||||||
event->stopped_by_watchpoint_p = 0;
|
event->stopped_by_watchpoint_p = 0;
|
||||||
|
Reference in New Issue
Block a user