* tuiStack.c (tui_update_command): Rename _tuiUpdateLocation_command
[deliverable/binutils-gdb.git] / gdb / gdb-events.c
CommitLineData
104c1213 1/* User Interface Events.
349c5d5f
AC
2
3 Copyright 1999, 2001, 2002 Free Software Foundation, Inc.
104c1213
JM
4
5 Contributed by Cygnus Solutions.
6
afbfc876 7 This file is part of GDB.
104c1213 8
afbfc876
AC
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
104c1213 13
afbfc876
AC
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
104c1213 18
afbfc876
AC
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
104c1213
JM
22
23/* Work in progress */
24
25/* This file was created with the aid of ``gdb-events.sh''.
26
27 The bourn shell script ``gdb-events.sh'' creates the files
28 ``new-gdb-events.c'' and ``new-gdb-events.h and then compares
29 them against the existing ``gdb-events.[hc]''. Any differences
30 found being reported.
31
32 If editing this file, please also run gdb-events.sh and merge any
33 changes into that script. Conversely, when making sweeping changes
34 to this file, modifying gdb-events.sh and using its output may
35 prove easier. */
36
37
38#include "defs.h"
39#include "gdb-events.h"
40#include "gdbcmd.h"
41
104c1213
JM
42#if WITH_GDB_EVENTS
43static struct gdb_events null_event_hooks;
44static struct gdb_events queue_event_hooks;
45static struct gdb_events *current_event_hooks = &null_event_hooks;
46#endif
47
48int gdb_events_debug;
49
50#if WITH_GDB_EVENTS
51
52void
53breakpoint_create_event (int b)
54{
55 if (gdb_events_debug)
56 fprintf_unfiltered (gdb_stdlog, "breakpoint_create_event\n");
57 if (!current_event_hooks->breakpoint_create)
58 return;
59 current_event_hooks->breakpoint_create (b);
60}
61
62void
63breakpoint_delete_event (int b)
64{
65 if (gdb_events_debug)
66 fprintf_unfiltered (gdb_stdlog, "breakpoint_delete_event\n");
67 if (!current_event_hooks->breakpoint_delete)
68 return;
69 current_event_hooks->breakpoint_delete (b);
70}
71
72void
73breakpoint_modify_event (int b)
74{
75 if (gdb_events_debug)
76 fprintf_unfiltered (gdb_stdlog, "breakpoint_modify_event\n");
77 if (!current_event_hooks->breakpoint_modify)
78 return;
79 current_event_hooks->breakpoint_modify (b);
80}
81
ba9fe036
KS
82void
83tracepoint_create_event (int number)
84{
85 if (gdb_events_debug)
86 fprintf_unfiltered (gdb_stdlog, "tracepoint_create_event\n");
87 if (!current_event_hooks->tracepoint_create)
88 return;
89 current_event_hooks->tracepoint_create (number);
90}
91
92void
93tracepoint_delete_event (int number)
94{
95 if (gdb_events_debug)
96 fprintf_unfiltered (gdb_stdlog, "tracepoint_delete_event\n");
97 if (!current_event_hooks->tracepoint_delete)
98 return;
99 current_event_hooks->tracepoint_delete (number);
100}
101
102void
103tracepoint_modify_event (int number)
104{
105 if (gdb_events_debug)
106 fprintf_unfiltered (gdb_stdlog, "tracepoint_modify_event\n");
107 if (!current_event_hooks->tracepoint_modify)
108 return;
109 current_event_hooks->tracepoint_modify (number);
110}
111
67c2c32c
KS
112void
113architecture_changed_event (void)
114{
115 if (gdb_events_debug)
116 fprintf_unfiltered (gdb_stdlog, "architecture_changed_event\n");
117 if (!current_event_hooks->architecture_changed)
118 return;
119 current_event_hooks->architecture_changed ();
120}
121
e23792cc
KS
122void
123target_changed_event (void)
124{
125 if (gdb_events_debug)
126 fprintf_unfiltered (gdb_stdlog, "target_changed_event\n");
127 if (!current_event_hooks->target_changed)
128 return;
129 current_event_hooks->target_changed ();
130}
131
104c1213
JM
132#endif
133
134#if WITH_GDB_EVENTS
ed9a39eb 135struct gdb_events *
104c1213
JM
136set_gdb_event_hooks (struct gdb_events *vector)
137{
ed9a39eb 138 struct gdb_events *old_events = current_event_hooks;
104c1213
JM
139 if (vector == NULL)
140 current_event_hooks = &queue_event_hooks;
141 else
142 current_event_hooks = vector;
ed9a39eb 143 return old_events;
104c1213
JM
144}
145#endif
146
63d022e0
KS
147#if WITH_GDB_EVENTS
148void
149clear_gdb_event_hooks (void)
150{
151 set_gdb_event_hooks (&null_event_hooks);
152}
153#endif
154
104c1213 155enum gdb_event
afbfc876
AC
156{
157 breakpoint_create,
158 breakpoint_delete,
159 breakpoint_modify,
ba9fe036
KS
160 tracepoint_create,
161 tracepoint_delete,
162 tracepoint_modify,
67c2c32c 163 architecture_changed,
e23792cc 164 target_changed,
afbfc876
AC
165 nr_gdb_events
166};
104c1213
JM
167
168struct breakpoint_create
169 {
170 int b;
171 };
172
173struct breakpoint_delete
174 {
175 int b;
176 };
177
178struct breakpoint_modify
179 {
180 int b;
181 };
182
ba9fe036
KS
183struct tracepoint_create
184 {
185 int number;
186 };
187
188struct tracepoint_delete
189 {
190 int number;
191 };
192
193struct tracepoint_modify
194 {
195 int number;
196 };
197
104c1213
JM
198struct event
199 {
200 enum gdb_event type;
201 struct event *next;
202 union
203 {
afbfc876
AC
204 struct breakpoint_create breakpoint_create;
205 struct breakpoint_delete breakpoint_delete;
206 struct breakpoint_modify breakpoint_modify;
ba9fe036
KS
207 struct tracepoint_create tracepoint_create;
208 struct tracepoint_delete tracepoint_delete;
209 struct tracepoint_modify tracepoint_modify;
104c1213
JM
210 }
211 data;
212 };
213struct event *pending_events;
214struct event *delivering_events;
215
216static void
217append (struct event *new_event)
218{
219 struct event **event = &pending_events;
220 while ((*event) != NULL)
221 event = &((*event)->next);
222 (*event) = new_event;
223 (*event)->next = NULL;
224}
225
226static void
227queue_breakpoint_create (int b)
228{
229 struct event *event = XMALLOC (struct event);
230 event->type = breakpoint_create;
231 event->data.breakpoint_create.b = b;
232 append (event);
233}
234
235static void
236queue_breakpoint_delete (int b)
237{
238 struct event *event = XMALLOC (struct event);
239 event->type = breakpoint_delete;
240 event->data.breakpoint_delete.b = b;
241 append (event);
242}
243
244static void
245queue_breakpoint_modify (int b)
246{
247 struct event *event = XMALLOC (struct event);
248 event->type = breakpoint_modify;
249 event->data.breakpoint_modify.b = b;
250 append (event);
251}
252
ba9fe036
KS
253static void
254queue_tracepoint_create (int number)
255{
256 struct event *event = XMALLOC (struct event);
257 event->type = tracepoint_create;
258 event->data.tracepoint_create.number = number;
259 append (event);
260}
261
262static void
263queue_tracepoint_delete (int number)
264{
265 struct event *event = XMALLOC (struct event);
266 event->type = tracepoint_delete;
267 event->data.tracepoint_delete.number = number;
268 append (event);
269}
270
271static void
272queue_tracepoint_modify (int number)
273{
274 struct event *event = XMALLOC (struct event);
275 event->type = tracepoint_modify;
276 event->data.tracepoint_modify.number = number;
277 append (event);
278}
279
67c2c32c
KS
280static void
281queue_architecture_changed (void)
282{
283 struct event *event = XMALLOC (struct event);
284 event->type = architecture_changed;
285 append (event);
286}
287
e23792cc
KS
288static void
289queue_target_changed (void)
290{
291 struct event *event = XMALLOC (struct event);
292 event->type = target_changed;
293 append (event);
294}
295
104c1213
JM
296void
297gdb_events_deliver (struct gdb_events *vector)
298{
299 /* Just zap any events left around from last time. */
300 while (delivering_events != NULL)
301 {
302 struct event *event = delivering_events;
303 delivering_events = event->next;
b8c9b27d 304 xfree (event);
104c1213
JM
305 }
306 /* Process any pending events. Because one of the deliveries could
307 bail out we move everything off of the pending queue onto an
308 in-progress queue where it can, later, be cleaned up if
309 necessary. */
310 delivering_events = pending_events;
311 pending_events = NULL;
312 while (delivering_events != NULL)
313 {
314 struct event *event = delivering_events;
315 switch (event->type)
afbfc876
AC
316 {
317 case breakpoint_create:
318 vector->breakpoint_create
319 (event->data.breakpoint_create.b);
320 break;
321 case breakpoint_delete:
322 vector->breakpoint_delete
323 (event->data.breakpoint_delete.b);
324 break;
325 case breakpoint_modify:
326 vector->breakpoint_modify
327 (event->data.breakpoint_modify.b);
328 break;
ba9fe036
KS
329 case tracepoint_create:
330 vector->tracepoint_create
331 (event->data.tracepoint_create.number);
332 break;
333 case tracepoint_delete:
334 vector->tracepoint_delete
335 (event->data.tracepoint_delete.number);
336 break;
337 case tracepoint_modify:
338 vector->tracepoint_modify
339 (event->data.tracepoint_modify.number);
340 break;
67c2c32c
KS
341 case architecture_changed:
342 vector->architecture_changed ();
343 break;
e23792cc
KS
344 case target_changed:
345 vector->target_changed ();
346 break;
afbfc876 347 }
104c1213 348 delivering_events = event->next;
b8c9b27d 349 xfree (event);
104c1213
JM
350 }
351}
352
353void _initialize_gdb_events (void);
354void
355_initialize_gdb_events (void)
356{
5d161b24 357 struct cmd_list_element *c;
104c1213
JM
358#if WITH_GDB_EVENTS
359 queue_event_hooks.breakpoint_create = queue_breakpoint_create;
360 queue_event_hooks.breakpoint_delete = queue_breakpoint_delete;
361 queue_event_hooks.breakpoint_modify = queue_breakpoint_modify;
ba9fe036
KS
362 queue_event_hooks.tracepoint_create = queue_tracepoint_create;
363 queue_event_hooks.tracepoint_delete = queue_tracepoint_delete;
364 queue_event_hooks.tracepoint_modify = queue_tracepoint_modify;
67c2c32c 365 queue_event_hooks.architecture_changed = queue_architecture_changed;
e23792cc 366 queue_event_hooks.target_changed = queue_target_changed;
afbfc876 367#endif
5d161b24 368
afbfc876
AC
369 c = add_set_cmd ("eventdebug", class_maintenance, var_zinteger,
370 (char *) (&gdb_events_debug), "Set event debugging.\n\
5d161b24 371When non-zero, event/notify debugging is enabled.", &setlist);
afbfc876
AC
372 deprecate_cmd (c, "set debug event");
373 deprecate_cmd (add_show_from_set (c, &showlist), "show debug event");
5d161b24
DB
374
375 add_show_from_set (add_set_cmd ("event",
afbfc876
AC
376 class_maintenance,
377 var_zinteger,
378 (char *) (&gdb_events_debug),
379 "Set event debugging.\n\
5d161b24 380When non-zero, event/notify debugging is enabled.", &setdebuglist),
afbfc876 381 &showdebuglist);
104c1213 382}
This page took 0.201025 seconds and 4 git commands to generate.