* 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:
Per Bothner 1996-01-12 07:16:20 +00:00
parent 34cfa2dab5
commit 7ef893139c
3 changed files with 32 additions and 3 deletions

View File

@ -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.

View File

@ -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

View File

@ -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;