Move the symbol lists to buildsym_compunit

This moves the global symbol lists into buildsym_compunit, adds
accessors, and updates all the users.

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

	* xcoffread.c (read_xcoff_symtab, process_xcoff_symbol): Update.
	* stabsread.c (patch_block_stabs, define_symbol, read_type)
	(read_enum_type, common_block_start, common_block_end)
	(cleanup_undefined_types_1, finish_global_stabs): Update.
	* mdebugread.c (psymtab_to_symtab_1): Update.
	* dwarf2read.c (fixup_go_packaging, read_func_scope)
	(read_lexical_block_scope, new_symbol): Update.
	* dbxread.c (process_one_symbol): Update.
	* coffread.c (coff_symtab_read, process_coff_symbol)
	(coff_read_enum_type): Update.
	* buildsym.h (file_symbols, global_symbols, local_symbols): Don't
	declare.
	(get_local_symbols, get_file_symbols, get_global_symbols): New
	functions.
	* buildsym.c (~buildsym_compunit): Clean up m_file_symbols and
	m_global_symbols.
	<m_file_symbols, m_local_symbols, m_global_symbols>: New members.
	(~scoped_free_pendings): Update.
	(finish_block, prepare_for_building, reset_symtab_globals)
	(end_symtab_get_static_block, end_symtab_with_blockvector)
	(augment_type_symtab, push_context): Update.
	(get_local_symbols, get_file_symbols, get_global_symbols): New
	functions.
	(buildsym_init): Update.
This commit is contained in:
Tom Tromey 2018-05-21 09:12:54 -06:00
parent 93b8bea414
commit e148f09d75
9 changed files with 180 additions and 131 deletions

View File

@ -1,3 +1,30 @@
2018-07-20 Tom Tromey <tom@tromey.com>
* xcoffread.c (read_xcoff_symtab, process_xcoff_symbol): Update.
* stabsread.c (patch_block_stabs, define_symbol, read_type)
(read_enum_type, common_block_start, common_block_end)
(cleanup_undefined_types_1, finish_global_stabs): Update.
* mdebugread.c (psymtab_to_symtab_1): Update.
* dwarf2read.c (fixup_go_packaging, read_func_scope)
(read_lexical_block_scope, new_symbol): Update.
* dbxread.c (process_one_symbol): Update.
* coffread.c (coff_symtab_read, process_coff_symbol)
(coff_read_enum_type): Update.
* buildsym.h (file_symbols, global_symbols, local_symbols): Don't
declare.
(get_local_symbols, get_file_symbols, get_global_symbols): New
functions.
* buildsym.c (~buildsym_compunit): Clean up m_file_symbols and
m_global_symbols.
<m_file_symbols, m_local_symbols, m_global_symbols>: New members.
(~scoped_free_pendings): Update.
(finish_block, prepare_for_building, reset_symtab_globals)
(end_symtab_get_static_block, end_symtab_with_blockvector)
(augment_type_symtab, push_context): Update.
(get_local_symbols, get_file_symbols, get_global_symbols): New
functions.
(buildsym_init): Update.
2018-07-20 Tom Tromey <tom@tromey.com> 2018-07-20 Tom Tromey <tom@tromey.com>
* dwarf2read.c (process_full_comp_unit): Do not set list_in_scope. * dwarf2read.c (process_full_comp_unit): Do not set list_in_scope.

View File

