[PATCH 3/4] Remove partial symbol statistics

Tom Tromey tom@tromey.com
Sat Oct 17 22:50:55 GMT 2020


The "n_psyms" statistic in the per-objfile stats is not really needed,
but its use requires passing the objfile to add_psymbol.  This patch
removes the field in favor of counting the psyms when needed.

Note that this is not exactly equivalent -- in the old approach, a
psymbol can in theory be created and then the psymtab discarded, which
would increment the counter.  This does not seem very important to me.

I rewrote the code to count partial symbols; though TBH I think that
this information is not really very useful.

gdb/ChangeLog
2020-10-17  Tom Tromey  <tom@tromey.com>

	* symmisc.c (count_psyms): New function.
	(print_objfile_statistics): Use it.
	* psymtab.c (append_psymbol_to_list): Remove.
	(partial_symtab::add_psymbol): Inline append_psymbol_to_list.
	* objfiles.h (struct objstats) <n_psyms>: Remove.
---
 gdb/ChangeLog  |  8 ++++++++
 gdb/objfiles.h |  3 ---
 gdb/psymtab.c  | 13 +------------
 gdb/symmisc.c  | 21 +++++++++++++++++++--
 4 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index 549977ad257..bf3d7fcf253 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -194,9 +194,6 @@ struct obj_section
 
 struct objstats
 {
-  /* Number of partial symbols read.  */
-  int n_psyms = 0;
-
   /* Number of full symbols read.  */
   int n_syms = 0;
 
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index b3deef4107d..dc802a60f3c 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1523,17 +1523,6 @@ add_psymbol_to_bcache (const partial_symbol &psymbol, struct objfile *objfile,
 	  (&psymbol, sizeof (struct partial_symbol), added));
 }
 
-/* Helper function, adds partial symbol to the given partial symbol list.  */
-
-static void
-append_psymbol_to_list (std::vector<partial_symbol *> &list,
-			struct partial_symbol *psym,
-			struct objfile *objfile)
-{
-  list.push_back (psym);
-  OBJSTAT (objfile, n_psyms++);
-}
-
 /* See psympriv.h.  */
 
 void
@@ -1555,7 +1544,7 @@ partial_symtab::add_psymbol (const partial_symbol &psymbol,
     = (where == psymbol_placement::STATIC
        ? static_psymbols
        : global_psymbols);
-  append_psymbol_to_list (list, psym, objfile);
+  list.push_back (psym);
 }
 
 /* See psympriv.h.  */
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index fc56cfa9381..8d748b9ebf7 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -39,6 +39,7 @@
 #include "readline/tilde.h"
 
 #include "psymtab.h"
+#include "psympriv.h"
 
 /* Unfortunately for debugging, stderr is usually a macro.  This is painful
    when calling functions that take FILE *'s from the debugger.
@@ -73,6 +74,20 @@ print_symbol_bcache_statistics (void)
       }
 }
 
+/* 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)
 {
@@ -89,9 +104,11 @@ 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);
-	if (OBJSTAT (objfile, n_psyms) > 0)
+
+	int n_psyms = count_psyms (objfile);
+	if (n_psyms > 0)
 	  printf_filtered (_("  Number of \"partial\" symbols read: %d\n"),
-			   OBJSTAT (objfile, n_psyms));
+			   n_psyms);
 	if (OBJSTAT (objfile, n_syms) > 0)
 	  printf_filtered (_("  Number of \"full\" symbols read: %d\n"),
 			   OBJSTAT (objfile, n_syms));
-- 
2.17.2



More information about the Gdb-patches mailing list