diff options
author | Tom Tromey <tromey@adacore.com> | 2022-06-20 11:30:04 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2022-07-18 11:25:34 -0600 |
commit | 0b4fe76f956293778f109764911a0b14dc944f5d (patch) | |
tree | a49d8074a33c86ea64a1f797ab3ecb99ad0597c4 /gdb/python/py-inferior.c | |
parent | 23948f56021f46bb2bdee7afad074aafe8329230 (diff) | |
download | gdb-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.c | 15 |
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"); |