aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/py-newobjfileevent.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/python/py-newobjfileevent.c')
-rw-r--r--gdb/python/py-newobjfileevent.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/gdb/python/py-newobjfileevent.c b/gdb/python/py-newobjfileevent.c
index dcbd0fa..929d0ea 100644
--- a/gdb/python/py-newobjfileevent.c
+++ b/gdb/python/py-newobjfileevent.c
@@ -53,6 +53,42 @@ emit_new_objfile_event (struct objfile *objfile)
return -1;
}
+/* Create an event object representing a to-be-freed objfile. Return
+ nullptr, with the Python exception set, on error. */
+
+static gdbpy_ref<>
+create_free_objfile_event_object (struct objfile *objfile)
+{
+ gdbpy_ref<> objfile_event
+ = create_event_object (&free_objfile_event_object_type);
+ if (objfile_event == nullptr)
+ return nullptr;
+
+ gdbpy_ref<> py_objfile = objfile_to_objfile_object (objfile);
+ if (py_objfile == nullptr
+ || evpy_add_attribute (objfile_event.get (), "objfile",
+ py_objfile.get ()) < 0)
+ return nullptr;
+
+ return objfile_event;
+}
+
+/* Callback function which notifies observers when a free objfile
+ event occurs. This function will create a new Python event object.
+ Return -1 if emit fails. */
+
+int
+emit_free_objfile_event (struct objfile *objfile)
+{
+ if (evregpy_no_listeners_p (gdb_py_events.free_objfile))
+ return 0;
+
+ gdbpy_ref<> event = create_free_objfile_event_object (objfile);
+ if (event == nullptr)
+ return -1;
+ return evpy_emit_event (event.get (), gdb_py_events.free_objfile);
+}
+
/* Subroutine of emit_clear_objfiles_event to simplify it. */