Tue Apr 30 13:13:33 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
* valprint.c (type_print_base): If the type being printed is a struct containing undefined types, print "<undefine type>" as the type instead of crashing. * values.c (value_headof): Get the vtable pointer taking TYPE_VPTR_BASETYPE into account. * symtab.c, symtab.h, dbxread.c: Fix various whitespace splotches.
This commit is contained in:
parent
98c1b9e79b
commit
aec4cb918e
6 changed files with 31 additions and 10 deletions
|
@ -1,3 +1,12 @@
|
|||
Tue Apr 30 13:13:33 1991 Michael Tiemann (tiemann at cygint.cygnus.com)
|
||||
|
||||
* valprint.c (type_print_base): If the type being printed is a
|
||||
struct containing undefined types, print "<undefine type>"
|
||||
as the type instead of crashing.
|
||||
* values.c (value_headof): Get the vtable pointer taking
|
||||
TYPE_VPTR_BASETYPE into account.
|
||||
* symtab.c, symtab.h, dbxread.c: Fix various whitespace splotches.
|
||||
|
||||
Mon Apr 29 13:22:51 1991 Jim Kingdon (kingdon at cygint.cygnus.com)
|
||||
|
||||
* Move BROKEN_LARGE_ALLOCA from tm-sun386.h to xm-sun386.h.
|
||||
|
|
|
@ -3309,7 +3309,7 @@ define_symbol (valu, string, desc, type)
|
|||
} else {
|
||||
SYMBOL_LINE(sym) = 0; /* unknown */
|
||||
}
|
||||
|
||||
|
||||
if (string[0] == CPLUS_MARKER)
|
||||
{
|
||||
/* Special GNU C++ names. */
|
||||
|
|
|
@ -1933,7 +1933,7 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line)
|
|||
p = *argptr;
|
||||
while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p !=':') p++;
|
||||
q = operator_chars (*argptr, &q1);
|
||||
|
||||
|
||||
copy = (char *) alloca (p - *argptr + 1 + (q1 - q));
|
||||
if (q1 - q)
|
||||
{
|
||||
|
|
|
@ -759,7 +759,7 @@ int current_source_line;
|
|||
|
||||
/* The virtual function table is now an array of structures
|
||||
which have the form { int16 offset, delta; void *pfn; }.
|
||||
|
||||
|
||||
In normal virtual function tables, OFFSET is unused.
|
||||
DELTA is the amount which is added to the apparent object's base
|
||||
address in order to point to the actual object to which the
|
||||
|
|
|
@ -301,7 +301,7 @@ value_print (val, stream, format, pretty)
|
|||
printf_filtered ("<value optimized out>");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* A "repeated" value really contains several values in a row.
|
||||
They are made by the @ operator.
|
||||
Print such values as if they were arrays. */
|
||||
|
@ -1640,7 +1640,15 @@ type_print_base (type, stream, show, level)
|
|||
fprintf_filtered (stream, "virtual ");
|
||||
else if (TYPE_FN_FIELD_STATIC_P (f, j))
|
||||
fprintf_filtered (stream, "static ");
|
||||
type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), "", stream, 0);
|
||||
if (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)) == 0)
|
||||
{
|
||||
/* Keep GDB from crashing here. */
|
||||
fprintf (stream, "<undefined type> %s;\n",
|
||||
TYPE_FN_FIELD_PHYSNAME (f, j));
|
||||
break;
|
||||
}
|
||||
else
|
||||
type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), "", stream, 0);
|
||||
if (TYPE_FLAGS (TYPE_FN_FIELD_TYPE (f, j)) & TYPE_FLAG_STUB)
|
||||
{
|
||||
/* Build something we can demangle. */
|
||||
|
|
14
gdb/values.c
14
gdb/values.c
|
@ -50,7 +50,6 @@ struct value_history_chunk
|
|||
static struct value_history_chunk *value_history_chain;
|
||||
|
||||
static int value_history_count; /* Abs number of last entry stored */
|
||||
|
||||
|
||||
/* List of all value objects currently allocated
|
||||
(except for those released by calls to release_value)
|
||||
|
@ -930,7 +929,13 @@ value_headof (arg, btype, dtype)
|
|||
CORE_ADDR pc_for_sym;
|
||||
char *demangled_name;
|
||||
|
||||
vtbl = value_ind (value_field (value_ind (arg), TYPE_VPTR_FIELDNO (dtype)));
|
||||
btype = TYPE_VPTR_BASETYPE (dtype);
|
||||
check_stub_type (btype);
|
||||
if (btype != dtype)
|
||||
vtbl = value_cast (lookup_pointer_type (btype), arg);
|
||||
else
|
||||
vtbl = arg;
|
||||
vtbl = value_ind (value_field (value_ind (vtbl), TYPE_VPTR_FIELDNO (btype)));
|
||||
|
||||
/* Check that VTBL looks like it points to a virtual function table. */
|
||||
i = find_pc_misc_function (VALUE_ADDRESS (vtbl));
|
||||
|
@ -1021,7 +1026,6 @@ value_static_field (type, fieldname, fieldno)
|
|||
|
||||
if (fieldno < 0)
|
||||
{
|
||||
register struct type *t = type;
|
||||
/* Look for static field. */
|
||||
int i;
|
||||
for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--)
|
||||
|
@ -1084,7 +1088,7 @@ baseclass_addr (type, index, valaddr, valuep, errp)
|
|||
|
||||
if (errp)
|
||||
*errp = 0;
|
||||
|
||||
|
||||
if (BASETYPE_VIA_VIRTUAL (type, index))
|
||||
{
|
||||
/* Must hunt for the pointer to this virtual baseclass. */
|
||||
|
@ -1255,7 +1259,7 @@ check_stub_method (type, i, j)
|
|||
argtypes[argcount] = NULL; /* List terminator */
|
||||
|
||||
free (demangled_name);
|
||||
|
||||
|
||||
type = lookup_method_type (type, TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)), argtypes);
|
||||
/* Free the stub type...it's no longer needed. */
|
||||
free (TYPE_FN_FIELD_TYPE (f, j));
|
||||
|
|
Loading…
Reference in a new issue