@ -131,6 +131,20 @@ struct buildsym_compunit
xfree (subfile->line_vector); xfree (subfile->line_vector);
xfree (subfile); xfree (subfile);
} }
struct pending *next, *next1;
for (next = m_file_symbols; next != NULL; next = next1)
{
next1 = next->next;
xfree ((void *) next);
}
for (next = m_global_symbols; next != NULL; next = next1)
{
next1 = next->next;
xfree ((void *) next);
}
} }
void set_last_source_file (const char *name) void set_last_source_file (const char *name)
@ -249,6 +263,15 @@ struct buildsym_compunit
are just waiting to be built into a blockvector when finalizing the are just waiting to be built into a blockvector when finalizing the
associated symtab. */ associated symtab. */
struct pending_block *m_pending_blocks = nullptr; struct pending_block *m_pending_blocks = nullptr;
/* Pending static symbols and types at the top level. */
struct pending *m_file_symbols = nullptr;
/* Pending global functions and variables. */
struct pending *m_global_symbols = nullptr;
/* Pending symbols that are local to the lexical context. */
struct pending *m_local_symbols = nullptr;
}; };
/* The work-in-progress of the compunit we are building. /* The work-in-progress of the compunit we are building.
@ -339,22 +362,6 @@ find_symbol_in_list (struct pending *list, char *name, int length)
scoped_free_pendings::~scoped_free_pendings () scoped_free_pendings::~scoped_free_pendings ()
{ {
struct pending *next, *next1;
for (next = file_symbols; next != NULL; next = next1)
{
next1 = next->next;
xfree ((void *) next);
}
file_symbols = NULL;
for (next = global_symbols; next != NULL; next = next1)
{
next1 = next->next;
xfree ((void *) next);
}
global_symbols = NULL;
free_buildsym_compunit (); free_buildsym_compunit ();
} }
@ -559,7 +566,8 @@ finish_block (struct symbol *symbol,
const struct dynamic_prop *static_link, const struct dynamic_prop *static_link,
CORE_ADDR start, CORE_ADDR end) CORE_ADDR start, CORE_ADDR end)
{ {
return finish_block_internal (symbol, &local_symbols, old_blocks, static_link, return finish_block_internal (symbol, &buildsym_compunit->m_local_symbols,
old_blocks, static_link,
start, end, 0, 0); start, end, 0, 0);
} }
@ -985,12 +993,8 @@ get_macro_table (void)
static void static void
prepare_for_building () prepare_for_building ()
{ {
local_symbols = NULL;
/* These should have been reset either by successful completion of building /* These should have been reset either by successful completion of building
a symtab, or by the scoped_free_pendings destructor. */ a symtab, or by the scoped_free_pendings destructor. */
gdb_assert (file_symbols == NULL);
gdb_assert (global_symbols == NULL);
gdb_assert (buildsym_compunit == nullptr); gdb_assert (buildsym_compunit == nullptr);
} }
@ -1140,10 +1144,6 @@ watch_main_source_file_lossage (void)
static void static void
reset_symtab_globals (void) reset_symtab_globals (void)
{ {
local_symbols = NULL;
file_symbols = NULL;
global_symbols = NULL;
free_buildsym_compunit (); free_buildsym_compunit ();
} }
@ -1230,8 +1230,8 @@ end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required)
if (!required if (!required
&& buildsym_compunit->m_pending_blocks == NULL && buildsym_compunit->m_pending_blocks == NULL
&& file_symbols == NULL && buildsym_compunit->m_file_symbols == NULL
&& global_symbols == NULL && buildsym_compunit->m_global_symbols == NULL
&& !buildsym_compunit->m_have_line_numbers && !buildsym_compunit->m_have_line_numbers
&& buildsym_compunit->m_pending_macros == NULL && buildsym_compunit->m_pending_macros == NULL
&& buildsym_compunit->m_global_using_directives == NULL) && buildsym_compunit->m_global_using_directives == NULL)
@ -1242,7 +1242,7 @@ end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required)
else else
{ {
/* Define the STATIC_BLOCK. */ /* Define the STATIC_BLOCK. */
return finish_block_internal (NULL, &file_symbols, NULL, NULL, return finish_block_internal (NULL, get_file_symbols (), NULL, NULL,
buildsym_compunit->m_last_source_start_addr, buildsym_compunit->m_last_source_start_addr,
end_addr, 0, expandable); end_addr, 0, expandable);
} }
@ -1270,7 +1270,7 @@ end_symtab_with_blockvector (struct block *static_block,
end_addr = BLOCK_END (static_block); end_addr = BLOCK_END (static_block);
/* Create the GLOBAL_BLOCK and build the blockvector. */ /* Create the GLOBAL_BLOCK and build the blockvector. */
finish_block_internal (NULL, &global_symbols, NULL, NULL, finish_block_internal (NULL, get_global_symbols (), NULL, NULL,
buildsym_compunit->m_last_source_start_addr, end_addr, buildsym_compunit->m_last_source_start_addr, end_addr,
1, expandable); 1, expandable);
blockvector = make_blockvector (); blockvector = make_blockvector ();
@ -1538,26 +1538,27 @@ augment_type_symtab (void)
if (buildsym_compunit->m_have_line_numbers) if (buildsym_compunit->m_have_line_numbers)
complaint (_("Line numbers recorded in a type symtab")); complaint (_("Line numbers recorded in a type symtab"));
if (file_symbols != NULL) if (buildsym_compunit->m_file_symbols != NULL)
{ {
struct block *block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK); struct block *block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
/* First mark any symbols without a specified symtab as belonging /* First mark any symbols without a specified symtab as belonging
to the primary symtab. */ to the primary symtab. */
set_missing_symtab (file_symbols, cust); set_missing_symtab (buildsym_compunit->m_file_symbols, cust);
dict_add_pending (BLOCK_DICT (block), file_symbols); dict_add_pending (BLOCK_DICT (block), buildsym_compunit->m_file_symbols);
} }
if (global_symbols != NULL) if (buildsym_compunit->m_global_symbols != NULL)
{ {
struct block *block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK); struct block *block = BLOCKVECTOR_BLOCK (blockvector, GLOBAL_BLOCK);
/* First mark any symbols without a specified symtab as belonging /* First mark any symbols without a specified symtab as belonging
to the primary symtab. */ to the primary symtab. */
set_missing_symtab (global_symbols, cust); set_missing_symtab (buildsym_compunit->m_global_symbols, cust);
dict_add_pending (BLOCK_DICT (block), global_symbols); dict_add_pending (BLOCK_DICT (block),
buildsym_compunit->m_global_symbols);
} }
reset_symtab_globals (); reset_symtab_globals ();
@ -1576,14 +1577,14 @@ push_context (int desc, CORE_ADDR valu)
struct context_stack *newobj = &buildsym_compunit->m_context_stack.back (); struct context_stack *newobj = &buildsym_compunit->m_context_stack.back ();
newobj->depth = desc; newobj->depth = desc;
newobj->locals = local_symbols; newobj->locals = buildsym_compunit->m_local_symbols;
newobj->old_blocks = buildsym_compunit->m_pending_blocks; newobj->old_blocks = buildsym_compunit->m_pending_blocks;
newobj->start_addr = valu; newobj->start_addr = valu;
newobj->local_using_directives newobj->local_using_directives
= buildsym_compunit->m_local_using_directives; = buildsym_compunit->m_local_using_directives;
newobj->name = NULL; newobj->name = NULL;
local_symbols = NULL; buildsym_compunit->m_local_symbols = NULL;
buildsym_compunit->m_local_using_directives = NULL; buildsym_compunit->m_local_using_directives = NULL;
return newobj; return newobj;
@ -1721,6 +1722,33 @@ get_current_subfile ()
return buildsym_compunit->m_current_subfile; return buildsym_compunit->m_current_subfile;
} }
/* See buildsym.h. */
struct pending **
get_local_symbols ()
{
gdb_assert (buildsym_compunit != nullptr);
return &buildsym_compunit->m_local_symbols;
}
/* See buildsym.h. */
struct pending **
get_file_symbols ()
{
gdb_assert (buildsym_compunit != nullptr);
return &buildsym_compunit->m_file_symbols;
}
/* See buildsym.h. */
struct pending **
get_global_symbols ()
{
gdb_assert (buildsym_compunit != nullptr);
return &buildsym_compunit->m_global_symbols;
}
/* Initialize anything that needs initializing when starting to read a /* Initialize anything that needs initializing when starting to read a
@ -1730,9 +1758,4 @@ get_current_subfile ()
void void
buildsym_init () buildsym_init ()
{ {
/* Ensure the scoped_free_pendings destructor was called after
the last time. */
gdb_assert (file_symbols == NULL);
gdb_assert (global_symbols == NULL);
gdb_assert (buildsym_compunit == NULL);
} }

