diff options
author | Tom Tromey <tom@tromey.com> | 2018-05-21 00:28:56 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-07-20 09:42:43 -0600 |
commit | 7ea05a7b634a895128e87c8c71e8e611758cd4bb (patch) | |
tree | e374aa4681dd6b8b3b536d30205ee19413790380 /gdb/buildsym.c | |
parent | 3c65e5b31cb5587773deff979099435b9687a0f4 (diff) | |
download | gdb-7ea05a7b634a895128e87c8c71e8e611758cd4bb.zip gdb-7ea05a7b634a895128e87c8c71e8e611758cd4bb.tar.gz gdb-7ea05a7b634a895128e87c8c71e8e611758cd4bb.tar.bz2 |
Move pending addrmap globals to buildsym_compunit
This moves the pending addrmap-related globals into buildsym_compunit.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* buildsym.c (struct buildsym_compunit) <m_pending_addrmap,
m_pending_addrmap_obstack, m_pending_addrmap_interesting>: New
members.
(pending_addrmap, pending_addrmap_obstack)
(pending_addrmap_interesting): Remove.
(scoped_free_pendings, record_block_range, make_blockvector)
(prepare_for_building, reset_symtab_globals, buildsym_init):
Update.
Diffstat (limited to 'gdb/buildsym.c')
-rw-r--r-- | gdb/buildsym.c | 63 |
1 files changed, 26 insertions, 37 deletions
diff --git a/gdb/buildsym.c b/gdb/buildsym.c index 620f252..2de8d99 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -216,6 +216,22 @@ struct buildsym_compunit std::vector<struct context_stack> m_context_stack; struct subfile *m_current_subfile = nullptr; + + /* The mutable address map for the compilation unit whose symbols + we're currently reading. The symtabs' shared blockvector will + point to a fixed copy of this. */ + struct addrmap *m_pending_addrmap = nullptr; + + /* The obstack on which we allocate pending_addrmap. + If pending_addrmap is NULL, this is uninitialized; otherwise, it is + initialized (and holds pending_addrmap). */ + auto_obstack m_pending_addrmap_obstack; + + /* True if we recorded any ranges in the addrmap that are different + from those in the blockvector already. We set this to false when + we start processing a symfile, and if it's still false at the + end, then we just toss the addrmap. */ + bool m_pending_addrmap_interesting = false; }; /* The work-in-progress of the compunit we are building. @@ -227,22 +243,6 @@ static struct buildsym_compunit *buildsym_compunit; static struct pending *free_pendings; -/* The mutable address map for the compilation unit whose symbols - we're currently reading. The symtabs' shared blockvector will - point to a fixed copy of this. */ -static struct addrmap *pending_addrmap; - -/* The obstack on which we allocate pending_addrmap. - If pending_addrmap is NULL, this is uninitialized; otherwise, it is - initialized (and holds pending_addrmap). */ -static struct obstack pending_addrmap_obstack; - -/* Non-zero if we recorded any ranges in the addrmap that are - different from those in the blockvector already. We set this to - zero when we start processing a symfile, and if it's still zero at - the end, then we just toss the addrmap. */ -static int pending_addrmap_interesting; - /* An obstack used for allocating pending blocks. */ static struct obstack pending_block_obstack; @@ -378,10 +378,6 @@ scoped_free_pendings::~scoped_free_pendings () } global_symbols = NULL; - if (pending_addrmap) - obstack_free (&pending_addrmap_obstack, NULL); - pending_addrmap = NULL; - free_buildsym_compunit (); } @@ -654,15 +650,14 @@ record_block_range (struct block *block, need to record this block in the addrmap. */ if (start != BLOCK_START (block) || end_inclusive + 1 != BLOCK_END (block)) - pending_addrmap_interesting = 1; + buildsym_compunit->m_pending_addrmap_interesting = true; - if (! pending_addrmap) - { - obstack_init (&pending_addrmap_obstack); - pending_addrmap = addrmap_create_mutable (&pending_addrmap_obstack); - } + if (buildsym_compunit->m_pending_addrmap == nullptr) + buildsym_compunit->m_pending_addrmap + = addrmap_create_mutable (&buildsym_compunit->m_pending_addrmap_obstack); - addrmap_set_empty (pending_addrmap, start, end_inclusive, block); + addrmap_set_empty (buildsym_compunit->m_pending_addrmap, + start, end_inclusive, block); } static struct blockvector * @@ -700,9 +695,11 @@ make_blockvector (void) /* If we needed an address map for this symtab, record it in the blockvector. */ - if (pending_addrmap && pending_addrmap_interesting) + if (buildsym_compunit->m_pending_addrmap != nullptr + && buildsym_compunit->m_pending_addrmap_interesting) BLOCKVECTOR_MAP (blockvector) - = addrmap_create_fixed (pending_addrmap, &objfile->objfile_obstack); + = addrmap_create_fixed (buildsym_compunit->m_pending_addrmap, + &objfile->objfile_obstack); else BLOCKVECTOR_MAP (blockvector) = 0; @@ -1031,7 +1028,6 @@ prepare_for_building () a symtab, or by the scoped_free_pendings destructor. */ gdb_assert (file_symbols == NULL); gdb_assert (global_symbols == NULL); - gdb_assert (pending_addrmap == NULL); gdb_assert (buildsym_compunit == nullptr); } @@ -1185,10 +1181,6 @@ reset_symtab_globals (void) file_symbols = NULL; global_symbols = NULL; - if (pending_addrmap) - obstack_free (&pending_addrmap_obstack, NULL); - pending_addrmap = NULL; - free_buildsym_compunit (); } @@ -1775,14 +1767,11 @@ get_current_subfile () void buildsym_init () { - pending_addrmap_interesting = 0; - /* 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 (pending_addrmap == NULL); gdb_assert (buildsym_compunit == NULL); } |