diff options
author | Sami Wagiaalla <swagiaal@redhat.com> | 2010-08-31 20:10:42 +0000 |
---|---|---|
committer | Sami Wagiaalla <swagiaal@redhat.com> | 2010-08-31 20:10:42 +0000 |
commit | 710e1a31c41cfebe0c425d54efa309bb7054cbc2 (patch) | |
tree | 3f8172cd66cd3b0d4183083db745b74a727d1f1f /gdb/psymtab.c | |
parent | 6438229074032cc548209c05c42bd57873a72651 (diff) | |
download | gdb-710e1a31c41cfebe0c425d54efa309bb7054cbc2.zip gdb-710e1a31c41cfebe0c425d54efa309bb7054cbc2.tar.gz gdb-710e1a31c41cfebe0c425d54efa309bb7054cbc2.tar.bz2 |
Create and use a specialized bcache type for psymbols
2010-08-31 Sami Wagiaalla <swagiaal@redhat.com>
* symfile.c (reread_symbols): Use psymbol_bcache_free, and
psymbol_bcache_init.
* psymtab.h (psymbol_bcache_init): New function prototype.
(psymbol_bcache_free): New function prototype.
(psymbol_bcache_get_bcache): New function prototype.
* psymtab.c (psymbol_bcache_init): New function.
(psymbol_bcache_free): New function.
(psymbol_bcache_full): New function.
(psymbol_bcache_get_bcache): New function.
(add_psymbol_to_bcache): use psymbol_bcache_full.
* objfiles.h (psymbol_cache): Change type of psymbol_cache to
psymbol_bcache.
* symmisc.c (print_symbol_bcache_statistics): Updated.
(print_objfile_statistics): Updated.
* objfiles.c (allocate_objfile): Use psymbol_bcache_init to initialize
psymbol_cache.
(free_objfile): Use psymbol_bcache_free.
Diffstat (limited to 'gdb/psymtab.c')
-rw-r--r-- | gdb/psymtab.c | 59 |
1 files changed, 55 insertions, 4 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 2520046..a5d2f98 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -37,6 +37,11 @@ #define DEV_TTY "/dev/tty" #endif +struct psymbol_bcache +{ + struct bcache *bcache; +}; + /* A fast way to get from a psymtab to its symtab (after the first time). */ #define PSYMTAB_TO_SYMTAB(pst) \ ((pst) -> symtab != NULL ? (pst) -> symtab : psymtab_to_symtab (pst)) @@ -1275,7 +1280,7 @@ start_psymtab_common (struct objfile *objfile, and name. These are the values which are set by add_psymbol_to_bcache. */ -unsigned long +static unsigned long psymbol_hash (const void *addr, int length) { unsigned long h = 0; @@ -1297,7 +1302,7 @@ psymbol_hash (const void *addr, int length) For the comparison this function uses a symbols value, language, domain, class and name. */ -int +static int psymbol_compare (const void *addr1, const void *addr2, int length) { struct partial_symbol *sym1 = (struct partial_symbol *) addr1; @@ -1311,6 +1316,51 @@ psymbol_compare (const void *addr1, const void *addr2, int length) && sym1->ginfo.name == sym2->ginfo.name); } +/* Initialize a partial symbol bcache. */ + +struct psymbol_bcache * +psymbol_bcache_init (void) +{ + struct psymbol_bcache *bcache = XCALLOC (1, struct psymbol_bcache); + bcache->bcache = bcache_xmalloc (psymbol_hash, psymbol_compare); + return bcache; +} + +/* Free a partial symbol bcache. */ +void +psymbol_bcache_free (struct psymbol_bcache *bcache) +{ + if (bcache == NULL) + return; + + bcache_xfree (bcache->bcache); + xfree (bcache); +} + +/* Return the internal bcache of the psymbol_bcache BCACHE*/ + +struct bcache * +psymbol_bcache_get_bcache (struct psymbol_bcache *bcache) +{ + return bcache->bcache; +} + +/* Find a copy of the SYM in BCACHE. If BCACHE has never seen this + symbol before, add a copy to BCACHE. In either case, return a pointer + to BCACHE's copy of the symbol. If optional ADDED is not NULL, return + 1 in case of new entry or 0 if returning an old entry. */ + +static const struct partial_symbol * +psymbol_bcache_full (struct partial_symbol *sym, + struct psymbol_bcache *bcache, + int *added) +{ + return bcache_full (sym, + sizeof (struct partial_symbol), + bcache->bcache, + added); +} + /* Helper function, initialises partial symbol structure and stashes it into objfile's bcache. Note that our caching mechanism will use all fields of struct partial_symbol to determine hash value of the @@ -1345,8 +1395,9 @@ add_psymbol_to_bcache (char *name, int namelength, int copy_name, SYMBOL_SET_NAMES (&psymbol, name, namelength, copy_name, objfile); /* Stash the partial symbol away in the cache */ - return bcache_full (&psymbol, sizeof (struct partial_symbol), - objfile->psymbol_cache, added); + return psymbol_bcache_full (&psymbol, + objfile->psymbol_cache, + added); } /* Helper function, adds partial symbol to the given partial symbol |