aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/py-breakpoint.c48
-rw-r--r--gdb/python/py-events.h3
-rw-r--r--gdb/python/py-evts.c11
3 files changed, 62 insertions, 0 deletions
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index f2d4385..22de791 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -31,6 +31,7 @@
#include "arch-utils.h"
#include "language.h"
#include "location.h"
+#include "py-event.h"
/* Number of live breakpoints. */
static int bppy_live;
@@ -916,6 +917,14 @@ gdbpy_breakpoint_created (struct breakpoint *bp)
gdbpy_print_stack ();
}
+ if (!evregpy_no_listeners_p (gdb_py_events.breakpoint_created))
+ {
+ Py_INCREF (newbp);
+ if (evpy_emit_event ((PyObject *) newbp,
+ gdb_py_events.breakpoint_created) < 0)
+ gdbpy_print_stack ();
+ }
+
PyGILState_Release (state);
}
@@ -936,6 +945,15 @@ gdbpy_breakpoint_deleted (struct breakpoint *b)
bp_obj = bp->py_bp_object;
if (bp_obj)
{
+ if (!evregpy_no_listeners_p (gdb_py_events.breakpoint_deleted))
+ {
+ PyObject *bp_obj_alias = (PyObject *) bp_obj;
+ Py_INCREF (bp_obj_alias);
+ if (evpy_emit_event (bp_obj_alias,
+ gdb_py_events.breakpoint_deleted) < 0)
+ gdbpy_print_stack ();
+ }
+
bp_obj->bp = NULL;
--bppy_live;
Py_DECREF (bp_obj);
@@ -944,6 +962,35 @@ gdbpy_breakpoint_deleted (struct breakpoint *b)
PyGILState_Release (state);
}
+/* Callback that is used when a breakpoint is modified. */
+
+static void
+gdbpy_breakpoint_modified (struct breakpoint *b)
+{
+ int num = b->number;
+ PyGILState_STATE state;
+ struct breakpoint *bp = NULL;
+ gdbpy_breakpoint_object *bp_obj;
+
+ state = PyGILState_Ensure ();
+ bp = get_breakpoint (num);
+ if (bp)
+ {
+ PyObject *bp_obj = (PyObject *) bp->py_bp_object;
+ if (bp_obj)
+ {
+ if (!evregpy_no_listeners_p (gdb_py_events.breakpoint_modified))
+ {
+ Py_INCREF (bp_obj);
+ if (evpy_emit_event (bp_obj,
+ gdb_py_events.breakpoint_modified) < 0)
+ gdbpy_print_stack ();
+ }
+ }
+ }
+ PyGILState_Release (state);
+}
+
/* Initialize the Python breakpoint code. */
@@ -962,6 +1009,7 @@ gdbpy_initialize_breakpoints (void)
observer_attach_breakpoint_created (gdbpy_breakpoint_created);
observer_attach_breakpoint_deleted (gdbpy_breakpoint_deleted);
+ observer_attach_breakpoint_modified (gdbpy_breakpoint_modified);
/* Add breakpoint types constants. */
for (i = 0; pybp_codes[i].name; ++i)
diff --git a/gdb/python/py-events.h b/gdb/python/py-events.h
index 9ecee4c..1d74558 100644
--- a/gdb/python/py-events.h
+++ b/gdb/python/py-events.h
@@ -50,6 +50,9 @@ typedef struct
eventregistry_object *inferior_call;
eventregistry_object *memory_changed;
eventregistry_object *register_changed;
+ eventregistry_object *breakpoint_created;
+ eventregistry_object *breakpoint_deleted;
+ eventregistry_object *breakpoint_modified;
PyObject *module;
diff --git a/gdb/python/py-evts.c b/gdb/python/py-evts.c
index 95827e4..961c247 100644
--- a/gdb/python/py-evts.c
+++ b/gdb/python/py-evts.c
@@ -89,6 +89,17 @@ gdbpy_initialize_py_events (void)
if (add_new_registry (&gdb_py_events.clear_objfiles, "clear_objfiles") < 0)
return -1;
+ if (add_new_registry (&gdb_py_events.breakpoint_created,
+ "breakpoint_created") < 0)
+ return -1;
+
+ if (add_new_registry (&gdb_py_events.breakpoint_deleted,
+ "breakpoint_deleted") < 0)
+ return -1;
+ if (add_new_registry (&gdb_py_events.breakpoint_modified,
+ "breakpoint_modified") < 0)
+ return -1;
+
if (gdb_pymodule_addobject (gdb_module,
"events",
(PyObject *) gdb_py_events.module) < 0)