From 5ac045503de7dde6793b318f89d251addc161f66 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 21 May 2018 00:34:26 -0600 Subject: [PATCH] Move pending_blocks and pending_block_obstack to buildsym_compunit This moves the pending_blocks and pending_block_obstack into buildsym_compunit. The obstack could perhaps be merged with the addrmap obstack, but I did not do that in this series. gdb/ChangeLog 2018-07-20 Tom Tromey * buildsym.h (class scoped_free_pendings): Remove constructor. * buildsym.c (struct buildsym_compunit) : New method. : New members. (pending_block_obstack, pending_blocks): Remove. (scoped_free_pendings::scoped_free_pendings): Default. (~scoped_free_pendings): Update. (free_pending_blocks): Remove. (finish_block_internal, record_pending_block, make_blockvector) (end_symtab_get_static_block, augment_type_symtab, push_context) (buildsym_init): Update. --- gdb/ChangeLog | 14 +++++++++ gdb/buildsym.c | 84 ++++++++++++++++++++------------------------------ gdb/buildsym.h | 2 +- 3 files changed, 49 insertions(+), 51 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d70367c386..a8d20576e6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2018-07-20 Tom Tromey + + * buildsym.h (class scoped_free_pendings): Remove constructor. + * buildsym.c (struct buildsym_compunit) : New + method. + : New members. + (pending_block_obstack, pending_blocks): Remove. + (scoped_free_pendings::scoped_free_pendings): Default. + (~scoped_free_pendings): Update. + (free_pending_blocks): Remove. + (finish_block_internal, record_pending_block, make_blockvector) + (end_symtab_get_static_block, augment_type_symtab, push_context) + (buildsym_init): Update. + 2018-07-20 Tom Tromey * buildsym.c (struct buildsym_compunit) next; @@ -381,18 +378,6 @@ scoped_free_pendings::~scoped_free_pendings () free_buildsym_compunit (); } -/* This function is called to discard any pending blocks. */ - -static void -free_pending_blocks () -{ - if (pending_blocks != NULL) - { - obstack_free (&pending_block_obstack, NULL); - pending_blocks = NULL; - } -} - /* Take one of the lists of symbols and make a block from it. Keep the order the symbols have in the list (reversed from the input file). Put the block on the list of pending blocks. */ @@ -533,7 +518,7 @@ finish_block_internal (struct symbol *symbol, start of this scope that don't have superblocks yet. */ opblock = NULL; - for (pblock = pending_blocks; + for (pblock = buildsym_compunit->m_pending_blocks; pblock && pblock != old_blocks; pblock = pblock->next) { @@ -613,10 +598,8 @@ record_pending_block (struct objfile *objfile, struct block *block, { struct pending_block *pblock; - if (pending_blocks == NULL) - obstack_init (&pending_block_obstack); - - pblock = XOBNEW (&pending_block_obstack, struct pending_block); + pblock = XOBNEW (&buildsym_compunit->m_pending_block_obstack, + struct pending_block); pblock->block = block; if (opblock) { @@ -625,8 +608,8 @@ record_pending_block (struct objfile *objfile, struct block *block, } else { - pblock->next = pending_blocks; - pending_blocks = pblock; + pblock->next = buildsym_compunit->m_pending_blocks; + buildsym_compunit->m_pending_blocks = pblock; } } @@ -670,8 +653,10 @@ make_blockvector (void) /* Count the length of the list of blocks. */ - for (next = pending_blocks, i = 0; next; next = next->next, i++) - {; + for (next = buildsym_compunit->m_pending_blocks, i = 0; + next; + next = next->next, i++) + { } blockvector = (struct blockvector *) @@ -686,12 +671,12 @@ make_blockvector (void) sure this is true. */ BLOCKVECTOR_NBLOCKS (blockvector) = i; - for (next = pending_blocks; next; next = next->next) + for (next = buildsym_compunit->m_pending_blocks; next; next = next->next) { BLOCKVECTOR_BLOCK (blockvector, --i) = next->block; } - free_pending_blocks (); + buildsym_compunit->free_pending_blocks (); /* If we needed an address map for this symtab, record it in the blockvector. */ @@ -1229,13 +1214,13 @@ end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required) /* Reordered executables may have out of order pending blocks; if OBJF_REORDERED is true, then sort the pending blocks. */ - if ((objfile->flags & OBJF_REORDERED) && pending_blocks) + if ((objfile->flags & OBJF_REORDERED) && buildsym_compunit->m_pending_blocks) { struct pending_block *pb; std::vector barray; - for (pb = pending_blocks; pb != NULL; pb = pb->next) + for (pb = buildsym_compunit->m_pending_blocks; pb != NULL; pb = pb->next) barray.push_back (pb->block); /* Sort blocks by start address in descending order. Blocks with the @@ -1248,7 +1233,7 @@ end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required) }); int i = 0; - for (pb = pending_blocks; pb != NULL; pb = pb->next) + for (pb = buildsym_compunit->m_pending_blocks; pb != NULL; pb = pb->next) pb->block = barray[i++]; } @@ -1266,7 +1251,7 @@ end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required) finish_global_stabs (objfile); if (!required - && pending_blocks == NULL + && buildsym_compunit->m_pending_blocks == NULL && file_symbols == NULL && global_symbols == NULL && !buildsym_compunit->m_have_line_numbers @@ -1568,7 +1553,7 @@ augment_type_symtab (void) if (!buildsym_compunit->m_context_stack.empty ()) complaint (_("Context stack not empty in augment_type_symtab")); - if (pending_blocks != NULL) + if (buildsym_compunit->m_pending_blocks != NULL) complaint (_("Blocks in a type symtab")); if (buildsym_compunit->m_pending_macros != NULL) complaint (_("Macro in a type symtab")); @@ -1614,7 +1599,7 @@ push_context (int desc, CORE_ADDR valu) newobj->depth = desc; newobj->locals = local_symbols; - newobj->old_blocks = pending_blocks; + newobj->old_blocks = buildsym_compunit->m_pending_blocks; newobj->start_addr = valu; newobj->local_using_directives = buildsym_compunit->m_local_using_directives; @@ -1770,7 +1755,6 @@ buildsym_init () /* Ensure the scoped_free_pendings destructor was called after the last time. */ gdb_assert (free_pendings == NULL); - gdb_assert (pending_blocks == NULL); gdb_assert (file_symbols == NULL); gdb_assert (global_symbols == NULL); gdb_assert (buildsym_compunit == NULL); diff --git a/gdb/buildsym.h b/gdb/buildsym.h index 9a4856d234..e0668f8678 100644 --- a/gdb/buildsym.h +++ b/gdb/buildsym.h @@ -157,7 +157,7 @@ class scoped_free_pendings { public: - scoped_free_pendings (); + scoped_free_pendings () = default; ~scoped_free_pendings (); DISABLE_COPY_AND_ASSIGN (scoped_free_pendings); -- 2.34.1