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.
This commit is contained in:
Tom Tromey 2021-03-20 17:23:40 -06:00
parent efd7398ee2
commit 4829711b6b
11 changed files with 84 additions and 60 deletions

View file

@ -1,3 +1,21 @@
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

View file

@ -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 ());

View file

@ -518,7 +518,6 @@ static void
maintenance_print_statistics (const char *args, int from_tty)
{
print_objfile_statistics ();
print_symbol_bcache_statistics ();
}
static void

View file

@ -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 ();

View file

@ -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;

View file

@ -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)
{
if (!ps->readin_p (objfile))
i++;
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
{
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

View file

@ -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". */

View file

@ -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

View file

@ -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 *);
@ -49,35 +46,6 @@ static void print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
int depth, ui_file *outfile);
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)
{
@ -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);
}
}

View file

@ -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

View file

@ -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"