aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-03-20 17:23:40 -0600
committerTom Tromey <tom@tromey.com>2021-03-20 17:23:43 -0600
commit4829711b6ba57568d5fec3c2e8c747a2edb2aa8f (patch)
treeb5b258588ea8fec7c998f3ac22281befc70fc076
parentefd7398ee26dc8f810243fc893590df4a8cd3238 (diff)
downloadgdb-4829711b6ba57568d5fec3c2e8c747a2edb2aa8f.zip
gdb-4829711b6ba57568d5fec3c2e8c747a2edb2aa8f.tar.gz
gdb-4829711b6ba57568d5fec3c2e8c747a2edb2aa8f.tar.bz2
Move psymtab statistics printing to psymtab.c
This moves all the psymtab statistics printing code form symmisc.c to psymtab.c. This changes the formatting of the output a little, but considering that it is a maint command (and, I assume, a rarely used one), this seems fine to me. This change helps further dissociate the psymtab from the objfile. In the end there will be no direct connect -- only via the quick_symbol_functions interface. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_base_index_functions::print_stats): Add print_bcache parameter. * symfile-debug.c (objfile::print_stats): Add print_bcache parameter. * quick-symbol.h (struct quick_symbol_functions) <print_stats>: Add print_bcache parameter. * symmisc.c (print_symbol_bcache_statistics, count_psyms): Move code to psymtab.c. (print_objfile_statistics): Move psymtab code to psymtab.c. * psymtab.c (count_psyms): Move from symmisc.c. (psymbol_functions::print_stats): Print partial symbol and bcache statistics. Add print_bcache parameter. * objfiles.h (print_symbol_bcache_statistics): Don't declare. (struct objfile) <print_stats>: Add print_bcache parameter. * maint.c (maintenance_print_statistics): Update. gdb/testsuite/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * gdb.base/maint.exp: Update "maint print statistics" output.
-rw-r--r--gdb/ChangeLog18
-rw-r--r--gdb/dwarf2/read.c8
-rw-r--r--gdb/maint.c1
-rw-r--r--gdb/objfiles.h3
-rw-r--r--gdb/psympriv.h2
-rw-r--r--gdb/psymtab.c43
-rw-r--r--gdb/quick-symbol.h6
-rw-r--r--gdb/symfile-debug.c8
-rw-r--r--gdb/symmisc.c49
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.base/maint.exp2
11 files changed, 84 insertions, 60 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index fcc8f2a..47aa9ea 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,23 @@
2021-03-20 Tom Tromey <tom@tromey.com>
+ * dwarf2/read.c (dwarf2_base_index_functions::print_stats): Add
+ print_bcache parameter.
+ * symfile-debug.c (objfile::print_stats): Add print_bcache
+ parameter.
+ * quick-symbol.h (struct quick_symbol_functions)
+ <print_stats>: Add print_bcache parameter.
+ * symmisc.c (print_symbol_bcache_statistics, count_psyms): Move
+ code to psymtab.c.
+ (print_objfile_statistics): Move psymtab code to psymtab.c.
+ * psymtab.c (count_psyms): Move from symmisc.c.
+ (psymbol_functions::print_stats): Print partial symbol and bcache
+ statistics. Add print_bcache parameter.
+ * objfiles.h (print_symbol_bcache_statistics): Don't declare.
+ (struct objfile) <print_stats>: Add print_bcache parameter.
+ * maint.c (maintenance_print_statistics): Update.
+
+2021-03-20 Tom Tromey <tom@tromey.com>
+
* dwarf2/read.h (struct dwarf2_per_bfd) <psymtabs_addrmap>: New
member.
* dwarf2/read.c (create_addrmap_from_index)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 483c6fb..b6069c5 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -2214,7 +2214,7 @@ struct dwarf2_base_index_functions : public quick_symbol_functions
return language_unknown;
}
- void print_stats (struct objfile *objfile) override;
+ void print_stats (struct objfile *objfile, bool print_bcache) override;
void expand_all_symtabs (struct objfile *objfile) override;
@@ -3681,8 +3681,12 @@ dwarf2_gdb_index::lookup_symbol (struct objfile *objfile,
}
void
-dwarf2_base_index_functions::print_stats (struct objfile *objfile)
+dwarf2_base_index_functions::print_stats (struct objfile *objfile,
+ bool print_bcache)
{
+ if (print_bcache)
+ return;
+
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
int total = (per_objfile->per_bfd->all_comp_units.size ()
+ per_objfile->per_bfd->all_type_units.size ());
diff --git a/gdb/maint.c b/gdb/maint.c
index bfdd1d5..5254cd6 100644
--- a/gdb/maint.c
+++ b/gdb/maint.c
@@ -518,7 +518,6 @@ static void
maintenance_print_statistics (const char *args, int from_tty)
{
print_objfile_statistics ();
- print_symbol_bcache_statistics ();
}
static void
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index cd136ee..ff60e18 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -211,7 +211,6 @@ struct objstats
#define OBJSTAT(objfile, expr) (objfile -> stats.expr)
#define OBJSTATS struct objstats stats
extern void print_objfile_statistics (void);
-extern void print_symbol_bcache_statistics (void);
/* Number of entries in the minimal symbol hash table. */
#define MINIMAL_SYMBOL_HASH_SIZE 2039
@@ -568,7 +567,7 @@ public:
domain_enum domain);
/* See quick_symbol_functions. */
- void print_stats ();
+ void print_stats (bool print_bcache);
/* See quick_symbol_functions. */
void dump ();
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 0f24c10..943d6c1 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -496,7 +496,7 @@ struct psymbol_functions : public quick_symbol_functions
domain_enum domain,
bool *symbol_found_p) override;
- void print_stats (struct objfile *objfile) override;
+ void print_stats (struct objfile *objfile, bool print_bcache) override;
void dump (struct objfile *objfile) override;
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 45a4db7..867b715 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -975,21 +975,52 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
fprintf_filtered (outfile, "\n");
}
+/* Count the number of partial symbols in OBJFILE. */
+
+static int
+count_psyms (struct objfile *objfile)
+{
+ int count = 0;
+ for (partial_symtab *pst : objfile->psymtabs ())
+ {
+ count += pst->global_psymbols.size ();
+ count += pst->static_psymbols.size ();
+ }
+ return count;
+}
+
/* Psymtab version of print_stats. See its definition in
the definition of quick_symbol_functions in symfile.h. */
void
-psymbol_functions::print_stats (struct objfile *objfile)
+psymbol_functions::print_stats (struct objfile *objfile, bool print_bcache)
{
int i;
- i = 0;
- for (partial_symtab *ps : require_partial_symbols (objfile, true))
+ if (!print_bcache)
+ {
+ int n_psyms = count_psyms (objfile);
+ if (n_psyms > 0)
+ printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
+ n_psyms);
+
+ i = 0;
+ for (partial_symtab *ps : require_partial_symbols (objfile, true))
+ {
+ if (!ps->readin_p (objfile))
+ i++;
+ }
+ printf_filtered (_(" Number of psym tables (not yet expanded): %d\n"),
+ i);
+ printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
+ objfile->partial_symtabs->psymbol_cache.memory_used ());
+ }
+ else
{
- if (!ps->readin_p (objfile))
- i++;
+ printf_filtered (_("Psymbol byte cache statistics:\n"));
+ objfile->partial_symtabs->psymbol_cache.print_statistics
+ ("partial symbol cache");
}
- printf_filtered (_(" Number of psym tables (not yet expanded): %d\n"), i);
}
/* Psymtab version of dump. See its definition in
diff --git a/gdb/quick-symbol.h b/gdb/quick-symbol.h
index 319ffe6..315a97a 100644
--- a/gdb/quick-symbol.h
+++ b/gdb/quick-symbol.h
@@ -126,8 +126,10 @@ struct quick_symbol_functions
/* Print statistics about any indices loaded for OBJFILE. The
statistics should be printed to gdb_stdout. This is used for
- "maint print statistics". */
- virtual void print_stats (struct objfile *objfile) = 0;
+ "maint print statistics". Statistics are printed in two
+ sections. PRINT_BCACHE is false when printing the first section
+ of general statistics, and true when printing bcache statistics. */
+ virtual void print_stats (struct objfile *objfile, bool print_bcache) = 0;
/* Dump any indices loaded for OBJFILE. The dump should go to
gdb_stdout. This is used for "maint print objfiles". */
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index 55865ab..406eac0 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -174,14 +174,14 @@ objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain)
}
void
-objfile::print_stats ()
+objfile::print_stats (bool print_bcache)
{
if (debug_symfile)
- fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n",
- objfile_debug_name (this));
+ fprintf_filtered (gdb_stdlog, "qf->print_stats (%s, %d)\n",
+ objfile_debug_name (this), print_bcache);
if (qf != nullptr)
- qf->print_stats (this);
+ qf->print_stats (this, print_bcache);
}
void
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 0aab30d..9ea5cb5 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -38,9 +38,6 @@
#include "source.h"
#include "readline/tilde.h"
-#include "psymtab.h"
-#include "psympriv.h"
-
/* Prototypes for local functions */
static int block_depth (const struct block *);
@@ -50,35 +47,6 @@ static void print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
void
-print_symbol_bcache_statistics (void)
-{
- for (struct program_space *pspace : program_spaces)
- for (objfile *objfile : pspace->objfiles ())
- {
- QUIT;
- printf_filtered (_("Byte cache statistics for '%s':\n"),
- objfile_name (objfile));
- objfile->partial_symtabs->psymbol_cache.print_statistics
- ("partial symbol cache");
- objfile->per_bfd->string_cache.print_statistics ("string cache");
- }
-}
-
-/* Count the number of partial symbols in OBJFILE. */
-
-static int
-count_psyms (struct objfile *objfile)
-{
- int count = 0;
- for (partial_symtab *pst : objfile->psymtabs ())
- {
- count += pst->global_psymbols.size ();
- count += pst->static_psymbols.size ();
- }
- return count;
-}
-
-void
print_objfile_statistics (void)
{
int i, linetables, blockvectors;
@@ -94,18 +62,13 @@ print_objfile_statistics (void)
if (objfile->per_bfd->n_minsyms > 0)
printf_filtered (_(" Number of \"minimal\" symbols read: %d\n"),
objfile->per_bfd->n_minsyms);
-
- int n_psyms = count_psyms (objfile);
- if (n_psyms > 0)
- printf_filtered (_(" Number of \"partial\" symbols read: %d\n"),
- n_psyms);
if (OBJSTAT (objfile, n_syms) > 0)
printf_filtered (_(" Number of \"full\" symbols read: %d\n"),
OBJSTAT (objfile, n_syms));
if (OBJSTAT (objfile, n_types) > 0)
printf_filtered (_(" Number of \"types\" defined: %d\n"),
OBJSTAT (objfile, n_types));
- objfile->print_stats ();
+
i = linetables = 0;
for (compunit_symtab *cu : objfile->compunits ())
{
@@ -124,6 +87,8 @@ print_objfile_statistics (void)
printf_filtered (_(" Number of symbol tables with blockvectors: %d\n"),
blockvectors);
+ objfile->print_stats (false);
+
if (OBJSTAT (objfile, sz_strtab) > 0)
printf_filtered (_(" Space used by string tables: %d\n"),
OBJSTAT (objfile, sz_strtab));
@@ -133,11 +98,13 @@ print_objfile_statistics (void)
printf_filtered (_(" Total memory used for BFD obstack: %s\n"),
pulongest (obstack_memory_used (&objfile->per_bfd
->storage_obstack)));
- printf_filtered
- (_(" Total memory used for psymbol cache: %d\n"),
- objfile->partial_symtabs->psymbol_cache.memory_used ());
+
printf_filtered (_(" Total memory used for string cache: %d\n"),
objfile->per_bfd->string_cache.memory_used ());
+ printf_filtered (_("Byte cache statistics for '%s':\n"),
+ objfile_name (objfile));
+ objfile->per_bfd->string_cache.print_statistics ("string cache");
+ objfile->print_stats (true);
}
}
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index d5ff002..e764c8f 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2021-03-20 Tom Tromey <tom@tromey.com>
+
+ * gdb.base/maint.exp: Update "maint print statistics" output.
+
2021-03-19 Kevin Buettner <kevinb@redhat.com>
* lib/gdbserver-support.exp (gdbserver_exit): Use the
diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp
index b418c02..e723922 100644
--- a/gdb/testsuite/gdb.base/maint.exp
+++ b/gdb/testsuite/gdb.base/maint.exp
@@ -193,7 +193,7 @@ if [istarget "*-*-cygwin*"] {
send_gdb "maint print statistics\n"
gdb_expect {
- -re "Statistics for\[^\n\r\]*maint\[^\n\r\]*:\r\n Number of \"minimal\" symbols read: $decimal\r\n( Number of \"partial\" symbols read: $decimal\r\n)? Number of \"full\" symbols read: $decimal\r\n Number of \"types\" defined: $decimal\r\n( Number of psym tables \\(not yet expanded\\): $decimal\r\n)?( Number of read CUs: $decimal\r\n Number of unread CUs: $decimal\r\n)? Number of symbol tables: $decimal\r\n Number of symbol tables with line tables: $decimal\r\n Number of symbol tables with blockvectors: $decimal\r\n Total memory used for objfile obstack: $decimal\r\n Total memory used for BFD obstack: $decimal\r\n Total memory used for psymbol cache: $decimal\r\n Total memory used for string cache: $decimal\r\n" {
+ -re "Statistics for\[^\n\r\]*maint\[^\n\r\]*:\r\n Number of \"minimal\" symbols read: $decimal\r\n Number of \"full\" symbols read: $decimal\r\n Number of \"types\" defined: $decimal\r\n( Number of read CUs: $decimal\r\n Number of unread CUs: $decimal\r\n)? Number of symbol tables: $decimal\r\n Number of symbol tables with line tables: $decimal\r\n Number of symbol tables with blockvectors: $decimal\r\n( Number of \"partial\" symbols read: $decimal\r\n)?( Number of psym tables \\(not yet expanded\\): $decimal\r\n)? Total memory used for psymbol cache: $decimal\r\n Total memory used for objfile obstack: $decimal\r\n Total memory used for BFD obstack: $decimal\r\n Total memory used for string cache: $decimal\r\n" {
gdb_expect {
-re "$gdb_prompt $" {
pass "maint print statistics"