aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/py-inferior.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2022-06-20 11:30:04 -0600
committerTom Tromey <tromey@adacore.com>2022-07-18 11:25:34 -0600
commit0b4fe76f956293778f109764911a0b14dc944f5d (patch)
treea49d8074a33c86ea64a1f797ab3ecb99ad0597c4 /gdb/python/py-inferior.c
parent23948f56021f46bb2bdee7afad074aafe8329230 (diff)
downloadgdb-0b4fe76f956293778f109764911a0b14dc944f5d.zip
gdb-0b4fe76f956293778f109764911a0b14dc944f5d.tar.gz
gdb-0b4fe76f956293778f109764911a0b14dc944f5d.tar.bz2
Add gdb.free_objfile event registry
Currently, Python code can use event registries to detect when gdb loads a new objfile, and when gdb clears the objfile list. However, there's no way to detect the removal of an objfile, say when the inferior calls dlclose. This patch adds a gdb.free_objfile event registry and arranges for an event to be emitted in this case.
Diffstat (limited to 'gdb/python/py-inferior.c')
-rw-r--r--gdb/python/py-inferior.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index ebcd5b0..61ed342 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -197,6 +197,20 @@ python_new_objfile (struct objfile *objfile)
}
}
+/* Emit a Python event when an objfile is about to be removed. */
+
+static void
+python_free_objfile (struct objfile *objfile)
+{
+ if (!gdb_python_initialized)
+ return;
+
+ gdbpy_enter enter_py (objfile->arch ());
+
+ if (emit_free_objfile_event (objfile) < 0)
+ gdbpy_print_stack ();
+}
+
/* Return a reference to the Python object of type Inferior
representing INFERIOR. If the object has already been created,
return it and increment the reference count, otherwise, create it.
@@ -853,6 +867,7 @@ gdbpy_initialize_inferior (void)
gdb::observers::new_objfile.attach
(python_new_objfile, "py-inferior",
{ &auto_load_new_objfile_observer_token });
+ gdb::observers::free_objfile.attach (python_free_objfile, "py-inferior");
gdb::observers::inferior_added.attach (python_new_inferior, "py-inferior");
gdb::observers::inferior_removed.attach (python_inferior_deleted,
"py-inferior");