Make free_pending_blocks static

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-07-16  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.
This commit is contained in:
Tom Tromey 2018-05-20 22:45:44 -06:00
parent 8419ee5331
commit 652788a731
5 changed files with 20 additions and 8 deletions

View file

@ -1,3 +1,13 @@
2018-07-16 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.
2018-07-16 Tom Tromey <tom@tromey.com> 2018-07-16 Tom Tromey <tom@tromey.com>
* buildsym.h (push_subfile, pop_subfile): Update declarations. * buildsym.h (push_subfile, pop_subfile): Update declarations.

View file

@ -263,6 +263,8 @@ static void record_pending_block (struct objfile *objfile,
struct block *block, struct block *block,
struct pending_block *opblock); struct pending_block *opblock);
static void free_pending_blocks ();
/* Initial sizes of data structures. These are realloc'd larger if /* Initial sizes of data structures. These are realloc'd larger if
needed, and realloc'd down to the size actually used, when needed, and realloc'd down to the size actually used, when
completed. */ completed. */
@ -331,6 +333,11 @@ find_symbol_in_list (struct pending *list, char *name, int length)
return (NULL); 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 /* At end of reading syms, or in case of quit, ensure everything
associated with building symtabs is freed. associated with building symtabs is freed.
@ -373,8 +380,8 @@ scoped_free_pendings::~scoped_free_pendings ()
/* This function is called to discard any pending blocks. */ /* This function is called to discard any pending blocks. */
void static void
free_pending_blocks (void) free_pending_blocks ()
{ {
if (pending_blocks != NULL) if (pending_blocks != NULL)
{ {

View file

@ -176,7 +176,7 @@ class scoped_free_pendings
{ {
public: public:
scoped_free_pendings () = default; scoped_free_pendings ();
~scoped_free_pendings (); ~scoped_free_pendings ();
DISABLE_COPY_AND_ASSIGN (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, extern void restart_symtab (struct compunit_symtab *cust,
const char *name, CORE_ADDR start_addr); 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 /* 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 table. FORMAT must be a string with a lifetime at least as long as
the symtab's objfile. */ the symtab's objfile. */

View file

@ -545,7 +545,6 @@ dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
symbol_size = DBX_SYMBOL_SIZE (objfile); symbol_size = DBX_SYMBOL_SIZE (objfile);
symbol_table_offset = DBX_SYMTAB_OFFSET (objfile); symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
free_pending_blocks ();
scoped_free_pendings free_pending; scoped_free_pendings free_pending;
minimal_symbol_reader reader (objfile); minimal_symbol_reader reader (objfile);

View file

@ -3018,8 +3018,6 @@ xcoff_initial_scan (struct objfile *objfile, symfile_add_flags symfile_flags)
include N_SLINE. */ include N_SLINE. */
init_psymbol_list (objfile, num_symbols); init_psymbol_list (objfile, num_symbols);
free_pending_blocks ();
scoped_free_pendings free_pending; scoped_free_pendings free_pending;
minimal_symbol_reader reader (objfile); minimal_symbol_reader reader (objfile);