* [RFA] remove free_contents
@ 2008-04-03 18:13 Doug Evans
2008-04-03 18:58 ` Daniel Jacobowitz
0 siblings, 1 reply; 2+ messages in thread
From: Doug Evans @ 2008-04-03 18:13 UTC (permalink / raw)
To: GDB Patches
[-- Attachment #1: Type: text/plain, Size: 767 bytes --]
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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: gdb-080403-free-contents.patch --]
[-- Type: text/x-patch; name=gdb-080403-free-contents.patch, Size: 3623 bytes --]
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 *);
\f
-
-/* 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;
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [RFA] remove free_contents
2008-04-03 18:13 [RFA] remove free_contents Doug Evans
@ 2008-04-03 18:58 ` Daniel Jacobowitz
0 siblings, 0 replies; 2+ messages in thread
From: Daniel Jacobowitz @ 2008-04-03 18:58 UTC (permalink / raw)
To: Doug Evans; +Cc: GDB Patches
On Thu, Apr 03, 2008 at 10:54:48AM -0700, Doug Evans wrote:
> 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).
Both possible, I think, as long as the name has lifetime at least as
long as the objfile_obstack. It could come from mmaped dwarf
sections, for instance (if we get around to making that work... I see
that conversation on a patch to do this trailed off).
> 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.
OK, thanks.
--
Daniel Jacobowitz
CodeSourcery
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-04-03 18:13 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-03 18:13 [RFA] remove free_contents Doug Evans
2008-04-03 18:58 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox