diff options
Diffstat (limited to 'gdb/mi/mi-cmd-break.c')
-rw-r--r-- | gdb/mi/mi-cmd-break.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c index 1bfb567..96e38a9 100644 --- a/gdb/mi/mi-cmd-break.c +++ b/gdb/mi/mi-cmd-break.c @@ -24,32 +24,32 @@ #include "breakpoint.h" #include "gdb_string.h" #include "mi-getopt.h" -#include "gdb-events.h" #include "gdb.h" #include "exceptions.h" +#include "observer.h" enum { FROM_TTY = 0 }; -/* Output a single breakpoint. */ +/* True if MI breakpoint observers have been registered. */ + +static int mi_breakpoint_observers_installed; + +/* Control whether breakpoint_notify may act. */ + +static int mi_can_breakpoint_notify; + +/* Output a single breakpoint, when allowed. */ static void breakpoint_notify (int b) { - gdb_breakpoint_query (uiout, b, NULL); + if (mi_can_breakpoint_notify) + gdb_breakpoint_query (uiout, b, NULL); } - -struct gdb_events breakpoint_hooks = -{ - breakpoint_notify, - breakpoint_notify, - breakpoint_notify, -}; - - enum bp_type { REG_BP, @@ -132,7 +132,15 @@ mi_cmd_break_insert (char *command, char **argv, int argc) address = argv[optind]; /* Now we have what we need, let's insert the breakpoint! */ - old_hooks = deprecated_set_gdb_event_hooks (&breakpoint_hooks); + if (! mi_breakpoint_observers_installed) + { + observer_attach_breakpoint_created (breakpoint_notify); + observer_attach_breakpoint_modified (breakpoint_notify); + observer_attach_breakpoint_deleted (breakpoint_notify); + mi_breakpoint_observers_installed = 1; + } + + mi_can_breakpoint_notify = 1; /* Make sure we restore hooks even if exception is thrown. */ TRY_CATCH (e, RETURN_MASK_ALL) { @@ -163,7 +171,7 @@ mi_cmd_break_insert (char *command, char **argv, int argc) _("mi_cmd_break_insert: Bad switch.")); } } - deprecated_set_gdb_event_hooks (old_hooks); + mi_can_breakpoint_notify = 0; if (e.reason < 0) throw_exception (e); } |