Just some cleanups noticed while working on PR 10760
* dbxread.c (dbx_symfile_read): Call free_pending_blocks rather than poking global variable (which is now static). * hpread.c (hpread_build_psymtabs): Ditto. * os9kread.c (os9k_symfile_read): Ditto. * xcoffread.c (xcoff_initial_scan): Ditto. * buildsym.h (free_pending_blocks): Declare here. (pending_blocks): Remove declaration of global symbol. (free_pendings): Remove declaration of global symbol. (make_blockvector): Declare here. (record_pending_block): Declare here. * dstread.c (make_blockvector): Remove static copy that was old clone of version in buildsym.c. (process_dst_block): Call record_pending_block rather than doing it by hand. (read_dst_symtab): Ditto. * buildsym.c (make_blockvector): Make global rather than static, (record_pending_block): New function, code moved from finish_block. (finish_block): Use record_pending_block. (free_pending_blocks): New function. (really_free_pendings): Call free_pending_blocks. (pending_blocks): Make static instead of global. (free_pendings): Make static instead of global.
This commit is contained in:
parent
1c4794f58f
commit
a7f56d5aff
8 changed files with 107 additions and 88 deletions
|
@ -1,3 +1,31 @@
|
|||
Tue Oct 8 11:47:13 1996 Fred Fish <fnf@cygnus.com>
|
||||
|
||||
* dbxread.c (dbx_symfile_read): Call free_pending_blocks rather
|
||||
than poking global variable (which is now static).
|
||||
* hpread.c (hpread_build_psymtabs): Ditto.
|
||||
* os9kread.c (os9k_symfile_read): Ditto.
|
||||
* xcoffread.c (xcoff_initial_scan): Ditto.
|
||||
|
||||
* buildsym.h (free_pending_blocks): Declare here.
|
||||
(pending_blocks): Remove declaration of global symbol.
|
||||
(free_pendings): Remove declaration of global symbol.
|
||||
(make_blockvector): Declare here.
|
||||
(record_pending_block): Declare here.
|
||||
|
||||
* dstread.c (make_blockvector): Remove static copy that was old
|
||||
clone of version in buildsym.c.
|
||||
(process_dst_block): Call record_pending_block rather than doing
|
||||
it by hand.
|
||||
(read_dst_symtab): Ditto.
|
||||
|
||||
* buildsym.c (make_blockvector): Make global rather than static,
|
||||
(record_pending_block): New function, code moved from finish_block.
|
||||
(finish_block): Use record_pending_block.
|
||||
(free_pending_blocks): New function.
|
||||
(really_free_pendings): Call free_pending_blocks.
|
||||
(pending_blocks): Make static instead of global.
|
||||
(free_pendings): Make static instead of global.
|
||||
|
||||
Tue Oct 8 09:03:22 1996 Stu Grossman (grossman@critters.cygnus.com)
|
||||
|
||||
* config/i386/windows.mh config/i386/xm-windows.h:: New config
|
||||
|
|
|
@ -44,12 +44,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
questionable--see comment where we call them). */
|
||||
#include "stabsread.h"
|
||||
|
||||
/* 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 = NULL;
|
||||
|
||||
/* List of free `struct pending' structures for reuse. */
|
||||
|
||||
static struct pending *free_pendings;
|
||||
|
||||
|
||||
static int
|
||||
compare_line_numbers PARAMS ((const void *, const void *));
|
||||
|
||||
static struct blockvector *
|
||||
make_blockvector PARAMS ((struct objfile *));
|
||||
|
||||
|
||||
/* Initial sizes of data structures. These are realloc'd larger if needed,
|
||||
and realloc'd down to the size actually used, when completed. */
|
||||
|
@ -146,9 +155,6 @@ really_free_pendings (foo)
|
|||
int foo;
|
||||
{
|
||||
struct pending *next, *next1;
|
||||
#if 0
|
||||
struct pending_block *bnext, *bnext1;
|
||||
#endif
|
||||
|
||||
for (next = free_pendings; next; next = next1)
|
||||
{
|
||||
|
@ -157,14 +163,7 @@ really_free_pendings (foo)
|
|||
}
|
||||
free_pendings = NULL;
|
||||
|
||||
#if 0 /* Now we make the links in the symbol_obstack, so don't free them. */
|
||||
for (bnext = pending_blocks; bnext; bnext = bnext1)
|
||||
{
|
||||
bnext1 = bnext->next;
|
||||
free ((PTR)bnext);
|
||||
}
|
||||
#endif
|
||||
pending_blocks = NULL;
|
||||
free_pending_blocks ();
|
||||
|
||||
for (next = file_symbols; next != NULL; next = next1)
|
||||
{
|
||||
|
@ -181,6 +180,23 @@ really_free_pendings (foo)
|
|||
global_symbols = NULL;
|
||||
}
|
||||
|
||||
/* This function is called to discard any pending blocks. */
|
||||
|
||||
void
|
||||
free_pending_blocks ()
|
||||
{
|
||||
#if 0 /* Now we make the links in the symbol_obstack, so don't free them. */
|
||||
struct pending_block *bnext, *bnext1;
|
||||
|
||||
for (bnext = pending_blocks; bnext; bnext = bnext1)
|
||||
{
|
||||
bnext1 = bnext->next;
|
||||
free ((PTR)bnext);
|
||||
}
|
||||
#endif
|
||||
pending_blocks = NULL;
|
||||
}
|
||||
|
||||
/* Take one of the lists of symbols and make a block from it.
|
||||
Keep the order the symbols have in the list (reversed from the input file).
|
||||
Put the block on the list of pending blocks. */
|
||||
|
@ -381,29 +397,44 @@ finish_block (symbol, listhead, old_blocks, start, end, objfile)
|
|||
opblock = pblock;
|
||||
}
|
||||
|
||||
/* Record this block on the list of all blocks in the file.
|
||||
Put it after opblock, or at the beginning if opblock is 0.
|
||||
This puts the block in the list after all its subblocks. */
|
||||
record_pending_block (objfile, block, opblock);
|
||||
}
|
||||
|
||||
/* Record BLOCK on the list of all blocks in the file. Put it after
|
||||
OPBLOCK, or at the beginning if opblock is NULL. This puts the block
|
||||
in the list after all its subblocks.
|
||||
|
||||
Allocate the pending block struct in the symbol_obstack to save
|
||||
time. This wastes a little space. FIXME: Is it worth it? */
|
||||
|
||||
void
|
||||
record_pending_block (objfile, block, opblock)
|
||||
struct objfile* objfile;
|
||||
struct block *block;
|
||||
struct pending_block *opblock;
|
||||
{
|
||||
register struct pending_block *pblock;
|
||||
|
||||
/* Allocate in the symbol_obstack to save time.
|
||||
It wastes a little space. */
|
||||
pblock = (struct pending_block *)
|
||||
obstack_alloc (&objfile -> symbol_obstack,
|
||||
sizeof (struct pending_block));
|
||||
pblock->block = block;
|
||||
obstack_alloc (&objfile -> symbol_obstack, sizeof (struct pending_block));
|
||||
pblock -> block = block;
|
||||
if (opblock)
|
||||
{
|
||||
pblock->next = opblock->next;
|
||||
opblock->next = pblock;
|
||||
pblock -> next = opblock -> next;
|
||||
opblock -> next = pblock;
|
||||
}
|
||||
else
|
||||
{
|
||||
pblock->next = pending_blocks;
|
||||
pblock -> next = pending_blocks;
|
||||
pending_blocks = pblock;
|
||||
}
|
||||
}
|
||||
|
||||
static struct blockvector *
|
||||
/* Note that this is only used in this file and in dstread.c, which should be
|
||||
fixed to not need direct access to this function. When that is done, it can
|
||||
be made static again. */
|
||||
|
||||
struct blockvector *
|
||||
make_blockvector (objfile)
|
||||
struct objfile *objfile;
|
||||
{
|
||||
|
|
|
@ -96,10 +96,6 @@ struct pending
|
|||
struct symbol *symbol[PENDINGSIZE];
|
||||
};
|
||||
|
||||
/* List of free `struct pending' structures for reuse. */
|
||||
|
||||
EXTERN struct pending *free_pendings;
|
||||
|
||||
/* Here are the three lists that symbols are put on. */
|
||||
|
||||
EXTERN struct pending *file_symbols; /* static at top level, and types */
|
||||
|
@ -169,8 +165,6 @@ struct pending_block
|
|||
struct block *block;
|
||||
};
|
||||
|
||||
EXTERN struct pending_block *pending_blocks;
|
||||
|
||||
|
||||
struct subfile_stack
|
||||
{
|
||||
|
@ -254,6 +248,22 @@ start_symtab PARAMS ((char *, char *, CORE_ADDR));
|
|||
extern int
|
||||
hashname PARAMS ((char *));
|
||||
|
||||
extern void
|
||||
free_pending_blocks PARAMS ((void));
|
||||
|
||||
/* FIXME: Note that this is used only in buildsym.c and dstread.c,
|
||||
which should be fixed to not need direct access to make_blockvector. */
|
||||
|
||||
extern struct blockvector *
|
||||
make_blockvector PARAMS ((struct objfile *));
|
||||
|
||||
/* FIXME: Note that this is used only in buildsym.c and dstread.c,
|
||||
which should be fixed to not need direct access to record_pending_block. */
|
||||
|
||||
extern void
|
||||
record_pending_block PARAMS ((struct objfile *, struct block *,
|
||||
struct pending_block *));
|
||||
|
||||
#undef EXTERN
|
||||
|
||||
#endif /* defined (BUILDSYM_H) */
|
||||
|
|
|
@ -546,7 +546,7 @@ dbx_symfile_read (objfile, section_offsets, mainline)
|
|||
symbol_size = DBX_SYMBOL_SIZE (objfile);
|
||||
symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
|
||||
|
||||
pending_blocks = 0;
|
||||
free_pending_blocks ();
|
||||
back_to = make_cleanup (really_free_pendings, 0);
|
||||
|
||||
init_minimal_symbol_collection ();
|
||||
|
|
|
@ -51,9 +51,6 @@ static int prev_line_number;
|
|||
|
||||
static int line_vector_length;
|
||||
|
||||
static struct blockvector *
|
||||
make_blockvector PARAMS ((struct objfile *));
|
||||
|
||||
static int
|
||||
init_dst_sections PARAMS ((int));
|
||||
|
||||
|
@ -87,42 +84,6 @@ dst_start_symtab PARAMS ((void));
|
|||
static void
|
||||
dst_record_line PARAMS ((int, CORE_ADDR));
|
||||
|
||||
static struct blockvector *
|
||||
make_blockvector (objfile)
|
||||
struct objfile *objfile;
|
||||
{
|
||||
register struct pending_block *next, *next1;
|
||||
register struct blockvector *blockvector;
|
||||
register int i;
|
||||
|
||||
/* Count the length of the list of blocks. */
|
||||
|
||||
for (next = pending_blocks, i = 0; next; next = next->next, i++);
|
||||
|
||||
blockvector = (struct blockvector *)
|
||||
obstack_alloc (&objfile->symbol_obstack, sizeof (struct blockvector) + (i - 1) * sizeof (struct block *));
|
||||
|
||||
/* Copy the blocks into the blockvector.
|
||||
This is done in reverse order, which happens to put
|
||||
the blocks into the proper order (ascending starting address).
|
||||
*/
|
||||
|
||||
BLOCKVECTOR_NBLOCKS (blockvector) = i;
|
||||
for (next = pending_blocks; next; next = next->next)
|
||||
BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
|
||||
|
||||
/* Now free the links of the list, and empty the list. */
|
||||
|
||||
for (next = pending_blocks; next; next = next1)
|
||||
{
|
||||
next1 = next->next;
|
||||
free ((PTR)next);
|
||||
}
|
||||
pending_blocks = 0;
|
||||
|
||||
return blockvector;
|
||||
}
|
||||
|
||||
/* Manage the vector of line numbers. */
|
||||
/* FIXME: Use record_line instead. */
|
||||
|
||||
|
@ -1426,7 +1387,6 @@ process_dst_block(objfile, entry)
|
|||
dst_rec_ptr_t child_entry, symbol_entry;
|
||||
struct block *child_block;
|
||||
int total_symbols = 0;
|
||||
struct pending_block *pblock;
|
||||
char fake_name[20];
|
||||
static long fake_seq = 0;
|
||||
struct symbol_list *symlist, *nextsym;
|
||||
|
@ -1509,11 +1469,6 @@ process_dst_block(objfile, entry)
|
|||
else
|
||||
BLOCK_FUNCTION (block) = 0;
|
||||
|
||||
pblock = (struct pending_block *)
|
||||
xmalloc (sizeof (struct pending_block));
|
||||
pblock->block = block;
|
||||
pblock->next = pending_blocks;
|
||||
pending_blocks = pblock;
|
||||
if (DST_block(entry).child_block_off)
|
||||
{
|
||||
child_entry = (dst_rec_ptr_t) DST_OFFSET(entry,
|
||||
|
@ -1543,6 +1498,7 @@ process_dst_block(objfile, entry)
|
|||
child_entry = NULL;
|
||||
}
|
||||
}
|
||||
record_pending_block (objfile, block, NULL);
|
||||
return block;
|
||||
}
|
||||
|
||||
|
@ -1555,7 +1511,6 @@ read_dst_symtab (objfile)
|
|||
dst_rec_ptr_t entry, file_table, root_block;
|
||||
char *source_file;
|
||||
struct block *block, *global_block;
|
||||
struct pending_block *pblock;
|
||||
int symnum;
|
||||
struct symbol_list *nextsym;
|
||||
int module_num = 0;
|
||||
|
@ -1580,11 +1535,6 @@ read_dst_symtab (objfile)
|
|||
DST_comp_unit(entry).data_size);
|
||||
dst_start_symtab();
|
||||
|
||||
pblock = (struct pending_block *)
|
||||
xmalloc (sizeof (struct pending_block));
|
||||
pblock->next = NULL;
|
||||
pending_blocks = pblock;
|
||||
|
||||
block = process_dst_block(objfile, root_block);
|
||||
|
||||
global_block = (struct block *)
|
||||
|
@ -1610,7 +1560,7 @@ read_dst_symtab (objfile)
|
|||
BLOCK_END(global_block) = BLOCK_END(block);
|
||||
BLOCK_SUPERBLOCK(global_block) = 0;
|
||||
BLOCK_SUPERBLOCK(block) = global_block;
|
||||
pblock->block = global_block;
|
||||
record_pending_block (objfile, global_block, NULL);
|
||||
|
||||
complete_symtab(source_file,
|
||||
BLOCK_START(block),
|
||||
|
|
|
@ -340,7 +340,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
|||
int dependencies_used, dependencies_allocated;
|
||||
|
||||
/* Just in case the stabs reader left turds lying around. */
|
||||
pending_blocks = 0;
|
||||
free_pending_blocks ();
|
||||
make_cleanup (really_free_pendings, 0);
|
||||
|
||||
pst = (struct partial_symtab *) 0;
|
||||
|
|
|
@ -332,7 +332,7 @@ os9k_symfile_read (objfile, section_offsets, mainline)
|
|||
objfile->static_psymbols.size == 0)
|
||||
init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
|
||||
|
||||
pending_blocks = 0;
|
||||
free_pending_blocks ();
|
||||
back_to = make_cleanup (really_free_pendings, 0);
|
||||
|
||||
make_cleanup (discard_minimal_symbols, 0);
|
||||
|
|
|
@ -2718,7 +2718,7 @@ xcoff_initial_scan (objfile, section_offsets, mainline)
|
|||
include N_SLINE. */
|
||||
init_psymbol_list (objfile, num_symbols);
|
||||
|
||||
pending_blocks = 0;
|
||||
free_pending_blocks ();
|
||||
back_to = make_cleanup (really_free_pendings, 0);
|
||||
|
||||
init_minimal_symbol_collection ();
|
||||
|
|
Loading…
Reference in a new issue