Move the subfile stack to buildsym_compunit
authorTom Tromey <tom@tromey.com>
Mon, 21 May 2018 02:48:44 +0000 (20:48 -0600)
committerTom Tromey <tom@tromey.com>
Mon, 16 Jul 2018 14:55:21 +0000 (08:55 -0600)
This moves the global subfile_stack to be a member of
buildsym_compunit.  It also change this to be a std::vector, which
simplifies the code.

gdb/ChangeLog
2018-07-16  Tom Tromey  <tom@tromey.com>

* buildsym.h (push_subfile, pop_subfile): Update declarations.
* buildsym.c (struct buildsym_compunit) <m_subfile_stack>: New
member.
(struct subfile_stack): Remove.
(subfile_stack): Remove.
(push_subfile, pop_subfile, buildsym_init): Update.

gdb/ChangeLog
gdb/buildsym.c
gdb/buildsym.h

index d382384..7d12bee 100644 (file)
@@ -1,5 +1,14 @@
 2018-07-16  Tom Tromey  <tom@tromey.com>
 
+       * buildsym.h (push_subfile, pop_subfile): Update declarations.
+       * buildsym.c (struct buildsym_compunit) <m_subfile_stack>: New
+       member.
+       (struct subfile_stack): Remove.
+       (subfile_stack): Remove.
+       (push_subfile, pop_subfile, buildsym_init): Update.
+
+2018-07-16  Tom Tromey  <tom@tromey.com>
+
        * buildsym.c (push_subfile): Use gdb_assert.
        (pop_subfile): Use gdb_assert.
 
index 6db07ce..8d06cec 100644 (file)
@@ -201,6 +201,9 @@ struct buildsym_compunit
      comes from the N_SO symbol.  For Dwarf it typically comes from the
      DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE.  */
   CORE_ADDR m_last_source_start_addr;
+
+  /* Stack of subfile names.  */
+  std::vector<const char *> m_subfile_stack;
 };
 
 /* The work-in-progress of the compunit we are building.
@@ -248,14 +251,6 @@ struct pending_block
 
 static struct pending_block *pending_blocks;
 
-struct subfile_stack
-  {
-    struct subfile_stack *next;
-    char *name;
-  };
-
-static struct subfile_stack *subfile_stack;
-
 /* Currently allocated size of context stack.  */
 
 static int context_stack_size;
@@ -885,27 +880,21 @@ patch_subfile_names (struct subfile *subfile, const char *name)
    order.  */
 
 void
-push_subfile (void)
+push_subfile ()
 {
-  struct subfile_stack *tem = XNEW (struct subfile_stack);
-
-  tem->next = subfile_stack;
-  subfile_stack = tem;
+  gdb_assert (buildsym_compunit != nullptr);
   gdb_assert (current_subfile != NULL && current_subfile->name != NULL);
-  tem->name = current_subfile->name;
+  buildsym_compunit->m_subfile_stack.push_back (current_subfile->name);
 }
 
-char *
-pop_subfile (void)
+const char *
+pop_subfile ()
 {
-  char *name;
-  struct subfile_stack *link = subfile_stack;
-
-  gdb_assert (link != NULL);
-  name = link->name;
-  subfile_stack = link->next;
-  xfree ((void *) link);
-  return (name);
+  gdb_assert (buildsym_compunit != nullptr);
+  gdb_assert (!buildsym_compunit->m_subfile_stack.empty ());
+  const char *name = buildsym_compunit->m_subfile_stack.back ();
+  buildsym_compunit->m_subfile_stack.pop_back ();
+  return name;
 }
 \f
 /* Add a linetable entry for line number LINE and address PC to the
@@ -1718,8 +1707,6 @@ get_last_source_start_addr ()
 void
 buildsym_init ()
 {
-  subfile_stack = NULL;
-
   pending_addrmap_interesting = 0;
 
   /* Context stack is initially empty.  Allocate first one with room
index d094345..b5ea63d 100644 (file)
@@ -186,9 +186,9 @@ extern void start_subfile (const char *name);
 
 extern void patch_subfile_names (struct subfile *subfile, const char *name);
 
-extern void push_subfile (void);
+extern void push_subfile ();
 
-extern char *pop_subfile (void);
+extern const char *pop_subfile ();
 
 extern struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
                                                  int expandable,