From 00174a8637c5c42b77b190c38b1afa94c4c14517 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 4 Apr 2011 15:19:59 +0000 Subject: [PATCH] * symtab.h (free_symtab): Remove. (forget_cached_source_info_for_objfile): Declare. * symmisc.c (free_symtab): Remove. * source.c (forget_cached_source_info_for_objfile): New function. (forget_cached_source_info): Use it. * objfiles.c (free_objfile): Simplify check before calling clear_current_source_symtab_and_line. Call forget_cached_source_info_for_objfile. --- gdb/ChangeLog | 11 +++++++++++ gdb/objfiles.c | 10 ++++------ gdb/source.c | 43 +++++++++++++++++++++++++++---------------- gdb/symmisc.c | 12 ------------ gdb/symtab.h | 3 +-- 5 files changed, 43 insertions(+), 36 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e04420790a0..3ced718b396 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2011-04-04 Tom Tromey + + * symtab.h (free_symtab): Remove. + (forget_cached_source_info_for_objfile): Declare. + * symmisc.c (free_symtab): Remove. + * source.c (forget_cached_source_info_for_objfile): New function. + (forget_cached_source_info): Use it. + * objfiles.c (free_objfile): Simplify check before calling + clear_current_source_symtab_and_line. Call + forget_cached_source_info_for_objfile. + 2011-04-04 Tom Tromey * mdebugread.c (psymtab_to_symtab_1): Copy linetable to obstack. diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 6c1c91a3459..1664e429f0a 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -632,15 +632,13 @@ free_objfile (struct objfile *objfile) { struct symtab_and_line cursal = get_current_source_symtab_and_line (); - struct symtab *s; - ALL_OBJFILE_SYMTABS (objfile, s) - { - if (s == cursal.symtab) - clear_current_source_symtab_and_line (); - } + if (cursal.symtab && cursal.symtab->objfile == objfile) + clear_current_source_symtab_and_line (); } + forget_cached_source_info_for_objfile (objfile); + /* The last thing we do is free the objfile struct itself. */ xfree (objfile->name); diff --git a/gdb/source.c b/gdb/source.c index 81e4b4f38a3..70890e150d4 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -335,6 +335,32 @@ show_directories_command (struct ui_file *file, int from_tty, show_directories_1 (NULL, from_tty); } +/* Forget line positions and file names for the symtabs in a + particular objfile. */ + +void +forget_cached_source_info_for_objfile (struct objfile *objfile) +{ + struct symtab *s; + + ALL_OBJFILE_SYMTABS (objfile, s) + { + if (s->line_charpos != NULL) + { + xfree (s->line_charpos); + s->line_charpos = NULL; + } + if (s->fullname != NULL) + { + xfree (s->fullname); + s->fullname = NULL; + } + + if (objfile->sf) + objfile->sf->qf->forget_cached_source_info (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. */ @@ -349,22 +375,7 @@ forget_cached_source_info (void) ALL_PSPACES (pspace) ALL_PSPACE_OBJFILES (pspace, objfile) { - for (s = objfile->symtabs; s != NULL; s = s->next) - { - if (s->line_charpos != NULL) - { - xfree (s->line_charpos); - s->line_charpos = NULL; - } - if (s->fullname != NULL) - { - xfree (s->fullname); - s->fullname = NULL; - } - } - - if (objfile->sf) - objfile->sf->qf->forget_cached_source_info (objfile); + forget_cached_source_info_for_objfile (objfile); } last_source_visited = NULL; diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 5120162f9be..117a22bf29d 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -79,18 +79,6 @@ struct print_symbol_args static int print_symbol (void *); -/* Free all the storage associated with the struct symtab <- S. */ - -void -free_symtab (struct symtab *s) -{ - /* Free source-related stuff. */ - if (s->line_charpos != NULL) - xfree (s->line_charpos); - if (s->fullname != NULL) - xfree (s->fullname); - xfree (s); -} void print_symbol_bcache_statistics (void) diff --git a/gdb/symtab.h b/gdb/symtab.h index e39f049b16b..59bbe2450f3 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1165,8 +1165,6 @@ void maintenance_check_symtabs (char *, int); void maintenance_print_statistics (char *, int); -extern void free_symtab (struct symtab *); - /* Symbol-reading stuff in symfile.c and solib.c. */ extern void clear_solib (void); @@ -1177,6 +1175,7 @@ extern int identify_source_line (struct symtab *, int, int, CORE_ADDR); extern void print_source_lines (struct symtab *, int, int, int); +extern void forget_cached_source_info_for_objfile (struct objfile *); extern void forget_cached_source_info (void); extern void select_source_symtab (struct symtab *); -- 2.39.2