summaryrefslogtreecommitdiff
path: root/gdb/mi/mi-cmd-break.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/mi/mi-cmd-break.c')
-rw-r--r--gdb/mi/mi-cmd-break.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c
index 1bfb5672b76..96e38a90ea0 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);
}