* 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.
This commit is contained in:
Tom Tromey 2011-04-04 15:19:59 +00:00
parent 30cc903e7c
commit 00174a8637
5 changed files with 43 additions and 36 deletions

View File

@ -1,3 +1,14 @@
2011-04-04 Tom Tromey <tromey@redhat.com>
* 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 <tromey@redhat.com>
* mdebugread.c (psymtab_to_symtab_1): Copy linetable to obstack.

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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 *);