Merge forget_cached_source_info_for_objfile into objfile method forget_cached_source_info_for_objfile does some objfile-specific work and then calls objfile::forget_cached_source_info. It seems better to me to just have the method do all the work.
diff --git a/gdb/objfiles.c b/gdb/objfiles.c index ed29131..8e7be8e 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c
@@ -534,7 +534,7 @@ objfile::~objfile () /* It still may reference data modules have associated with the objfile and the symbol file data. */ - forget_cached_source_info_for_objfile (this); + forget_cached_source_info (); breakpoint_free_objfile (this); btrace_free_objfile (this);
diff --git a/gdb/source.c b/gdb/source.c index ca0e8d5..faf0be6 100644 --- a/gdb/source.c +++ b/gdb/source.c
@@ -421,33 +421,11 @@ show_directories_command (struct ui_file *file, int from_tty, /* See source.h. */ void -forget_cached_source_info_for_objfile (struct objfile *objfile) -{ - for (compunit_symtab *cu : objfile->compunits ()) - { - for (symtab *s : cu->filetabs ()) - { - if (s->fullname != NULL) - { - xfree (s->fullname); - s->fullname = NULL; - } - } - } - - objfile->forget_cached_source_info (); -} - -/* See source.h. */ - -void forget_cached_source_info (void) { for (struct program_space *pspace : program_spaces) for (objfile *objfile : pspace->objfiles ()) - { - forget_cached_source_info_for_objfile (objfile); - } + objfile->forget_cached_source_info (); g_source_cache.clear (); last_source_visited = NULL;
diff --git a/gdb/source.h b/gdb/source.h index dd6f58c..d3e612c 100644 --- a/gdb/source.h +++ b/gdb/source.h
@@ -197,10 +197,6 @@ class source_lines_range extern void print_source_lines (struct symtab *s, source_lines_range r, print_source_lines_flags flags); -/* Forget line positions and file names for the symtabs in a - particular objfile. */ -extern void forget_cached_source_info_for_objfile (struct objfile *); - /* Forget what we learned about line positions in source files, and which directories contain them; must check again now since files may be found in a different directory now. */
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c index efc6bcd..9db5c47 100644 --- a/gdb/symfile-debug.c +++ b/gdb/symfile-debug.c
@@ -155,6 +155,18 @@ objfile::forget_cached_source_info () gdb_printf (gdb_stdlog, "qf->forget_cached_source_info (%s)\n", objfile_debug_name (this)); + for (compunit_symtab *cu : compunits ()) + { + for (symtab *s : cu->filetabs ()) + { + if (s->fullname != NULL) + { + xfree (s->fullname); + s->fullname = NULL; + } + } + } + for (const auto &iter : qf_require_partial_symbols ()) iter->forget_cached_source_info (this); }