diff options
author | Tom Tromey <tromey@redhat.com> | 2012-12-10 17:09:29 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-12-10 17:09:29 +0000 |
commit | 93eed41f8ee40080a4e5f21fe7e950e5f34534ae (patch) | |
tree | afcac976fe583342ef7c65b8e263eb48c366736c /gdb/buildsym.c | |
parent | d2e5c99a26ed6f9267895cfa477d0d91faf17908 (diff) | |
download | gdb-93eed41f8ee40080a4e5f21fe7e950e5f34534ae.zip gdb-93eed41f8ee40080a4e5f21fe7e950e5f34534ae.tar.gz gdb-93eed41f8ee40080a4e5f21fe7e950e5f34534ae.tar.bz2 |
* buildsym.c (struct pending_block): Move from buildsym.h.
(pending_blocks): Likewise; now static.
(pending_block_obstack): New global.
(free_pending_blocks): Free blocks.
(record_pending_block): Use pending_block_obstack.
* buildsym.h (struct pending_block): Move definition to
buildsym.c.
(pending_blocks): Don't declare.
Diffstat (limited to 'gdb/buildsym.c')
-rw-r--r-- | gdb/buildsym.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/gdb/buildsym.c b/gdb/buildsym.c index 8f2e732..c3e8516 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -83,6 +83,25 @@ static struct obstack pending_addrmap_obstack; 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; + +/* List of blocks already made (lexical contexts already closed). + This is used at the end to make the blockvector. */ + +struct pending_block + { + struct pending_block *next; + struct block *block; + }; + +/* Pointer to the head of a linked list of symbol blocks which have + already been finalized (lexical contexts already closed) and which + are just waiting to be built into a blockvector when finalizing the + associated symtab. */ + +static struct pending_block *pending_blocks; static int compare_line_numbers (const void *ln1p, const void *ln2p); @@ -205,9 +224,11 @@ really_free_pendings (void *dummy) void free_pending_blocks (void) { - /* The links are made in the objfile_obstack, so we only need to - reset PENDING_BLOCKS. */ - pending_blocks = NULL; + if (pending_blocks != NULL) + { + obstack_free (&pending_block_obstack, NULL); + pending_blocks = NULL; + } } /* Take one of the lists of symbols and make a block from it. Keep @@ -418,8 +439,11 @@ record_pending_block (struct objfile *objfile, struct block *block, { struct pending_block *pblock; + if (pending_blocks == NULL) + obstack_init (&pending_block_obstack); + pblock = (struct pending_block *) - obstack_alloc (&objfile->objfile_obstack, sizeof (struct pending_block)); + obstack_alloc (&pending_block_obstack, sizeof (struct pending_block)); pblock->block = block; if (opblock) { |