[RFA 23/42] Move pending addrmap globals to buildsym_compunit

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

This moves the pending addrmap-related globals into buildsym_compunit.

gdb/ChangeLog
2018-05-22 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.
---
gdb/ChangeLog | 11 ++++++++++
gdb/buildsym.c | 63 ++++++++++++++++++++++++----------------------------------
2 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 4f820f5dc5..179810f463 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -218,6 +218,22 @@ struct buildsym_compunit
struct context_stack m_popped_context {};

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.
@@ -229,22 +245,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;
@@ -380,10 +380,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 ();
}

@@ -660,15 +656,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)
+ 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 *
@@ -706,9 +701,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
+ && 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;

@@ -1037,7 +1034,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);
}

@@ -1191,10 +1187,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 ();
}

@@ -1785,14 +1777,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);
}
--
2.13.6