This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA] remove free_contents
- From: "Doug Evans" <dje at google dot com>
- To: "GDB Patches" <gdb-patches at sourceware dot org>
- Date: Thu, 3 Apr 2008 10:54:48 -0700
- Subject: [RFA] remove free_contents
Hi.
symtab.h contains this:
struct general_symbol_info
{
/* Name of the symbol. This is a required field. Storage for the
name is allocated on the objfile_obstack for the associated
objfile. ... */
char *name;
[...]
#define DEPRECATED_SYMBOL_NAME(symbol) (symbol)->ginfo.name
but symmisc.c does this:
static void
free_symtab_block (struct objfile *objfile, struct block *b)
{
[...]
xfree (DEPRECATED_SYMBOL_NAME (sym));
[...]
}
Either the comment is incomplete (i.e. some names are not allocated
on an objfile_obstack), or the code is wrong (or in this case, outdated).
There's a FIXME that says free_symtab_block is likely never used
and that is the case. free_contents is never used, which
is how free_symtab_block would get called.
2008-04-03 Doug Evans <dje@sebabeach.org>
* symtab.h (enum free_code): Delete free_contents, unused.
* symmisc.c (free_symtab_block): Delete.
(free_symtab, case free_code): Delete.
Index: symmisc.c
===================================================================
RCS file: /cvs/src/src/gdb/symmisc.c,v
retrieving revision 1.48
diff -u -p -r1.48 symmisc.c
--- symmisc.c 17 Mar 2008 15:05:42 -0000 1.48
+++ symmisc.c 3 Apr 2008 17:39:09 -0000
@@ -70,8 +70,6 @@ static int block_depth (struct block *);
static void print_partial_symbols (struct partial_symbol **, int,
char *, struct ui_file *);
-static void free_symtab_block (struct objfile *, struct block *);
-
void _initialize_symmisc (void);
struct print_symbol_args
@@ -82,37 +80,12 @@ struct print_symbol_args
};
static int print_symbol (void *);
-
-static void free_symtab_block (struct objfile *, struct block *);
-
-/* Free a struct block <- B and all the symbols defined in that block. */
-
-/* FIXME: carlton/2003-04-28: I don't believe this is currently ever
- used. */
-
-static void
-free_symtab_block (struct objfile *objfile, struct block *b)
-{
- struct dict_iterator iter;
- struct symbol *sym;
-
- ALL_BLOCK_SYMBOLS (b, iter, sym)
- {
- xfree (DEPRECATED_SYMBOL_NAME (sym));
- xfree (sym);
- }
-
- dict_free (BLOCK_DICT (b));
- xfree (b);
-}
-
/* Free all the storage associated with the struct symtab <- S.
- Note that some symtabs have contents malloc'ed structure by structure,
- while some have contents that all live inside one big block of memory,
- and some share the contents of another symbol table and so you should
- not free the contents on their behalf (except sometimes the linetable,
- which maybe per symtab even when the rest is not).
+ Note that some symtabs have contents that all live inside one big block of
+ memory, and some share the contents of another symbol table and so you
+ should not free the contents on their behalf (except sometimes the
+ linetable, which maybe per symtab even when the rest is not).
It is s->free_code that says which alternative to use. */
void
@@ -129,18 +102,6 @@ free_symtab (struct symtab *s)
Therefore, do nothing. */
break;
- case free_contents:
- /* Here all the contents were malloc'ed structure by structure
- and must be freed that way. */
- /* First free the blocks (and their symbols. */
- bv = BLOCKVECTOR (s);
- n = BLOCKVECTOR_NBLOCKS (bv);
- for (i = 0; i < n; i++)
- free_symtab_block (s->objfile, BLOCKVECTOR_BLOCK (bv, i));
- /* Free the blockvector itself. */
- xfree (bv);
- /* Also free the linetable. */
-
case free_linetable:
/* Everything will be freed either by our `free_func'
or by some other symtab, except for our linetable.
Index: symtab.h
===================================================================
RCS file: /cvs/src/src/gdb/symtab.h,v
retrieving revision 1.112
diff -u -p -r1.112 symtab.h
--- symtab.h 5 Feb 2008 22:17:40 -0000 1.112
+++ symtab.h 3 Apr 2008 17:39:10 -0000
@@ -809,7 +809,6 @@ struct symtab
char *dirname;
/* This component says how to free the data we point to:
- free_contents => do a tree walk and free each object.
free_nothing => do nothing; some other symtab will free
the data this one uses.
free_linetable => free just the linetable. FIXME: Is this redundant
@@ -817,7 +816,7 @@ struct symtab
enum free_code
{
- free_nothing, free_contents, free_linetable
+ free_nothing, free_linetable
}
free_code;