diff options
author | Tom Tromey <tromey@redhat.com> | 2009-11-05 22:26:10 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2009-11-05 22:26:10 +0000 |
commit | 10abe6bf36363fc8004785a70e350f013bd02c4a (patch) | |
tree | b6f02b801de93a1af23a10b411a7ead5c618483f | |
parent | 69a943f00538328c36e1d1005f5357a61a71c7fc (diff) | |
download | gdb-10abe6bf36363fc8004785a70e350f013bd02c4a.zip gdb-10abe6bf36363fc8004785a70e350f013bd02c4a.tar.gz gdb-10abe6bf36363fc8004785a70e350f013bd02c4a.tar.bz2 |
* symmisc.c (print_symbol_bcache_statistics): Print filename cache
statistics.
(print_objfile_statistics): Likewise.
* symfile.c (reread_symbols): Initialize filename_cache.
(allocate_symtab): Cache the file name.
(allocate_psymtab): Likewise.
* solib-sunos.c (allocate_rt_common_objfile): Initialize
filename_cache.
* objfiles.h (struct objfile) <filename_cache>: New field.
* objfiles.c (allocate_objfile): Initialize filename_cache.
(free_objfile): Free filename_cache.
-rw-r--r-- | gdb/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/objfiles.c | 2 | ||||
-rw-r--r-- | gdb/objfiles.h | 1 | ||||
-rw-r--r-- | gdb/solib-sunos.c | 1 | ||||
-rw-r--r-- | gdb/symfile.c | 11 | ||||
-rw-r--r-- | gdb/symmisc.c | 3 |
6 files changed, 28 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bf20ded..aea896e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,19 @@ 2009-11-05 Tom Tromey <tromey@redhat.com> + * symmisc.c (print_symbol_bcache_statistics): Print filename cache + statistics. + (print_objfile_statistics): Likewise. + * symfile.c (reread_symbols): Initialize filename_cache. + (allocate_symtab): Cache the file name. + (allocate_psymtab): Likewise. + * solib-sunos.c (allocate_rt_common_objfile): Initialize + filename_cache. + * objfiles.h (struct objfile) <filename_cache>: New field. + * objfiles.c (allocate_objfile): Initialize filename_cache. + (free_objfile): Free filename_cache. + +2009-11-05 Tom Tromey <tromey@redhat.com> + * symfile.c (add_psymbol_to_bcache): Make 'psymbol' static again. Zero the 'value' field. diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 0425d7a..48f2613 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -199,6 +199,7 @@ allocate_objfile (bfd *abfd, int flags) objfile = (struct objfile *) xzalloc (sizeof (struct objfile)); objfile->psymbol_cache = bcache_xmalloc (); objfile->macro_cache = bcache_xmalloc (); + objfile->filename_cache = bcache_xmalloc (); /* We could use obstack_specify_allocation here instead, but gdb_obstack.h specifies the alloc/dealloc functions. */ obstack_init (&objfile->objfile_obstack); @@ -561,6 +562,7 @@ free_objfile (struct objfile *objfile) /* Free the obstacks for non-reusable objfiles */ bcache_xfree (objfile->psymbol_cache); bcache_xfree (objfile->macro_cache); + bcache_xfree (objfile->filename_cache); if (objfile->demangled_names_hash) htab_delete (objfile->demangled_names_hash); obstack_free (&objfile->objfile_obstack, 0); diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 97e6b55..d662d12 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -251,6 +251,7 @@ struct objfile struct bcache *psymbol_cache; /* Byte cache for partial syms */ struct bcache *macro_cache; /* Byte cache for macros */ + struct bcache *filename_cache; /* Byte cache for file names. */ /* Hash table for mapping symbol names to demangled names. Each entry in the hash table is actually two consecutive strings, diff --git a/gdb/solib-sunos.c b/gdb/solib-sunos.c index 9b2a470..02793f1 100644 --- a/gdb/solib-sunos.c +++ b/gdb/solib-sunos.c @@ -191,6 +191,7 @@ allocate_rt_common_objfile (void) memset (objfile, 0, sizeof (struct objfile)); objfile->psymbol_cache = bcache_xmalloc (); objfile->macro_cache = bcache_xmalloc (); + objfile->filename_cache = bcache_xmalloc (); obstack_init (&objfile->objfile_obstack); objfile->name = xstrdup ("rt_common"); diff --git a/gdb/symfile.c b/gdb/symfile.c index 117f17f..5ce20a6 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -2402,6 +2402,8 @@ reread_symbols (void) objfile->psymbol_cache = bcache_xmalloc (); bcache_xfree (objfile->macro_cache); objfile->macro_cache = bcache_xmalloc (); + bcache_xfree (objfile->filename_cache); + objfile->filename_cache = bcache_xmalloc (); if (objfile->demangled_names_hash != NULL) { htab_delete (objfile->demangled_names_hash); @@ -2424,6 +2426,7 @@ reread_symbols (void) objfile->psymbol_cache = bcache_xmalloc (); objfile->macro_cache = bcache_xmalloc (); + objfile->filename_cache = bcache_xmalloc (); /* obstack_init also initializes the obstack so it is empty. We could use obstack_specify_allocation but gdb_obstack.h specifies the alloc/dealloc @@ -2746,8 +2749,8 @@ allocate_symtab (char *filename, struct objfile *objfile) symtab = (struct symtab *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab)); memset (symtab, 0, sizeof (*symtab)); - symtab->filename = obsavestring (filename, strlen (filename), - &objfile->objfile_obstack); + symtab->filename = (char *) bcache (filename, strlen (filename) + 1, + objfile->filename_cache); symtab->fullname = NULL; symtab->language = deduce_language_from_filename (filename); symtab->debugformat = "unknown"; @@ -2777,8 +2780,8 @@ allocate_psymtab (char *filename, struct objfile *objfile) sizeof (struct partial_symtab)); memset (psymtab, 0, sizeof (struct partial_symtab)); - psymtab->filename = obsavestring (filename, strlen (filename), - &objfile->objfile_obstack); + psymtab->filename = (char *) bcache (filename, strlen (filename) + 1, + objfile->filename_cache); psymtab->symtab = NULL; /* Prepend it to the psymtab list for the objfile it belongs to. diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 4044981..c45135c 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -140,6 +140,7 @@ print_symbol_bcache_statistics (void) printf_filtered (_("Byte cache statistics for '%s':\n"), objfile->name); print_bcache_statistics (objfile->psymbol_cache, "partial symbol cache"); print_bcache_statistics (objfile->macro_cache, "preprocessor macro cache"); + print_bcache_statistics (objfile->filename_cache, "file name cache"); } immediate_quit--; } @@ -204,6 +205,8 @@ print_objfile_statistics (void) bcache_memory_used (objfile->psymbol_cache)); printf_filtered (_(" Total memory used for macro cache: %d\n"), bcache_memory_used (objfile->macro_cache)); + printf_filtered (_(" Total memory used for file name cache: %d\n"), + bcache_memory_used (objfile->filename_cache)); } immediate_quit--; } |