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

Message ID 20180523045851.11660-24-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey May 23, 2018, 4:58 a.m. UTC
  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(-)
  

Comments

Simon Marchi July 10, 2018, 1:56 a.m. UTC | #1
On 2018-05-23 12:58 AM, Tom Tromey wrote:
> @@ -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)

Can you please change this to == 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 *
> @@ -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)

And here != nullptr.

Otherwise, LGTM.

Simon
  
Tom Tromey July 12, 2018, 4:34 a.m. UTC | #2
>>>>> "Simon" == Simon Marchi <simark@simark.ca> writes:

>> +  if (! buildsym_compunit->m_pending_addrmap)

Simon> Can you please change this to == nullptr?

>> +  if (buildsym_compunit->m_pending_addrmap
>> +      && buildsym_compunit->m_pending_addrmap_interesting)

Simon> And here != nullptr.

Simon> Otherwise, LGTM.

I did this.

Tom
  

Patch

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);
 }