View File

@ -77,20 +77,6 @@ struct pending
struct symbol *symbol[PENDINGSIZE]; struct symbol *symbol[PENDINGSIZE];
}; };
/* Here are the three lists that symbols are put on. */
/* static at top level, and types */
EXTERN struct pending *file_symbols;
/* global functions and variables */
EXTERN struct pending *global_symbols;
/* everything local to lexical context */
EXTERN struct pending *local_symbols;
/* Stack representing unclosed lexical contexts (that will become /* Stack representing unclosed lexical contexts (that will become
blocks, eventually). */ blocks, eventually). */
@ -275,6 +261,18 @@ extern int get_context_stack_depth ();
extern struct subfile *get_current_subfile (); extern struct subfile *get_current_subfile ();
/* Return the local symbol list. */
extern struct pending **get_local_symbols ();
/* Return the file symbol list. */
extern struct pending **get_file_symbols ();
/* Return the global symbol list. */
extern struct pending **get_global_symbols ();
#undef EXTERN #undef EXTERN
#endif /* defined (BUILDSYM_H) */ #endif /* defined (BUILDSYM_H) */

View File

@ -1171,7 +1171,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
symnum); symnum);
break; break;
} }
if (local_symbols && !outermost_context_p ()) if (*get_local_symbols () && !outermost_context_p ())
{ {
tmpaddr = tmpaddr =
cs->c_value + ANOFFSET (objfile->section_offsets, cs->c_value + ANOFFSET (objfile->section_offsets,
@ -1181,7 +1181,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
cstk.start_addr, tmpaddr); cstk.start_addr, tmpaddr);
} }
/* Now pop locals of block just finished. */ /* Now pop locals of block just finished. */
local_symbols = cstk.locals; *get_local_symbols () = cstk.locals;
} }
break; break;
@ -1647,10 +1647,10 @@ process_coff_symbol (struct coff_symbol *cs,
SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT
|| cs->c_sclass == C_THUMBSTATFUNC) || cs->c_sclass == C_THUMBSTATFUNC)
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
else if (cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT else if (cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
|| cs->c_sclass == C_THUMBEXTFUNC) || cs->c_sclass == C_THUMBEXTFUNC)
add_symbol_to_list (sym, &global_symbols); add_symbol_to_list (sym, get_global_symbols ());
} }
else else
{ {
@ -1662,7 +1662,7 @@ process_coff_symbol (struct coff_symbol *cs,
case C_AUTO: case C_AUTO:
SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL; SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case C_THUMBEXT: case C_THUMBEXT:
@ -1672,7 +1672,7 @@ process_coff_symbol (struct coff_symbol *cs,
SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value; SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets, SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
SECT_OFF_TEXT (objfile)); SECT_OFF_TEXT (objfile));
add_symbol_to_list (sym, &global_symbols); add_symbol_to_list (sym, get_global_symbols ());
break; break;
case C_THUMBSTAT: case C_THUMBSTAT:
@ -1685,12 +1685,12 @@ process_coff_symbol (struct coff_symbol *cs,
if (within_function) if (within_function)
{ {
/* Static symbol of local scope. */ /* Static symbol of local scope. */
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
} }
else else
{ {
/* Static symbol at top level of file. */ /* Static symbol at top level of file. */
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
} }
break; break;
@ -1700,7 +1700,7 @@ process_coff_symbol (struct coff_symbol *cs,
case C_REG: case C_REG:
SYMBOL_ACLASS_INDEX (sym) = coff_register_index; SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
SYMBOL_VALUE (sym) = cs->c_value; SYMBOL_VALUE (sym) = cs->c_value;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case C_THUMBLABEL: case C_THUMBLABEL:
@ -1710,14 +1710,14 @@ process_coff_symbol (struct coff_symbol *cs,
case C_ARG: case C_ARG:
SYMBOL_ACLASS_INDEX (sym) = LOC_ARG; SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
SYMBOL_IS_ARGUMENT (sym) = 1; SYMBOL_IS_ARGUMENT (sym) = 1;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case C_REGPARM: case C_REGPARM:
SYMBOL_ACLASS_INDEX (sym) = coff_register_index; SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
SYMBOL_IS_ARGUMENT (sym) = 1; SYMBOL_IS_ARGUMENT (sym) = 1;
SYMBOL_VALUE (sym) = cs->c_value; SYMBOL_VALUE (sym) = cs->c_value;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case C_TPDEF: case C_TPDEF:
@ -1771,7 +1771,7 @@ process_coff_symbol (struct coff_symbol *cs,
SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i]; SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
opaque_type_chain[i] = sym; opaque_type_chain[i] = sym;
} }
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
break; break;
case C_STRTAG: case C_STRTAG:
@ -1790,7 +1790,7 @@ process_coff_symbol (struct coff_symbol *cs,
TYPE_NAME (SYMBOL_TYPE (sym)) = TYPE_NAME (SYMBOL_TYPE (sym)) =
concat (SYMBOL_LINKAGE_NAME (sym), (char *)NULL); concat (SYMBOL_LINKAGE_NAME (sym), (char *)NULL);
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
break; break;
default: default:
@ -2154,9 +2154,9 @@ coff_read_enum_type (int index, int length, int lastsym,
type = coff_alloc_type (index); type = coff_alloc_type (index);
if (within_function) if (within_function)
symlist = &local_symbols; symlist = get_local_symbols ();
else else
symlist = &file_symbols; symlist = get_file_symbols ();
osyms = *symlist; osyms = *symlist;
o_nsyms = osyms ? osyms->nsyms : 0; o_nsyms = osyms ? osyms->nsyms : 0;

View File

@ -2573,7 +2573,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
if (desc != cstk.depth) if (desc != cstk.depth)
lbrac_mismatch_complaint (symnum); lbrac_mismatch_complaint (symnum);
if (local_symbols != NULL) if (*get_local_symbols () != NULL)
{ {
/* GCC development snapshots from March to December of /* GCC development snapshots from March to December of
2000 would output N_LSYM entries after N_LBRAC 2000 would output N_LSYM entries after N_LBRAC
@ -2582,7 +2582,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
complaint (_("misplaced N_LBRAC entry; discarding local " complaint (_("misplaced N_LBRAC entry; discarding local "
"symbols which have no enclosing block")); "symbols which have no enclosing block"));
} }
local_symbols = cstk.locals; *get_local_symbols () = cstk.locals;
if (get_context_stack_depth () > 1) if (get_context_stack_depth () > 1)
{ {
@ -2592,7 +2592,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
for them (but don't bother if the block contains no for them (but don't bother if the block contains no
symbols. Should we complain on blocks without symbols? symbols. Should we complain on blocks without symbols?
I can't think of any useful purpose for them). */ I can't think of any useful purpose for them). */
if (local_symbols != NULL) if (*get_local_symbols () != NULL)
{ {
/* Muzzle a compiler bug that makes end < start. /* Muzzle a compiler bug that makes end < start.

View File

@ -9715,7 +9715,7 @@ fixup_go_packaging (struct dwarf2_cu *cu)
struct pending *list; struct pending *list;
int i; int i;
for (list = global_symbols; list != NULL; list = list->next) for (list = *get_global_symbols (); list != NULL; list = list->next)
{ {
for (i = 0; i < list->nsyms; ++i) for (i = 0; i < list->nsyms; ++i)
{ {
@ -9768,7 +9768,7 @@ fixup_go_packaging (struct dwarf2_cu *cu)
SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
SYMBOL_TYPE (sym) = type; SYMBOL_TYPE (sym) = type;
add_symbol_to_list (sym, &global_symbols); add_symbol_to_list (sym, get_global_symbols ());
xfree (package_name); xfree (package_name);
} }
@ -13628,7 +13628,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
attr_to_dynamic_prop (attr, die, cu, newobj->static_link); attr_to_dynamic_prop (attr, die, cu, newobj->static_link);
} }
cu->list_in_scope = &local_symbols; cu->list_in_scope = get_local_symbols ();
if (die->child != NULL) if (die->child != NULL)
{ {
@ -13713,13 +13713,13 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
a function declares a class that has methods). This means that a function declares a class that has methods). This means that
when we finish processing a function scope, we may need to go when we finish processing a function scope, we may need to go
back to building a containing block's symbol lists. */ back to building a containing block's symbol lists. */
local_symbols = cstk.locals; *get_local_symbols () = cstk.locals;
set_local_using_directives (cstk.local_using_directives); set_local_using_directives (cstk.local_using_directives);
/* If we've finished processing a top-level function, subsequent /* If we've finished processing a top-level function, subsequent
symbols go in the file symbol list. */ symbols go in the file symbol list. */
if (outermost_context_p ()) if (outermost_context_p ())
cu->list_in_scope = &file_symbols; cu->list_in_scope = get_file_symbols ();
} }
/* Process all the DIES contained within a lexical block scope. Start /* Process all the DIES contained within a lexical block scope. Start
@ -13771,7 +13771,7 @@ read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
inherit_abstract_dies (die, cu); inherit_abstract_dies (die, cu);
struct context_stack cstk = pop_context (); struct context_stack cstk = pop_context ();
if (local_symbols != NULL || (*get_local_using_directives ()) != NULL) if (*get_local_symbols () != NULL || (*get_local_using_directives ()) != NULL)
{ {
struct block *block struct block *block
= finish_block (0, cstk.old_blocks, NULL, = finish_block (0, cstk.old_blocks, NULL,
@ -13789,7 +13789,7 @@ read_lexical_block_scope (struct die_info *die, struct dwarf2_cu *cu)
to do. */ to do. */
dwarf2_record_block_ranges (die, block, baseaddr, cu); dwarf2_record_block_ranges (die, block, baseaddr, cu);
} }
local_symbols = cstk.locals; *get_local_symbols () = cstk.locals;
set_local_using_directives (cstk.local_using_directives); set_local_using_directives (cstk.local_using_directives);
} }
@ -21015,7 +21015,7 @@ dwarf2_start_symtab (struct dwarf2_cu *cu,
= start_symtab (cu->per_cu->dwarf2_per_objfile->objfile, name, comp_dir, = start_symtab (cu->per_cu->dwarf2_per_objfile->objfile, name, comp_dir,
low_pc, cu->language); low_pc, cu->language);
cu->list_in_scope = &file_symbols; cu->list_in_scope = get_file_symbols ();
record_debugformat ("DWARF 2"); record_debugformat ("DWARF 2");
record_producer (cu->producer); record_producer (cu->producer);
@ -21208,7 +21208,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
access them globally. For instance, we want to be able access them globally. For instance, we want to be able
to break on a nested subprogram without having to to break on a nested subprogram without having to
specify the context. */ specify the context. */
list_to_add = &global_symbols; list_to_add = get_global_symbols ();
} }
else else
{ {
@ -21251,7 +21251,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
if (!suppress_add) if (!suppress_add)
{ {
if (attr2 && (DW_UNSND (attr2) != 0)) if (attr2 && (DW_UNSND (attr2) != 0))
list_to_add = &global_symbols; list_to_add = get_global_symbols ();
else else
list_to_add = cu->list_in_scope; list_to_add = cu->list_in_scope;
} }
@ -21296,8 +21296,8 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
/* A variable with DW_AT_external is never static, /* A variable with DW_AT_external is never static,
but it may be block-scoped. */ but it may be block-scoped. */
list_to_add = (cu->list_in_scope == &file_symbols list_to_add = (cu->list_in_scope == get_file_symbols ()
? &global_symbols : cu->list_in_scope); ? get_global_symbols () : cu->list_in_scope);
} }
else else
list_to_add = cu->list_in_scope; list_to_add = cu->list_in_scope;
@ -21327,8 +21327,8 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
{ {
/* A variable with DW_AT_external is never static, but it /* A variable with DW_AT_external is never static, but it
may be block-scoped. */ may be block-scoped. */
list_to_add = (cu->list_in_scope == &file_symbols list_to_add = (cu->list_in_scope == get_file_symbols ()
? &global_symbols : cu->list_in_scope); ? get_global_symbols () : cu->list_in_scope);
SYMBOL_ACLASS_INDEX (sym) = LOC_UNRESOLVED; SYMBOL_ACLASS_INDEX (sym) = LOC_UNRESOLVED;
} }
@ -21393,9 +21393,9 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
if (!suppress_add) if (!suppress_add)
{ {
list_to_add = (cu->list_in_scope == &file_symbols list_to_add = (cu->list_in_scope == get_file_symbols ()
&& cu->language == language_cplus && cu->language == language_cplus
? &global_symbols : cu->list_in_scope); ? get_global_symbols () : cu->list_in_scope);
/* The semantics of C++ state that "struct foo { /* The semantics of C++ state that "struct foo {
... }" also defines a typedef for "foo". */ ... }" also defines a typedef for "foo". */
@ -21434,20 +21434,20 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
/* NOTE: carlton/2003-11-10: See comment above in the /* NOTE: carlton/2003-11-10: See comment above in the
DW_TAG_class_type, etc. block. */ DW_TAG_class_type, etc. block. */
list_to_add = (cu->list_in_scope == &file_symbols list_to_add = (cu->list_in_scope == get_file_symbols ()
&& cu->language == language_cplus && cu->language == language_cplus
? &global_symbols : cu->list_in_scope); ? get_global_symbols () : cu->list_in_scope);
} }
break; break;
case DW_TAG_imported_declaration: case DW_TAG_imported_declaration:
case DW_TAG_namespace: case DW_TAG_namespace:
SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
list_to_add = &global_symbols; list_to_add = get_global_symbols ();
break; break;
case DW_TAG_module: case DW_TAG_module:
SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF; SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
SYMBOL_DOMAIN (sym) = MODULE_DOMAIN; SYMBOL_DOMAIN (sym) = MODULE_DOMAIN;
list_to_add = &global_symbols; list_to_add = get_global_symbols ();
break; break;
case DW_TAG_common_block: case DW_TAG_common_block:
SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK; SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK;

View File

@ -4040,7 +4040,7 @@ psymtab_to_symtab_1 (struct objfile *objfile,
SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_void; SYMBOL_TYPE (s) = objfile_type (objfile)->builtin_void;
SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e; SYMBOL_VALUE_BYTES (s) = (gdb_byte *) e;
e->pdr.framereg = -1; e->pdr.framereg = -1;
add_symbol_to_list (s, &local_symbols); add_symbol_to_list (s, get_local_symbols ());
} }
} }
else if (sh.st == stLabel) else if (sh.st == stLabel)

