* 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.
This commit is contained in:
Tom Tromey
2009-11-05 22:26:10 +00:00
parent 69a943f005
commit 10abe6bf36
6 changed files with 28 additions and 4 deletions

View File

@@ -1,3 +1,17 @@
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> 2009-11-05 Tom Tromey <tromey@redhat.com>
* symfile.c (add_psymbol_to_bcache): Make 'psymbol' static again. * symfile.c (add_psymbol_to_bcache): Make 'psymbol' static again.

View File

@@ -199,6 +199,7 @@ allocate_objfile (bfd *abfd, int flags)
objfile = (struct objfile *) xzalloc (sizeof (struct objfile)); objfile = (struct objfile *) xzalloc (sizeof (struct objfile));
objfile->psymbol_cache = bcache_xmalloc (); objfile->psymbol_cache = bcache_xmalloc ();
objfile->macro_cache = bcache_xmalloc (); objfile->macro_cache = bcache_xmalloc ();
objfile->filename_cache = bcache_xmalloc ();
/* We could use obstack_specify_allocation here instead, but /* We could use obstack_specify_allocation here instead, but
gdb_obstack.h specifies the alloc/dealloc functions. */ gdb_obstack.h specifies the alloc/dealloc functions. */
obstack_init (&objfile->objfile_obstack); obstack_init (&objfile->objfile_obstack);
@@ -561,6 +562,7 @@ free_objfile (struct objfile *objfile)
/* Free the obstacks for non-reusable objfiles */ /* Free the obstacks for non-reusable objfiles */
bcache_xfree (objfile->psymbol_cache); bcache_xfree (objfile->psymbol_cache);
bcache_xfree (objfile->macro_cache); bcache_xfree (objfile->macro_cache);
bcache_xfree (objfile->filename_cache);
if (objfile->demangled_names_hash) if (objfile->demangled_names_hash)
htab_delete (objfile->demangled_names_hash); htab_delete (objfile->demangled_names_hash);
obstack_free (&objfile->objfile_obstack, 0); obstack_free (&objfile->objfile_obstack, 0);

View File

@@ -251,6 +251,7 @@ struct objfile
struct bcache *psymbol_cache; /* Byte cache for partial syms */ struct bcache *psymbol_cache; /* Byte cache for partial syms */
struct bcache *macro_cache; /* Byte cache for macros */ 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 /* Hash table for mapping symbol names to demangled names. Each
entry in the hash table is actually two consecutive strings, entry in the hash table is actually two consecutive strings,

View File

@@ -191,6 +191,7 @@ allocate_rt_common_objfile (void)
memset (objfile, 0, sizeof (struct objfile)); memset (objfile, 0, sizeof (struct objfile));
objfile->psymbol_cache = bcache_xmalloc (); objfile->psymbol_cache = bcache_xmalloc ();
objfile->macro_cache = bcache_xmalloc (); objfile->macro_cache = bcache_xmalloc ();
objfile->filename_cache = bcache_xmalloc ();
obstack_init (&objfile->objfile_obstack); obstack_init (&objfile->objfile_obstack);
objfile->name = xstrdup ("rt_common"); objfile->name = xstrdup ("rt_common");

View File

@@ -2402,6 +2402,8 @@ reread_symbols (void)
objfile->psymbol_cache = bcache_xmalloc (); objfile->psymbol_cache = bcache_xmalloc ();
bcache_xfree (objfile->macro_cache); bcache_xfree (objfile->macro_cache);
objfile->macro_cache = bcache_xmalloc (); objfile->macro_cache = bcache_xmalloc ();
bcache_xfree (objfile->filename_cache);
objfile->filename_cache = bcache_xmalloc ();
if (objfile->demangled_names_hash != NULL) if (objfile->demangled_names_hash != NULL)
{ {
htab_delete (objfile->demangled_names_hash); htab_delete (objfile->demangled_names_hash);
@@ -2424,6 +2426,7 @@ reread_symbols (void)
objfile->psymbol_cache = bcache_xmalloc (); objfile->psymbol_cache = bcache_xmalloc ();
objfile->macro_cache = bcache_xmalloc (); objfile->macro_cache = bcache_xmalloc ();
objfile->filename_cache = bcache_xmalloc ();
/* obstack_init also initializes the obstack so it is /* obstack_init also initializes the obstack so it is
empty. We could use obstack_specify_allocation but empty. We could use obstack_specify_allocation but
gdb_obstack.h specifies the alloc/dealloc gdb_obstack.h specifies the alloc/dealloc
@@ -2746,8 +2749,8 @@ allocate_symtab (char *filename, struct objfile *objfile)
symtab = (struct symtab *) symtab = (struct symtab *)
obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab)); obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab));
memset (symtab, 0, sizeof (*symtab)); memset (symtab, 0, sizeof (*symtab));
symtab->filename = obsavestring (filename, strlen (filename), symtab->filename = (char *) bcache (filename, strlen (filename) + 1,
&objfile->objfile_obstack); objfile->filename_cache);
symtab->fullname = NULL; symtab->fullname = NULL;
symtab->language = deduce_language_from_filename (filename); symtab->language = deduce_language_from_filename (filename);
symtab->debugformat = "unknown"; symtab->debugformat = "unknown";
@@ -2777,8 +2780,8 @@ allocate_psymtab (char *filename, struct objfile *objfile)
sizeof (struct partial_symtab)); sizeof (struct partial_symtab));
memset (psymtab, 0, sizeof (struct partial_symtab)); memset (psymtab, 0, sizeof (struct partial_symtab));
psymtab->filename = obsavestring (filename, strlen (filename), psymtab->filename = (char *) bcache (filename, strlen (filename) + 1,
&objfile->objfile_obstack); objfile->filename_cache);
psymtab->symtab = NULL; psymtab->symtab = NULL;
/* Prepend it to the psymtab list for the objfile it belongs to. /* Prepend it to the psymtab list for the objfile it belongs to.

View File

@@ -140,6 +140,7 @@ print_symbol_bcache_statistics (void)
printf_filtered (_("Byte cache statistics for '%s':\n"), objfile->name); printf_filtered (_("Byte cache statistics for '%s':\n"), objfile->name);
print_bcache_statistics (objfile->psymbol_cache, "partial symbol cache"); print_bcache_statistics (objfile->psymbol_cache, "partial symbol cache");
print_bcache_statistics (objfile->macro_cache, "preprocessor macro cache"); print_bcache_statistics (objfile->macro_cache, "preprocessor macro cache");
print_bcache_statistics (objfile->filename_cache, "file name cache");
} }
immediate_quit--; immediate_quit--;
} }
@@ -204,6 +205,8 @@ print_objfile_statistics (void)
bcache_memory_used (objfile->psymbol_cache)); bcache_memory_used (objfile->psymbol_cache));
printf_filtered (_(" Total memory used for macro cache: %d\n"), printf_filtered (_(" Total memory used for macro cache: %d\n"),
bcache_memory_used (objfile->macro_cache)); 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--; immediate_quit--;
} }