[RFA 18/42] Make free_pending_blocks static

Tom Tromey
2018-05-23T04:59:15Z

free_pending_blocks can be static because scoped_free_pendings (et al)
arrange for it to be NULL in the "steady state". This removes a
couple of unnecessary calls to free_pending_blocks and changes it to
be static.

gdb/ChangeLog
2018-05-22 Tom Tromey <tom@tromey.com>

* xcoffread.c (xcoff_initial_scan): Don't call
free_pending_blocks.
* dbxread.c (dbx_symfile_read): Don't call free_pending_blocks.
* buildsym.h (class scoped_free_pendings): Add constructor.
(free_pending_blocks): Don't declare.
* buildsym.c (scoped_free_pendings::scoped_free_pendings): New.
(free_pending_blocks): Now static.
---
gdb/ChangeLog | 10 ++++++++++
gdb/buildsym.c | 11 +++++++++--
gdb/buildsym.h | 4 +---
gdb/dbxread.c | 1 -
gdb/xcoffread.c | 2 --
5 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index f828fceb72..5d3d1f2942 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -264,6 +264,8 @@ static void record_pending_block (struct objfile *objfile,
struct block *block,
struct pending_block *opblock);

+static void free_pending_blocks ();
+
/* Initial sizes of data structures. These are realloc'd larger if
needed, and realloc'd down to the size actually used, when
completed. */
@@ -332,6 +334,11 @@ find_symbol_in_list (struct pending *list, char *name, int length)
return (NULL);
}

+scoped_free_pendings::scoped_free_pendings ()
+{
+ gdb_assert (pending_blocks == nullptr);
+}
+
/* At end of reading syms, or in case of quit, ensure everything
associated with building symtabs is freed.

@@ -374,8 +381,8 @@ scoped_free_pendings::~scoped_free_pendings ()

/* This function is called to discard any pending blocks. */

-void
-free_pending_blocks (void)
+static void
+free_pending_blocks ()
{
if (pending_blocks != NULL)
{
diff --git a/gdb/buildsym.h b/gdb/buildsym.h
index b5ea63d3f4..512d926dcb 100644
--- a/gdb/buildsym.h
+++ b/gdb/buildsym.h
@@ -176,7 +176,7 @@ class scoped_free_pendings
{
public:

- scoped_free_pendings () = default;
+ scoped_free_pendings ();
~scoped_free_pendings ();

DISABLE_COPY_AND_ASSIGN (scoped_free_pendings);
@@ -222,8 +222,6 @@ extern struct compunit_symtab *start_symtab (struct objfile *objfile,
extern void restart_symtab (struct compunit_symtab *cust,
const char *name, CORE_ADDR start_addr);

-extern void free_pending_blocks (void);
-
/* Record the name of the debug format in the current pending symbol
table. FORMAT must be a string with a lifetime at least as long as
the symtab's objfile. */
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index 52241f620d..127ae5bdf8 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -546,7 +546,6 @@ dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
symbol_size = DBX_SYMBOL_SIZE (objfile);
symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);

- free_pending_blocks ();
scoped_free_pendings free_pending;

minimal_symbol_reader reader (objfile);
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index e9bb79c87a..21d107f78d 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -3028,8 +3028,6 @@ xcoff_initial_scan (struct objfile *objfile, symfile_add_flags symfile_flags)
include N_SLINE. */
init_psymbol_list (objfile, num_symbols);

- free_pending_blocks ();
-
scoped_free_pendings free_pending;
minimal_symbol_reader reader (objfile);

--
2.13.6