]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Move psymtab statistics printing to psymtab.c
authorTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:40 +0000 (17:23 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:43 +0000 (17:23 -0600)
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.

gdb/ChangeLog
gdb/dwarf2/read.c
gdb/maint.c
gdb/objfiles.h
gdb/psympriv.h
gdb/psymtab.c
gdb/quick-symbol.h
gdb/symfile-debug.c
gdb/symmisc.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/maint.exp

index fcc8f2a545628494017eeeea3701ca8e243a6d7d..47aa9ea0a8d54652a6ee16d9ebfe4d1ef8015235 100644 (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
index 483c6fbd92178e0dcbfccbe564ce6655b0b3534c..b6069c560f21d114353754d8dec50f80e58723e6 100644 (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 ());
index bfdd1d5ca3ef7d2cff682677d1399911cb284781..5254cd6ed260c09cdfaf287546a8597cfbb1b713 100644 (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
index cd136eef788fa7b45c8e02d25f5c474ded80d550..ff60e18bca4df37cddef37758f48251141a2f030 100644 (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 ();
index 0f24c104aca1cbf46033e3e15f2b2ab4166fced5..943d6c13919596764bf95a9b1ea56ff5145d42d6 100644 (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;
 
index 45a4db71c1f129b75429778b0f9b9167c072aa6d..867b71530ebd99b37b10ebfb767409d5f09a95d5 100644 (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)
+    {
+      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
index 319ffe681c85ac2e25510bb7a25f25e718675f2f..315a97a49e074a2e1b21ed974cd7907014c3253b 100644 (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".  */
index 55865ab03b0ebce6bd791e6b0f0e070fd3e0ac4f..406eac0b7d33489dde4d13065f82042415e8f987 100644 (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
index 0aab30d08abc48770fc7d1e2624220894e38eca6..9ea5cb55d0f7c5590a3672a684291b5a2692fcb0 100644 (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);
 \f
 
-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);
       }
 }
 
index d5ff0026aa7af15cd8924f1f8ffac59a4904ee6f..e764c8ff08e046630d592b2fc3fbb94a01739eda 100644 (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
index b418c023d735f20b2100148660b267783583bb15..e72392220cc84b95fa7aaf2a90535e3bd08fd010 100644 (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"