aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/buildsym.c39
-rw-r--r--gdb/buildsym.h4
3 files changed, 24 insertions, 28 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d382384..7d12bee 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 6db07ce..8d06cec 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -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;
}
/* 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
diff --git a/gdb/buildsym.h b/gdb/buildsym.h
index d094345..b5ea63d 100644
--- a/gdb/buildsym.h
+++ b/gdb/buildsym.h
@@ -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,