aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2009-11-05 22:26:10 +0000
committerTom Tromey <tromey@redhat.com>2009-11-05 22:26:10 +0000
commit10abe6bf36363fc8004785a70e350f013bd02c4a (patch)
treeb6f02b801de93a1af23a10b411a7ead5c618483f
parent69a943f00538328c36e1d1005f5357a61a71c7fc (diff)
downloadgdb-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/ChangeLog14
-rw-r--r--gdb/objfiles.c2
-rw-r--r--gdb/objfiles.h1
-rw-r--r--gdb/solib-sunos.c1
-rw-r--r--gdb/symfile.c11
-rw-r--r--gdb/symmisc.c3
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--;
}