diff options
author | Yao Qi <yao@codesourcery.com> | 2012-12-15 02:48:18 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2012-12-15 02:48:18 +0000 |
commit | 14a0047001cd25ca665232ace7eb3a079e00d77e (patch) | |
tree | 49f6e0e8ef4fed2eedfb2396ab42fc2aaa46f882 /gdb/gdbserver/notif.h | |
parent | dbb0cf06a3f9adb818e9dfd971da0258114e589e (diff) | |
download | fsf-binutils-gdb-14a0047001cd25ca665232ace7eb3a079e00d77e.zip fsf-binutils-gdb-14a0047001cd25ca665232ace7eb3a079e00d77e.tar.gz fsf-binutils-gdb-14a0047001cd25ca665232ace7eb3a079e00d77e.tar.bz2 |
gdb/gdbserver/
2012-12-15 Yao Qi <yao@codesourcery.com>
* Makefile.in (OBS): Add notif.o.
* notif.c, notif.h: New.
* server.c: Include "notif.h".
(struct vstop_notif) <next>: Remove.
<base>: New field.
(queue_stop_reply): Update.
(push_event, send_next_stop_reply): Remove.
(discard_queued_stop_replies): Update.
(notif_stop): New variable.
(handle_v_stopped): Remove.
(handle_v_requests): Don't call handle_v_stopped. Call
handle_ack_notif instead.
(queue_stop_reply_callback): Call notif_event_enque instead
of queue_stop_reply.
(handle_status): Don't call send_next_stop_reply, call
notif_write_event instead.
(kill_inferior_callback): Likewise.
(detach_or_kill_inferior_callback): Likewise.
(main): Call initialize_notif.
(process_serial_event): Call QUEUE_is_empty.
(handle_target_event): Call notif_push instead of push event.
* server.h (push_event): Remove declaration.
Diffstat (limited to 'gdb/gdbserver/notif.h')
-rw-r--r-- | gdb/gdbserver/notif.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/gdb/gdbserver/notif.h b/gdb/gdbserver/notif.h new file mode 100644 index 0000000..b76ecfa --- /dev/null +++ b/gdb/gdbserver/notif.h @@ -0,0 +1,65 @@ +/* Notification to GDB. + Copyright (C) 1989, 1993-1995, 1997-2000, 2002-2012 Free Software + Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "ptid.h" +#include "server.h" +#include "target.h" +#include "queue.h" + +/* Structure holding information related to a single event. We + keep a queue of these to push to GDB. It can be extended if + the event of given notification contains more information. */ + +typedef struct notif_event +{ +} *notif_event_p; + +DECLARE_QUEUE_P (notif_event_p); + +/* A type notification to GDB. An object of 'struct notif_server' + represents a type of notification. */ + +typedef struct notif_server +{ + /* The name of ack packet, for example, 'vStopped'. */ + const char *ack_name; + + /* The notification packet, for example, '%Stop'. Note that '%' is + not in 'notif_name'. */ + const char *notif_name; + + /* A queue of events to GDB. A new notif_event can be enque'ed + into QUEUE at any appropriate time, and the notif_reply is + deque'ed only when the ack from GDB arrives. */ + QUEUE (notif_event_p) *queue; + + /* Write event EVENT to OWN_BUF. */ + void (*write) (struct notif_event *event, char *own_buf); +} *notif_server_p; + +extern struct notif_server notif_stop; + +int handle_notif_ack (char *own_buf, int packet_len); +void notif_write_event (struct notif_server *notif, char *own_buf); + +void notif_push (struct notif_server *np, struct notif_event *event); +void notif_event_enque (struct notif_server *notif, + struct notif_event *event); + +void initialize_notif (void); |