diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2023-10-03 22:20:21 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2023-10-05 13:20:50 -0400 |
commit | 74daa597e743462d272522512efbe3f65659c4c0 (patch) | |
tree | 4a264692ec166433ac1cccae229566b85e1a48ac /gdb/tui | |
parent | 74ce4f8ecf8b9b3a41821eec73b8952447e84eef (diff) | |
download | gdb-74daa597e743462d272522512efbe3f65659c4c0.zip gdb-74daa597e743462d272522512efbe3f65659c4c0.tar.gz gdb-74daa597e743462d272522512efbe3f65659c4c0.tar.bz2 |
gdb: add all_objfiles_removed observer
The new_objfile observer is currently used to indicate both when a new
objfile is added to program space (when passed non-nullptr) and when all
objfiles of a program space were just removed (when passed nullptr).
I think this is confusing (and Andrew apparently thinks so too [1]).
Add a new "all_objfiles_removed" observer to remove the second role from
"new_objfile".
Some existing users of new_objfile do nothing if the passed objfile is
nullptr. For them, we can simply drop the nullptr check. For others,
add a new all_objfiles_removed callback, and refactor things a bit to
keep the existing behavior as much as possible.
Some callbacks relied on current_program_space, and following
the refactoring now use either objfile->pspace or the pspace passed to
all_objfiles_removed. I think this should be relatively safe, and in
general a step in the right direction.
On the notify side, I found only one call site to change from
new_objfile to all_objfiles_removed, in clear_symtab_users. It is not
entirely clear to me that this is entirely correct. clear_symtab_users
appears to be called in spots that don't remove all objfiles
(functions finish_new_objfile, remove_symbol_file_command, reread_symbols,
do_module_cleanups). But I think that this patch at least makes the
current code clearer.
[1] https://gitlab.com/gnutools/binutils-gdb/-/commit/a0a031bce0527b1521788b5dad640e7883b3a252
Change-Id: Icb648f72862e056267f30f44dd439bd4ec766f13
Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-hooks.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c index d67c3d7..6525f0f 100644 --- a/gdb/tui/tui-hooks.c +++ b/gdb/tui/tui-hooks.c @@ -49,13 +49,20 @@ #include "gdb_curses.h" -static void -tui_new_objfile_hook (struct objfile* objfile) +static void tui_on_objfiles_changed () { if (tui_active) tui_display_main (); } +static void +tui_new_objfile_hook (struct objfile* objfile) +{ tui_on_objfiles_changed (); } + +static void +tui_all_objfiles_removed (program_space *pspace) +{ tui_on_objfiles_changed (); } + /* Prevent recursion of deprecated_register_changed_hook(). */ static bool tui_refreshing_registers = false; @@ -283,4 +290,6 @@ _initialize_tui_hooks () { /* Install the permanent hooks. */ gdb::observers::new_objfile.attach (tui_new_objfile_hook, "tui-hooks"); + gdb::observers::all_objfiles_removed.attach (tui_all_objfiles_removed, + "tui-hooks"); } |