This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
FYI: remove free_symtab
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 04 Apr 2011 09:18:46 -0600
- Subject: FYI: remove free_symtab
I'm checking this in on the trunk.
After the preceding patches, it is obvious that `free_symtab' is dead:
it had no callers in the tree, but now it is clear that it isn't needed
even in theory. So, this patch removes it.
Currently, nothing frees the `line_charpos' and `fullname' fields of
symtabs in a dying objfile. This patch clears up this memory leak by
freeing these from free_objfile.
Built and regtested on x86-64 (compile farm).
Tom
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.
Index: objfiles.c
===================================================================
RCS file: /cvs/src/src/gdb/objfiles.c,v
retrieving revision 1.128
diff -u -r1.128 objfiles.c
--- objfiles.c 4 Apr 2011 14:37:16 -0000 1.128
+++ objfiles.c 4 Apr 2011 15:17:54 -0000
@@ -632,15 +632,13 @@
{
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);
Index: source.c
===================================================================
RCS file: /cvs/src/src/gdb/source.c,v
retrieving revision 1.122
diff -u -r1.122 source.c
--- source.c 4 Apr 2011 14:18:11 -0000 1.122
+++ source.c 4 Apr 2011 15:17:55 -0000
@@ -335,6 +335,32 @@
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 @@
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;
Index: symmisc.c
===================================================================
RCS file: /cvs/src/src/gdb/symmisc.c,v
retrieving revision 1.79
diff -u -r1.79 symmisc.c
--- symmisc.c 4 Apr 2011 15:11:19 -0000 1.79
+++ symmisc.c 4 Apr 2011 15:17:55 -0000
@@ -79,18 +79,6 @@
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)
Index: symtab.h
===================================================================
RCS file: /cvs/src/src/gdb/symtab.h,v
retrieving revision 1.176
diff -u -r1.176 symtab.h
--- symtab.h 4 Apr 2011 15:11:19 -0000 1.176
+++ symtab.h 4 Apr 2011 15:17:55 -0000
@@ -1165,8 +1165,6 @@
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 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 *);