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:
parent
efd7398ee2
commit
4829711b6b
11 changed files with 84 additions and 60 deletions
|
@ -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
|
||||
|
|
|
@ -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 ());
|
||||
|
|
|
@ -518,7 +518,6 @@ static void
|
|||
maintenance_print_statistics (const char *args, int from_tty)
|
||||
{
|
||||
print_objfile_statistics ();
|
||||
print_symbol_bcache_statistics ();
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -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 ();
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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". */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue