[RFA,19/42] Move the using directives to buildsym_compunit

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

Commit Message

Tom Tromey May 23, 2018, 4:58 a.m. UTC
  This moves the globals local_using_directives and
global_using_directives to be members of buildsym_compunit, and adds
the necessary accessors.

gdb/ChangeLog
2018-05-22  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (using_directives, read_func_scope)
	(read_lexical_block_scope): Update.
	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Update.
	* buildsym.h (local_using_directives, global_using_directives):
	Don't declare.
	(get_local_using_directives, set_local_using_directives)
	(get_global_using_directives): Declare.
	* buildsym.c (struct buildsym_compunit) <m_local_using_directives,
	m_global_using_directives>: New members.
	(finish_block_internal, prepare_for_building)
	(reset_symtab_globals, end_symtab_get_static_block)
	(push_context): Update.
	(get_local_using_directives, set_local_using_directives)
	(get_global_using_directives): New functions.
	(buildsym_init): Update.
---
 gdb/ChangeLog      | 18 ++++++++++++++++++
 gdb/buildsym.c     | 55 ++++++++++++++++++++++++++++++++++++++++++------------
 gdb/buildsym.h     | 20 ++++++++++++--------
 gdb/cp-namespace.c |  2 +-
 gdb/dwarf2read.c   | 10 +++++-----
 5 files changed, 79 insertions(+), 26 deletions(-)
  

Comments

Keith Seitz July 5, 2018, 8:14 p.m. UTC | #1
Trivial nitpicking time:

On 05/22/2018 09:58 PM, Tom Tromey wrote:
> diff --git a/gdb/buildsym.c b/gdb/buildsym.c
> index 5d3d1f2942..4e3ca5e4b1 100644
> --- a/gdb/buildsym.c
> +++ b/gdb/buildsym.c
> @@ -205,6 +205,14 @@ struct buildsym_compunit
>  
>    /* Stack of subfile names.  */
>    std::vector<const char *> m_subfile_stack;
> +
> +  /* "using" directives local to lexical context.  */
> +
> +  struct using_direct *m_local_using_directives = nullptr;
> +
> +  /* global "using" directives.  */
> +
> +  struct using_direct *m_global_using_directives = nullptr;
>  };
>  
>  /* The work-in-progress of the compunit we are building.
Since you're modifying these lines, could you update the comments (e.g., capitalize "Global") and remove the newline between the comment and decl?

Keith
  
Tom Tromey July 8, 2018, 4:28 p.m. UTC | #2
>>>>> "Keith" == Keith Seitz <keiths@redhat.com> writes:

Keith> Since you're modifying these lines, could you update the comments
Keith> (e.g., capitalize "Global") and remove the newline between the
Keith> comment and decl?

I did this.

Tom
  
Simon Marchi July 8, 2018, 5:08 p.m. UTC | #3
On 2018-07-08 12:28 PM, Tom Tromey wrote:
>>>>>> "Keith" == Keith Seitz <keiths@redhat.com> writes:
> 
> Keith> Since you're modifying these lines, could you update the comments
> Keith> (e.g., capitalize "Global") and remove the newline between the
> Keith> comment and decl?
> 
> I did this.
> 
> Tom

LGTM with this.

Simon
  

Patch

diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 5d3d1f2942..4e3ca5e4b1 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -205,6 +205,14 @@  struct buildsym_compunit
 
   /* Stack of subfile names.  */
   std::vector<const char *> m_subfile_stack;
+
+  /* "using" directives local to lexical context.  */
+
+  struct using_direct *m_local_using_directives = nullptr;
+
+  /* global "using" directives.  */
+
+  struct using_direct *m_global_using_directives = nullptr;
 };
 
 /* The work-in-progress of the compunit we are building.
@@ -578,13 +586,13 @@  finish_block_internal (struct symbol *symbol,
 
   block_set_using (block,
 		   (is_global
-		    ? global_using_directives
-		    : local_using_directives),
+		    ? buildsym_compunit->m_global_using_directives
+		    : buildsym_compunit->m_local_using_directives),
 		   &objfile->objfile_obstack);
   if (is_global)
-    global_using_directives = NULL;
+    buildsym_compunit->m_global_using_directives = NULL;
   else
-    local_using_directives = NULL;
+    buildsym_compunit->m_local_using_directives = NULL;
 
   record_pending_block (objfile, block, opblock);
 
@@ -1023,7 +1031,6 @@  static void
 prepare_for_building ()
 {
   local_symbols = NULL;
-  local_using_directives = NULL;
 
   context_stack_depth = 0;
 
@@ -1031,7 +1038,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 (global_using_directives == NULL);
   gdb_assert (pending_addrmap == NULL);
   gdb_assert (current_subfile == NULL);
   gdb_assert (buildsym_compunit == nullptr);
@@ -1184,10 +1190,8 @@  static void
 reset_symtab_globals (void)
 {
   local_symbols = NULL;
-  local_using_directives = NULL;
   file_symbols = NULL;
   global_symbols = NULL;
-  global_using_directives = NULL;
 
   if (pending_addrmap)
     obstack_free (&pending_addrmap_obstack, NULL);
@@ -1284,7 +1288,7 @@  end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required)
       && global_symbols == NULL
       && buildsym_compunit->m_have_line_numbers == 0
       && buildsym_compunit->m_pending_macros == NULL
-      && global_using_directives == NULL)
+      && buildsym_compunit->m_global_using_directives == NULL)
     {
       /* Ignore symtabs that have no functions with real debugging info.  */
       return NULL;
