mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-03 05:12:28 +08:00
* gdbtypes.c (recursive_dump_type): Add dont_print_type_obstack
to inhibit infinite recursion when printing aggregate types.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
Sat Aug 19 01:19:34 1995 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
||||||
|
|
||||||
|
* gdbtypes.c (recursive_dump_type): Add dont_print_type_obstack
|
||||||
|
to inhibit infinite recursion when printing aggregate types.
|
||||||
|
|
||||||
Fri Aug 18 17:48:55 1995 steve chamberlain <sac@slash.cygnus.com>
|
Fri Aug 18 17:48:55 1995 steve chamberlain <sac@slash.cygnus.com>
|
||||||
|
|
||||||
* dcache.c (dcache_write_line): Write dirty lines right.
|
* dcache.c (dcache_write_line): Write dirty lines right.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Support routines for manipulating internal types for GDB.
|
/* Support routines for manipulating internal types for GDB.
|
||||||
Copyright (C) 1992 Free Software Foundation, Inc.
|
Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||||
Contributed by Cygnus Support, using pieces from other GDB modules.
|
Contributed by Cygnus Support, using pieces from other GDB modules.
|
||||||
|
|
||||||
This file is part of GDB.
|
This file is part of GDB.
|
||||||
@ -1335,6 +1335,8 @@ print_cplus_stuff (type, spaces)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct obstack dont_print_type_obstack;
|
||||||
|
|
||||||
void
|
void
|
||||||
recursive_dump_type (type, spaces)
|
recursive_dump_type (type, spaces)
|
||||||
struct type *type;
|
struct type *type;
|
||||||
@ -1342,6 +1344,32 @@ recursive_dump_type (type, spaces)
|
|||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
|
if (spaces == 0)
|
||||||
|
obstack_begin (&dont_print_type_obstack, 0);
|
||||||
|
|
||||||
|
if (TYPE_NFIELDS (type) > 0
|
||||||
|
|| (TYPE_CPLUS_SPECIFIC (type) && TYPE_NFN_FIELDS (type) > 0))
|
||||||
|
{
|
||||||
|
struct type **first_dont_print
|
||||||
|
= (struct type **)obstack_base (&dont_print_type_obstack);
|
||||||
|
|
||||||
|
int i = (struct type **)obstack_next_free (&dont_print_type_obstack)
|
||||||
|
- first_dont_print;
|
||||||
|
|
||||||
|
while (--i >= 0)
|
||||||
|
{
|
||||||
|
if (type == first_dont_print[i])
|
||||||
|
{
|
||||||
|
printfi_filtered (spaces, "type node ");
|
||||||
|
gdb_print_address (type, gdb_stdout);
|
||||||
|
printf_filtered (" <same as already seen type>\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obstack_ptr_grow (&dont_print_type_obstack, type);
|
||||||
|
}
|
||||||
|
|
||||||
printfi_filtered (spaces, "type node ");
|
printfi_filtered (spaces, "type node ");
|
||||||
gdb_print_address (type, gdb_stdout);
|
gdb_print_address (type, gdb_stdout);
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
@ -1508,6 +1536,8 @@ recursive_dump_type (type, spaces)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (spaces == 0)
|
||||||
|
obstack_free (&dont_print_type_obstack, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* MAINTENANCE_CMDS */
|
#endif /* MAINTENANCE_CMDS */
|
||||||
|
Reference in New Issue
Block a user