diff options
Diffstat (limited to 'gdb/cp-valprint.c')
-rw-r--r-- | gdb/cp-valprint.c | 125 |
1 files changed, 79 insertions, 46 deletions
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index eddeb9c..6b01e0c 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -64,7 +64,9 @@ static void cp_print_hpacc_virtual_table_entries (struct type *, int *, void -cp_print_class_method (char *valaddr, struct type *type, struct ui_file *stream) +cp_print_class_method (char *valaddr, + struct type *type, + struct ui_file *stream) { struct type *domain; struct fn_field *f = NULL; @@ -138,7 +140,7 @@ cp_print_class_method (char *valaddr, struct type *type, struct ui_file *stream) } } } -common: + common: if (i < len) { char *demangled_name; @@ -166,16 +168,17 @@ common: /* This was what it was for gcc 2.4.5 and earlier. */ static const char vtbl_ptr_name_old[] = -{CPLUS_MARKER, 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0}; +{ + CPLUS_MARKER, 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', + 't', 'y', 'p', 'e', 0 +}; + /* It was changed to this after 2.4.5. */ -const char vtbl_ptr_name[] = -{'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0}; +const char vtbl_ptr_name[] = "__vtbl_ptr_type"; /* HP aCC uses different names */ -const char hpacc_vtbl_ptr_name[] = -{'_', '_', 'v', 'f', 'p', 0}; -const char hpacc_vtbl_ptr_type_name[] = -{'_', '_', 'v', 'f', 't', 'y', 'p', 0}; +const char hpacc_vtbl_ptr_name[] = "__vfp"; +const char hpacc_vtbl_ptr_type_name[] = "__vftyp"; /* Return truth value for assertion that TYPE is of the type @@ -255,11 +258,12 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, /* If there are no data fields, or if the only field is the * vtbl pointer, skip this part */ - if ((len == n_baseclasses) || - ((len - n_baseclasses == 1) && - TYPE_HAS_VTABLE (type) && - STREQN (TYPE_FIELD_NAME (type, n_baseclasses), hpacc_vtbl_ptr_name, 5)) || - !len) + if ((len == n_baseclasses) + || ((len - n_baseclasses == 1) + && TYPE_HAS_VTABLE (type) + && STREQN (TYPE_FIELD_NAME (type, n_baseclasses), + hpacc_vtbl_ptr_name, 5)) + || !len) fprintf_filtered (stream, "<No data fields>"); else { @@ -281,7 +285,8 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, continue; /* If a vtable pointer appears, we'll print it out later */ - if (TYPE_HAS_VTABLE (type) && STREQN (TYPE_FIELD_NAME (type, i), hpacc_vtbl_ptr_name, 5)) + if (TYPE_HAS_VTABLE (type) + && STREQN (TYPE_FIELD_NAME (type, i), hpacc_vtbl_ptr_name, 5)) continue; if (fields_seen) @@ -353,11 +358,12 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, } else { - v = value_from_longest (TYPE_FIELD_TYPE (type, i), - unpack_field_as_long (type, valaddr + offset, i)); + v = value_from_longest + (TYPE_FIELD_TYPE (type, i), + unpack_field_as_long (type, valaddr + offset, i)); - val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0, 0, - stream, format, 0, recurse + 1, pretty); + val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), + 0, 0, stream, format, 0, recurse + 1, pretty); } } else @@ -379,7 +385,7 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, else { val_print (TYPE_FIELD_TYPE (type, i), - valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8, + valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8, address + TYPE_FIELD_BITPOS (type, i) / 8, stream, format, 0, recurse + 1, pretty); } @@ -402,7 +408,10 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, } } /* if there are data fields */ /* Now print out the virtual table pointer if there is one */ - if (TYPE_HAS_VTABLE (type) && STREQN (TYPE_FIELD_NAME (type, n_baseclasses), hpacc_vtbl_ptr_name, 5)) + if (TYPE_HAS_VTABLE (type) + && STREQN (TYPE_FIELD_NAME (type, n_baseclasses), + hpacc_vtbl_ptr_name, + 5)) { value_ptr v; /* First get the virtual table pointer and print it out */ @@ -436,7 +445,8 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, if (1) { - /* no RRBC support; function pointers embedded directly in vtable */ + /* no RRBC support; function pointers embedded directly + in vtable */ int vfuncs = count_virtual_fns (real_type); @@ -444,7 +454,8 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, /* FIXME : doesn't work at present */ #if 0 - fprintf_filtered (stream, "%d entr%s: ", vfuncs, vfuncs == 1 ? "y" : "ies"); + fprintf_filtered (stream, "%d entr%s: ", vfuncs, + vfuncs == 1 ? "y" : "ies"); #else fputs_filtered ("not implemented", stream); @@ -453,7 +464,9 @@ cp_print_value_fields (struct type *type, struct type *real_type, char *valaddr, /* recursive function that prints all virtual function entries */ #if 0 - cp_print_hpacc_virtual_table_entries (real_type, &vfuncs, v, stream, format, recurse, pretty); + cp_print_hpacc_virtual_table_entries (real_type, &vfuncs, v, + stream, format, recurse, + pretty); #endif fputs_filtered ("}", stream); } /* non-RRBC case */ @@ -489,7 +502,7 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr, { struct obstack tmp_obstack; struct type **last_dont_print - = (struct type **) obstack_next_free (&dont_print_vb_obstack); + = (struct type **) obstack_next_free (&dont_print_vb_obstack); int i, n_baseclasses = TYPE_N_BASECLASSES (type); if (dont_print_vb == 0) @@ -513,10 +526,10 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr, if (BASETYPE_VIA_VIRTUAL (type, i)) { struct type **first_dont_print - = (struct type **) obstack_base (&dont_print_vb_obstack); + = (struct type **) obstack_base (&dont_print_vb_obstack); int j = (struct type **) obstack_next_free (&dont_print_vb_obstack) - - first_dont_print; + - first_dont_print; while (--j >= 0) if (baseclass == first_dont_print[j]) @@ -531,21 +544,26 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr, find_rt_vbase_offset (type, TYPE_BASECLASS (type, i), valaddr, offset, &boffset, &skip); if (skip >= 0) - error ("Virtual base class offset not found from vtable while printing"); + error ("Virtual base class offset not found from vtable while" + " printing"); base_valaddr = valaddr; } else { - boffset = baseclass_offset (type, i, valaddr + offset, address + offset); + boffset = baseclass_offset (type, i, + valaddr + offset, + address + offset); skip = ((boffset == -1) || (boffset + offset) < 0) ? 1 : -1; if (BASETYPE_VIA_VIRTUAL (type, i)) { - /* The virtual base class pointer might have been clobbered by the - user program. Make sure that it still points to a valid memory - location. */ + /* The virtual base class pointer might have been + clobbered by the user program. Make sure that it + still points to a valid memory location. */ - if (boffset != -1 && ((boffset + offset) < 0 || (boffset + offset) >= TYPE_LENGTH (type))) + if (boffset != -1 + && ((boffset + offset) < 0 + || (boffset + offset) >= TYPE_LENGTH (type))) { base_valaddr = (char *) alloca (TYPE_LENGTH (baseclass)); if (target_read_memory (address + boffset, base_valaddr, @@ -575,9 +593,11 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr, if (skip >= 1) fprintf_filtered (stream, "<invalid address>"); else - cp_print_value_fields (baseclass, real_type, base_valaddr, offset + boffset, address, - stream, format, recurse, pretty, - (struct type **) obstack_base (&dont_print_vb_obstack), + cp_print_value_fields (baseclass, real_type, base_valaddr, + offset + boffset, address, stream, format, + recurse, pretty, + ((struct type **) + obstack_base (&dont_print_vb_obstack)), 0); fputs_filtered (", ", stream); @@ -606,8 +626,12 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr, have the same meanings as in c_val_print. */ static void -cp_print_static_field (struct type *type, value_ptr val, struct ui_file *stream, - int format, int recurse, enum val_prettyprint pretty) +cp_print_static_field (struct type *type, + value_ptr val, + struct ui_file *stream, + int format, + int recurse, + enum val_prettyprint pretty) { if (TYPE_CODE (type) == TYPE_CODE_STRUCT) { @@ -623,7 +647,8 @@ cp_print_static_field (struct type *type, value_ptr val, struct ui_file *stream, { if (VALUE_ADDRESS (val) == first_dont_print[i]) { - fputs_filtered ("<same as static member of an already seen type>", + fputs_filtered ("<same as static member of an already" + " seen type>", stream); return; } @@ -633,11 +658,13 @@ cp_print_static_field (struct type *type, value_ptr val, struct ui_file *stream, sizeof (CORE_ADDR)); CHECK_TYPEDEF (type); - cp_print_value_fields (type, type, VALUE_CONTENTS_ALL (val), VALUE_EMBEDDED_OFFSET (val), VALUE_ADDRESS (val), + cp_print_value_fields (type, type, VALUE_CONTENTS_ALL (val), + VALUE_EMBEDDED_OFFSET (val), VALUE_ADDRESS (val), stream, format, recurse, pretty, NULL, 1); return; } - val_print (type, VALUE_CONTENTS_ALL (val), VALUE_EMBEDDED_OFFSET (val), VALUE_ADDRESS (val), + val_print (type, VALUE_CONTENTS_ALL (val), + VALUE_EMBEDDED_OFFSET (val), VALUE_ADDRESS (val), stream, format, 0, recurse, pretty); } @@ -731,7 +758,8 @@ cp_print_hpacc_virtual_table_entries (struct type *type, int *vfuncs, /* Recursion on other classes that can share the same vtable */ struct type *pbc = primary_base_class (type); if (pbc) - cp_print_hpacc_virtual_table_entries (pbc, vfuncs, v, stream, format, recurse, pretty); + cp_print_hpacc_virtual_table_entries (pbc, vfuncs, v, stream, format, + recurse, pretty); /* Now deal with vfuncs declared in this class */ for (fn = 0; fn < TYPE_NFN_FIELDS (type); fn++) @@ -739,23 +767,28 @@ cp_print_hpacc_virtual_table_entries (struct type *type, int *vfuncs, if (TYPE_FN_FIELD_VIRTUAL_P (TYPE_FN_FIELDLIST1 (type, fn), oi)) { char *vf_name; + const char *field_physname; /* virtual function offset */ - int vx = TYPE_FN_FIELD_VOFFSET (TYPE_FN_FIELDLIST1 (type, fn), oi) - 1; + int vx = (TYPE_FN_FIELD_VOFFSET (TYPE_FN_FIELDLIST1 (type, fn), oi) + - 1); /* Get the address of the vfunction entry */ value_ptr vf = value_copy (v); if (VALUE_LAZY (vf)) (void) value_fetch_lazy (vf); - vf->aligner.contents[0] += 4 * (HP_ACC_VFUNC_START + vx); /* adjust by offset */ + /* adjust by offset */ + vf->aligner.contents[0] += 4 * (HP_ACC_VFUNC_START + vx); vf = value_ind (vf); /* get the entry */ VALUE_TYPE (vf) = VALUE_TYPE (v); /* make it a pointer */ /* print out the entry */ val_print (VALUE_TYPE (vf), VALUE_CONTENTS (vf), 0, 0, stream, format, 0, recurse + 1, pretty); - vf_name = cplus_demangle (TYPE_FN_FIELD_PHYSNAME (TYPE_FN_FIELDLIST1 (type, fn), oi), - DMGL_ARM); /* pai: (temp) FIXME Maybe this should be DMGL_ANSI */ + field_physname + = TYPE_FN_FIELD_PHYSNAME (TYPE_FN_FIELDLIST1 (type, fn), oi); + /* pai: (temp) FIXME Maybe this should be DMGL_ANSI */ + vf_name = cplus_demangle (field_physname, DMGL_ARM); fprintf_filtered (stream, " %s", vf_name); if (--(*vfuncs) > 0) fputs_filtered (", ", stream); |