* symfile.c (decrement_reading_symtab): New function.
* symfile.c, symtab.h (currently_reading_symtab): New variable. * symfile.c (psymtab_to_symtab): Adjust currently_reading_symtab. * gdbtypes.c (check_typedef): Don't call lookup_symbol if currently_reading_symtab (since that could infinitely recurse). This fixes PR chill/8793.
This commit is contained in:
parent
34cfa2dab5
commit
7ef893139c
3 changed files with 32 additions and 3 deletions
|
@ -1,3 +1,11 @@
|
|||
Thu Jan 11 23:13:24 1996 Per Bothner <bothner@cygnus.com>
|
||||
|
||||
* symfile.c (decrement_reading_symtab): New function.
|
||||
* symfile.c, symtab.h (currently_reading_symtab): New variable.
|
||||
* symfile.c (psymtab_to_symtab): Adjust currently_reading_symtab.
|
||||
* gdbtypes.c (check_typedef): Don't call lookup_symbol if
|
||||
currently_reading_symtab (since that could infinitely recurse).
|
||||
|
||||
Thu Jan 11 17:21:25 1996 Per Bothner <bothner@kalessin.cygnus.com>
|
||||
|
||||
* stabsread.c (read_struct_type): Trivial simplification.
|
||||
|
|
|
@ -878,12 +878,19 @@ check_typedef (type)
|
|||
{
|
||||
if (!TYPE_TARGET_TYPE (type))
|
||||
{
|
||||
char* name = type_name_no_tag (type);
|
||||
char* name;
|
||||
struct symbol *sym;
|
||||
|
||||
/* It is dangerous to call lookup_symbol if we are currently
|
||||
reading a symtab. Infinite recursion is one danger. */
|
||||
if (currently_reading_symtab)
|
||||
return type;
|
||||
|
||||
name = type_name_no_tag (type);
|
||||
/* FIXME: shouldn't we separately check the TYPE_NAME and the
|
||||
TYPE_TAG_NAME, and look in STRUCT_NAMESPACE and/or VAR_NAMESPACE
|
||||
as appropriate? (this code was written before TYPE_NAME and
|
||||
TYPE_TAG_NAME were separate). */
|
||||
struct symbol *sym;
|
||||
if (name == NULL)
|
||||
{
|
||||
complain (&stub_noname_complaint);
|
||||
|
@ -899,7 +906,7 @@ check_typedef (type)
|
|||
type = TYPE_TARGET_TYPE (type);
|
||||
}
|
||||
|
||||
if (TYPE_FLAGS(type) & TYPE_FLAG_STUB)
|
||||
if ((TYPE_FLAGS(type) & TYPE_FLAG_STUB) && ! currently_reading_symtab)
|
||||
{
|
||||
char* name = type_name_no_tag (type);
|
||||
/* FIXME: shouldn't we separately check the TYPE_NAME and the
|
||||
|
|
|
@ -267,6 +267,17 @@ obconcat (obstackp, s1, s2, s3)
|
|||
return val;
|
||||
}
|
||||
|
||||
/* True if we are nested inside psymtab_to_symtab. */
|
||||
|
||||
int currently_reading_symtab = 0;
|
||||
|
||||
static int
|
||||
decrement_reading_symtab (dummy)
|
||||
void *dummy;
|
||||
{
|
||||
currently_reading_symtab--;
|
||||
}
|
||||
|
||||
/* Get the symbol table that corresponds to a partial_symtab.
|
||||
This is fast after the first time you do it. In fact, there
|
||||
is an even faster macro PSYMTAB_TO_SYMTAB that does the fast
|
||||
|
@ -283,7 +294,10 @@ psymtab_to_symtab (pst)
|
|||
/* If it has not yet been read in, read it. */
|
||||
if (!pst->readin)
|
||||
{
|
||||
struct cleanup *back_to = make_cleanup (decrement_reading_symtab, NULL);
|
||||
currently_reading_symtab++;
|
||||
(*pst->read_symtab) (pst);
|
||||
do_cleanups (back_to);
|
||||
}
|
||||
|
||||
return pst->symtab;
|
||||
|
|
Loading…
Add table
Reference in a new issue