View File

@ -432,7 +432,7 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
{ {
SYMBOL_TYPE (sym) = read_type (&pp, objfile); SYMBOL_TYPE (sym) = read_type (&pp, objfile);
} }
add_symbol_to_list (sym, &global_symbols); add_symbol_to_list (sym, get_global_symbols ());
} }
else else
{ {
@ -789,7 +789,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
SYMBOL_TYPE (sym) = error_type (&p, objfile); SYMBOL_TYPE (sym) = error_type (&p, objfile);
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
return sym; return sym;
} }
++p; ++p;
@ -848,7 +848,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
SYMBOL_TYPE (sym) = error_type (&p, objfile); SYMBOL_TYPE (sym) = error_type (&p, objfile);
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
return sym; return sym;
} }
@ -873,7 +873,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
SYMBOL_TYPE (sym) = error_type (&p, objfile); SYMBOL_TYPE (sym) = error_type (&p, objfile);
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
return sym; return sym;
} }
@ -928,7 +928,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
} }
} }
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
return sym; return sym;
case 'C': case 'C':
@ -937,7 +937,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL; SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
SYMBOL_VALUE_ADDRESS (sym) = valu; SYMBOL_VALUE_ADDRESS (sym) = valu;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case 'f': case 'f':
@ -945,7 +945,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_TYPE (sym) = read_type (&p, objfile); SYMBOL_TYPE (sym) = read_type (&p, objfile);
SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
/* fall into process_function_types. */ /* fall into process_function_types. */
process_function_types: process_function_types:
@ -1016,7 +1016,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_TYPE (sym) = read_type (&p, objfile); SYMBOL_TYPE (sym) = read_type (&p, objfile);
SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &global_symbols); add_symbol_to_list (sym, get_global_symbols ());
goto process_function_types; goto process_function_types;
case 'G': case 'G':
@ -1037,7 +1037,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i]; SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
global_sym_chain[i] = sym; global_sym_chain[i] = sym;
} }
add_symbol_to_list (sym, &global_symbols); add_symbol_to_list (sym, get_global_symbols ());
break; break;
/* This case is faked by a conditional above, /* This case is faked by a conditional above,
@ -1049,7 +1049,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL; SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
SYMBOL_VALUE (sym) = valu; SYMBOL_VALUE (sym) = valu;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case 'p': case 'p':
@ -1070,7 +1070,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_VALUE (sym) = valu; SYMBOL_VALUE (sym) = valu;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
SYMBOL_IS_ARGUMENT (sym) = 1; SYMBOL_IS_ARGUMENT (sym) = 1;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
if (gdbarch_byte_order (gdbarch) != BFD_ENDIAN_BIG) if (gdbarch_byte_order (gdbarch) != BFD_ENDIAN_BIG)
{ {
@ -1119,7 +1119,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_IS_ARGUMENT (sym) = 1; SYMBOL_IS_ARGUMENT (sym) = 1;
SYMBOL_VALUE (sym) = valu; SYMBOL_VALUE (sym) = valu;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case 'r': case 'r':
@ -1150,6 +1150,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
but this case is considered pathological and causes a warning but this case is considered pathological and causes a warning
from a decent compiler. */ from a decent compiler. */
struct pending *local_symbols = *get_local_symbols ();
if (local_symbols if (local_symbols
&& local_symbols->nsyms > 0 && local_symbols->nsyms > 0
&& gdbarch_stabs_argument_has_addr (gdbarch, SYMBOL_TYPE (sym))) && gdbarch_stabs_argument_has_addr (gdbarch, SYMBOL_TYPE (sym)))
@ -1171,10 +1172,10 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
break; break;
} }
} }
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
} }
else else
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
break; break;
case 'S': case 'S':
@ -1201,7 +1202,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
} }
} }
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
break; break;
case 't': case 't':
@ -1305,7 +1306,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
TYPE_NAME (SYMBOL_TYPE (sym)) = SYMBOL_LINKAGE_NAME (sym); TYPE_NAME (SYMBOL_TYPE (sym)) = SYMBOL_LINKAGE_NAME (sym);
} }
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
if (synonym) if (synonym)
{ {
@ -1321,7 +1322,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
= obconcat (&objfile->objfile_obstack, = obconcat (&objfile->objfile_obstack,
SYMBOL_LINKAGE_NAME (sym), SYMBOL_LINKAGE_NAME (sym),
(char *) NULL); (char *) NULL);
add_symbol_to_list (struct_sym, &file_symbols); add_symbol_to_list (struct_sym, get_file_symbols ());
} }
break; break;
@ -1349,7 +1350,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
= obconcat (&objfile->objfile_obstack, = obconcat (&objfile->objfile_obstack,
SYMBOL_LINKAGE_NAME (sym), SYMBOL_LINKAGE_NAME (sym),
(char *) NULL); (char *) NULL);
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
if (synonym) if (synonym)
{ {
@ -1365,7 +1366,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
= obconcat (&objfile->objfile_obstack, = obconcat (&objfile->objfile_obstack,
SYMBOL_LINKAGE_NAME (sym), SYMBOL_LINKAGE_NAME (sym),
(char *) NULL); (char *) NULL);
add_symbol_to_list (typedef_sym, &file_symbols); add_symbol_to_list (typedef_sym, get_file_symbols ());
} }
break; break;
@ -1393,7 +1394,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
} }
} }
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case 'v': case 'v':
@ -1403,7 +1404,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_IS_ARGUMENT (sym) = 1; SYMBOL_IS_ARGUMENT (sym) = 1;
SYMBOL_VALUE (sym) = valu; SYMBOL_VALUE (sym) = valu;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case 'a': case 'a':
@ -1413,7 +1414,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_IS_ARGUMENT (sym) = 1; SYMBOL_IS_ARGUMENT (sym) = 1;
SYMBOL_VALUE (sym) = valu; SYMBOL_VALUE (sym) = valu;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
case 'X': case 'X':
@ -1425,7 +1426,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL; SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
SYMBOL_VALUE (sym) = valu; SYMBOL_VALUE (sym) = valu;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &local_symbols); add_symbol_to_list (sym, get_local_symbols ());
break; break;
default: default:
@ -1433,7 +1434,7 @@ define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
SYMBOL_ACLASS_INDEX (sym) = LOC_CONST; SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
SYMBOL_VALUE (sym) = 0; SYMBOL_VALUE (sym) = 0;
SYMBOL_DOMAIN (sym) = VAR_DOMAIN; SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
add_symbol_to_list (sym, &file_symbols); add_symbol_to_list (sym, get_file_symbols ());
break; break;
} }
@ -1675,7 +1676,7 @@ again:
type, rather than allocating a new one. This saves some type, rather than allocating a new one. This saves some
memory. */ memory. */
for (ppt = file_symbols; ppt; ppt = ppt->next) for (ppt = *get_file_symbols (); ppt; ppt = ppt->next)
for (i = 0; i < ppt->nsyms; i++) for (i = 0; i < ppt->nsyms; i++)
{ {
struct symbol *sym = ppt->symbol[i]; struct symbol *sym = ppt->symbol[i];
@ -3642,10 +3643,10 @@ read_enum_type (const char **pp, struct type *type,
to be file-scope, between N_FN entries, using N_LSYM. What's a mother to be file-scope, between N_FN entries, using N_LSYM. What's a mother
to do? For now, force all enum values to file scope. */ to do? For now, force all enum values to file scope. */
if (within_function) if (within_function)
symlist = &local_symbols; symlist = get_local_symbols ();
else else
#endif #endif
symlist = &file_symbols; symlist = get_file_symbols ();
osyms = *symlist; osyms = *symlist;
o_nsyms = osyms ? osyms->nsyms : 0; o_nsyms = osyms ? osyms->nsyms : 0;
@ -4316,8 +4317,8 @@ common_block_start (const char *name, struct objfile *objfile)
{ {
complaint (_("Invalid symbol data: common block within common block")); complaint (_("Invalid symbol data: common block within common block"));
} }
common_block = local_symbols; common_block = *get_local_symbols ();
common_block_i = local_symbols ? local_symbols->nsyms : 0; common_block_i = common_block ? common_block->nsyms : 0;
common_block_name = (char *) obstack_copy0 (&objfile->objfile_obstack, name, common_block_name = (char *) obstack_copy0 (&objfile->objfile_obstack, name,
strlen (name)); strlen (name));
} }
@ -4352,7 +4353,7 @@ common_block_end (struct objfile *objfile)
/* Now we copy all the symbols which have been defined since the BCOMM. */ /* Now we copy all the symbols which have been defined since the BCOMM. */
/* Copy all the struct pendings before common_block. */ /* Copy all the struct pendings before common_block. */
for (next = local_symbols; for (next = *get_local_symbols ();
next != NULL && next != common_block; next != NULL && next != common_block;
next = next->next) next = next->next)
{ {
@ -4545,7 +4546,7 @@ cleanup_undefined_types_1 (void)
complaint (_("need a type name")); complaint (_("need a type name"));
break; break;
} }
for (ppt = file_symbols; ppt; ppt = ppt->next) for (ppt = *get_file_symbols (); ppt; ppt = ppt->next)
{ {
for (i = 0; i < ppt->nsyms; i++) for (i = 0; i < ppt->nsyms; i++)
{ {
@ -4781,7 +4782,7 @@ finish_global_stabs (struct objfile *objfile)
{ {
if (global_stabs) if (global_stabs)
{ {
patch_block_stabs (global_symbols, global_stabs, objfile); patch_block_stabs (*get_global_symbols (), global_stabs, objfile);
xfree (global_stabs); xfree (global_stabs);
global_stabs = NULL; global_stabs = NULL;
} }

View File

@ -1496,7 +1496,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst)
eb_complaint (cs->c_symnum); eb_complaint (cs->c_symnum);
break; break;
} }
if (local_symbols && !outermost_context_p ()) if (*get_local_symbols () && !outermost_context_p ())
{ {
/* Make a block for the local symbols within. */ /* Make a block for the local symbols within. */
finish_block (cstk.name, finish_block (cstk.name,
@ -1506,7 +1506,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst)
+ ANOFFSET (objfile->section_offsets, + ANOFFSET (objfile->section_offsets,
SECT_OFF_TEXT (objfile)))); SECT_OFF_TEXT (objfile))));
} }
local_symbols = cstk.locals; *get_local_symbols () = cstk.locals;
} }
break; break;
@ -1594,9 +1594,9 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile)
SYMBOL_DUP (sym, sym2); SYMBOL_DUP (sym, sym2);
if (cs->c_sclass == C_EXT || C_WEAKEXT) if (cs->c_sclass == C_EXT || C_WEAKEXT)
add_symbol_to_list (sym2, &global_symbols); add_symbol_to_list (sym2, get_global_symbols ());
else if (cs->c_sclass == C_HIDEXT || cs->c_sclass == C_STAT) else if (cs->c_sclass == C_HIDEXT || cs->c_sclass == C_STAT)
add_symbol_to_list (sym2, &file_symbols); add_symbol_to_list (sym2, get_file_symbols ());
} }
else else
{ {