@@ -1640,11 +1644,12 @@  push_context (int desc, CORE_ADDR valu)
   newobj->locals = local_symbols;
   newobj->old_blocks = pending_blocks;
   newobj->start_addr = valu;
-  newobj->local_using_directives = local_using_directives;
+  newobj->local_using_directives
+    = buildsym_compunit->m_local_using_directives;
   newobj->name = NULL;
 
   local_symbols = NULL;
-  local_using_directives = NULL;
+  buildsym_compunit->m_local_using_directives = NULL;
 
   return newobj;
 }
@@ -1713,6 +1718,33 @@  get_last_source_start_addr ()
   return buildsym_compunit->m_last_source_start_addr;
 }
 
+/* See buildsym.h.  */
+
+struct using_direct **
+get_local_using_directives ()
+{
+  gdb_assert (buildsym_compunit != nullptr);
+  return &buildsym_compunit->m_local_using_directives;
+}
+
+/* See buildsym.h.  */
+
+void
+set_local_using_directives (struct using_direct *new_local)
+{
+  gdb_assert (buildsym_compunit != nullptr);
+  buildsym_compunit->m_local_using_directives = new_local;
+}
+
+/* See buildsym.h.  */
+
+struct using_direct **
+get_global_using_directives ()
+{
+  gdb_assert (buildsym_compunit != nullptr);
+  return &buildsym_compunit->m_global_using_directives;
+}
+
 
 
 /* Initialize anything that needs initializing when starting to read a
@@ -1738,7 +1770,6 @@  buildsym_init ()
   gdb_assert (pending_blocks == NULL);
   gdb_assert (file_symbols == NULL);
   gdb_assert (global_symbols == NULL);
-  gdb_assert (global_using_directives == NULL);
   gdb_assert (pending_addrmap == NULL);
   gdb_assert (buildsym_compunit == NULL);
 }
diff --git a/gdb/buildsym.h b/gdb/buildsym.h
index 512d926dcb..efb35c907b 100644
--- a/gdb/buildsym.h
+++ b/gdb/buildsym.h
@@ -93,14 +93,6 @@  EXTERN struct pending *global_symbols;
 
 EXTERN struct pending *local_symbols;
 
-/* "using" directives local to lexical context.  */
-
-EXTERN struct using_direct *local_using_directives;
-
-/* global "using" directives.  */
-
-EXTERN struct using_direct *global_using_directives;
-
 /* Stack representing unclosed lexical contexts (that will become
    blocks, eventually).  */
 
@@ -266,6 +258,18 @@  extern void set_last_source_start_addr (CORE_ADDR addr);
 
 extern CORE_ADDR get_last_source_start_addr ();
 
+/* Return the local using directives.  */
+
+extern struct using_direct **get_local_using_directives ();
+
+/* Set the list of local using directives.  */
+
+extern void set_local_using_directives (struct using_direct *new_local);
+
+/* Return the global using directives.  */
+
+extern struct using_direct **get_global_using_directives ();
+
 #undef EXTERN
 
 #endif /* defined (BUILDSYM_H) */
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index 185607e4eb..22b7af00d6 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -94,7 +94,7 @@  cp_scan_for_anonymous_namespaces (const struct symbol *const symbol,
 		 namespace given by the previous component if there is
 		 one, or to the global namespace if there isn't.  */
 	      std::vector<const char *> excludes;
-	      add_using_directive (&local_using_directives,
+	      add_using_directive (get_local_using_directives (),
 				   dest, src, NULL, NULL, excludes, 1,
 				   &objfile->objfile_obstack);
 	    }
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 4871787583..ec62a23091 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -11141,9 +11141,9 @@  static struct using_direct **
 using_directives (enum language language)
 {
   if (language == language_ada && context_stack_depth == 0)
-    return &global_using_directives;
+    return get_global_using_directives ();
   else
-    return &local_using_directives;
+    return get_local_using_directives ();
 }
 
 /* Read the import statement specified by the given die and record it.  */
@@ -13770,7 +13770,7 @@  read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
      when we finish processing a function scope, we may need to go
      back to building a containing block's symbol lists.  */
   local_symbols = newobj->locals;
-  local_using_directives = newobj->local_using_directives;
+  set_local_using_directives (newobj->local_using_directives);
 
   /* If we've finished processing a top-level function, subsequent
      symbols go in the file symbol list.  */
@@ -13828,7 +13828,7 @@  read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
   inherit_abstract_dies (die, cu);
   newobj = pop_context ();
 
-  if (local_symbols != NULL || local_using_directives != NULL)
+  if (local_symbols != NULL || (*get_local_using_directives ()) != NULL)
     {
       struct block *block
         = finish_block (0, &local_symbols, newobj->old_blocks, NULL,
@@ -13847,7 +13847,7 @@  read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
       dwarf2_record_block_ranges (die, block, baseaddr, cu);
     }
   local_symbols = newobj->locals;
-  local_using_directives = newobj->local_using_directives;
+  set_local_using_directives (newobj->local_using_directives);
 }
 
 /* Read in DW_TAG_call_site and insert it to CU->call_site_htab.  */