1 /* Support for printing C++ values for GDB, the GNU debugger.
3 Copyright (C) 1986-2019 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 #include "gdb_obstack.h"
24 #include "expression.h"
34 #include "cp-support.h"
36 #include "extension.h"
37 #include "typeprint.h"
38 #include "gdbsupport/byte-vector.h"
41 static struct obstack dont_print_vb_obstack;
42 static struct obstack dont_print_statmem_obstack;
43 static struct obstack dont_print_stat_array_obstack;
45 static void cp_print_static_field (struct type *, struct value *,
46 struct ui_file *, int,
47 const struct value_print_options *);
49 static void cp_print_value (struct type *, struct type *,
51 CORE_ADDR, struct ui_file *,
53 const struct value_print_options *,
57 /* GCC versions after 2.4.5 use this. */
58 extern const char vtbl_ptr_name[] = "__vtbl_ptr_type";
60 /* Return truth value for assertion that TYPE is of the type
61 "pointer to virtual function". */
64 cp_is_vtbl_ptr_type (struct type *type)
66 const char *type_name = TYPE_NAME (type);
68 return (type_name != NULL && !strcmp (type_name, vtbl_ptr_name));
71 /* Return truth value for the assertion that TYPE is of the type
72 "pointer to virtual function table". */
75 cp_is_vtbl_member (struct type *type)
77 /* With older versions of g++, the vtbl field pointed to an array of
78 structures. Nowadays it points directly to the structure. */
79 if (TYPE_CODE (type) == TYPE_CODE_PTR)
81 type = TYPE_TARGET_TYPE (type);
82 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
84 type = TYPE_TARGET_TYPE (type);
85 if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
86 || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
88 /* Virtual functions tables are full of pointers
89 to virtual functions. */
90 return cp_is_vtbl_ptr_type (type);
93 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */
95 return cp_is_vtbl_ptr_type (type);
97 else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
99 /* The type name of the thunk pointer is NULL when using
100 dwarf2. We could test for a pointer to a function, but
101 there is no type info for the virtual table either, so it
103 return cp_is_vtbl_ptr_type (type);
109 /* Mutually recursive subroutines of cp_print_value and c_val_print to
110 print out a structure's fields: cp_print_value_fields and
113 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the same
114 meanings as in cp_print_value and c_val_print.
116 2nd argument REAL_TYPE is used to carry over the type of the
117 derived class across the recursion to base classes.
119 DONT_PRINT is an array of baseclass types that we should not print,
120 or zero if called from top level. */
123 cp_print_value_fields (struct type *type, struct type *real_type,
125 CORE_ADDR address, struct ui_file *stream,
126 int recurse, struct value *val,
127 const struct value_print_options *options,
128 struct type **dont_print_vb,
129 int dont_print_statmem)
131 int i, len, n_baseclasses;
133 static int last_set_recurse = -1;
135 type = check_typedef (type);
139 /* Any object can be left on obstacks only during an unexpected
142 if (obstack_object_size (&dont_print_statmem_obstack) > 0)
144 obstack_free (&dont_print_statmem_obstack, NULL);
145 obstack_begin (&dont_print_statmem_obstack,
146 32 * sizeof (CORE_ADDR));
148 if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
150 obstack_free (&dont_print_stat_array_obstack, NULL);
151 obstack_begin (&dont_print_stat_array_obstack,
152 32 * sizeof (struct type *));
156 fprintf_filtered (stream, "{");
157 len = TYPE_NFIELDS (type);
158 n_baseclasses = TYPE_N_BASECLASSES (type);
160 /* First, print out baseclasses such that we don't print
161 duplicates of virtual baseclasses. */
163 if (n_baseclasses > 0)
164 cp_print_value (type, real_type,
165 offset, address, stream,
166 recurse + 1, val, options,
169 /* Second, print out data fields */
171 /* If there are no data fields, skip this part */
172 if (len == n_baseclasses || !len)
173 fprintf_filtered (stream, "<No data fields>");
176 size_t statmem_obstack_initial_size = 0;
177 size_t stat_array_obstack_initial_size = 0;
178 struct type *vptr_basetype = NULL;
181 if (dont_print_statmem == 0)
183 statmem_obstack_initial_size =
184 obstack_object_size (&dont_print_statmem_obstack);
186 if (last_set_recurse != recurse)
188 stat_array_obstack_initial_size =
189 obstack_object_size (&dont_print_stat_array_obstack);
191 last_set_recurse = recurse;
195 vptr_fieldno = get_vptr_fieldno (type, &vptr_basetype);
196 for (i = n_baseclasses; i < len; i++)
198 const gdb_byte *valaddr = value_contents_for_printing (val);
200 /* If requested, skip printing of static fields. */
201 if (!options->static_field_print
202 && field_is_static (&TYPE_FIELD (type, i)))
207 fputs_filtered (",", stream);
208 if (!options->prettyformat)
209 fputs_filtered (" ", stream);
211 else if (n_baseclasses > 0)
213 if (options->prettyformat)
215 fprintf_filtered (stream, "\n");
216 print_spaces_filtered (2 + 2 * recurse, stream);
217 fputs_filtered ("members of ", stream);
218 fputs_filtered (TYPE_NAME (type), stream);
219 fputs_filtered (":", stream);
224 if (options->prettyformat)
226 fprintf_filtered (stream, "\n");
227 print_spaces_filtered (2 + 2 * recurse, stream);
231 wrap_here (n_spaces (2 + 2 * recurse));
234 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
236 if (field_is_static (&TYPE_FIELD (type, i)))
237 fputs_filtered ("static ", stream);
238 fprintf_symbol_filtered (stream,
239 TYPE_FIELD_NAME (type, i),
240 current_language->la_language,
241 DMGL_PARAMS | DMGL_ANSI);
242 annotate_field_name_end ();
244 /* We tweak various options in a few cases below. */
245 value_print_options options_copy = *options;
246 value_print_options *opts = &options_copy;
248 /* Do not print leading '=' in case of anonymous
250 if (strcmp (TYPE_FIELD_NAME (type, i), ""))
251 fputs_filtered (" = ", stream);
254 /* If this is an anonymous field then we want to consider it
255 as though it is at its parent's depth when it comes to the
257 if (opts->max_depth != -1 && opts->max_depth < INT_MAX)
260 annotate_field_value ();
262 if (!field_is_static (&TYPE_FIELD (type, i))
263 && TYPE_FIELD_PACKED (type, i))
267 /* Bitfields require special handling, especially due to
268 byte order problems. */
269 if (TYPE_FIELD_IGNORE (type, i))
271 fputs_filtered ("<optimized out or zero length>", stream);
273 else if (value_bits_synthetic_pointer (val,
274 TYPE_FIELD_BITPOS (type,
276 TYPE_FIELD_BITSIZE (type,
279 fputs_filtered (_("<synthetic pointer>"), stream);
285 v = value_field_bitfield (type, i, valaddr, offset, val);
287 common_val_print (v, stream, recurse + 1,
288 opts, current_language);
293 if (TYPE_FIELD_IGNORE (type, i))
295 fputs_filtered ("<optimized out or zero length>",
298 else if (field_is_static (&TYPE_FIELD (type, i)))
302 struct value *v = value_static_field (type, i);
304 cp_print_static_field (TYPE_FIELD_TYPE (type, i),
305 v, stream, recurse + 1,
308 catch (const gdb_exception_error &ex)
310 fprintf_filtered (stream,
311 _("<error reading variable: %s>"),
315 else if (i == vptr_fieldno && type == vptr_basetype)
317 int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
318 struct type *i_type = TYPE_FIELD_TYPE (type, i);
320 if (valprint_check_validity (stream, i_type, i_offset, val))
324 addr = extract_typed_address (valaddr + i_offset, i_type);
325 print_function_pointer_address (opts,
326 get_type_arch (type),
333 val_print (TYPE_FIELD_TYPE (type, i),
334 offset + TYPE_FIELD_BITPOS (type, i) / 8,
336 stream, recurse + 1, val, opts,
340 annotate_field_end ();
343 if (dont_print_statmem == 0)
345 size_t obstack_final_size =
346 obstack_object_size (&dont_print_statmem_obstack);
348 if (obstack_final_size > statmem_obstack_initial_size)
350 /* In effect, a pop of the printed-statics stack. */
352 = statmem_obstack_initial_size - obstack_final_size;
353 obstack_blank_fast (&dont_print_statmem_obstack, shrink_bytes);
356 if (last_set_recurse != recurse)
359 obstack_object_size (&dont_print_stat_array_obstack);
361 if (obstack_final_size > stat_array_obstack_initial_size)
364 (char *) obstack_next_free (&dont_print_stat_array_obstack)
365 - (obstack_final_size
366 - stat_array_obstack_initial_size);
368 obstack_free (&dont_print_stat_array_obstack,
371 last_set_recurse = -1;
375 if (options->prettyformat)
377 fprintf_filtered (stream, "\n");
378 print_spaces_filtered (2 * recurse, stream);
380 } /* if there are data fields */
382 fprintf_filtered (stream, "}");
385 /* Like cp_print_value_fields, but find the runtime type of the object
386 and pass it as the `real_type' argument to cp_print_value_fields.
387 This function is a hack to work around the fact that
388 common_val_print passes the embedded offset to val_print, but not
389 the enclosing type. */
392 cp_print_value_fields_rtti (struct type *type,
393 const gdb_byte *valaddr, LONGEST offset,
395 struct ui_file *stream, int recurse,
397 const struct value_print_options *options,
398 struct type **dont_print_vb,
399 int dont_print_statmem)
401 struct type *real_type = NULL;
403 /* We require all bits to be valid in order to attempt a
405 if (!value_bits_any_optimized_out (val,
406 TARGET_CHAR_BIT * offset,
407 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
413 /* Ugh, we have to convert back to a value here. */
414 value = value_from_contents_and_address (type, valaddr + offset,
416 type = value_type (value);
417 /* We don't actually care about most of the result here -- just
418 the type. We already have the correct offset, due to how
419 val_print was initially called. */
420 real_type = value_rtti_type (value, &full, &top, &using_enc);
426 cp_print_value_fields (type, real_type, offset,
427 address, stream, recurse, val, options,
428 dont_print_vb, dont_print_statmem);
431 /* Special val_print routine to avoid printing multiple copies of
432 virtual baseclasses. */
435 cp_print_value (struct type *type, struct type *real_type,
437 CORE_ADDR address, struct ui_file *stream,
438 int recurse, struct value *val,
439 const struct value_print_options *options,
440 struct type **dont_print_vb)
442 struct type **last_dont_print
443 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
444 struct obstack tmp_obstack = dont_print_vb_obstack;
445 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
447 struct type *thistype;
448 const gdb_byte *valaddr = value_contents_for_printing (val);
450 if (dont_print_vb == 0)
452 /* If we're at top level, carve out a completely fresh chunk of
453 the obstack and use that until this particular invocation
455 /* Bump up the high-water mark. Now alpha is omega. */
456 obstack_finish (&dont_print_vb_obstack);
459 for (i = 0; i < n_baseclasses; i++)
463 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
464 const char *basename = TYPE_NAME (baseclass);
465 struct value *base_val = NULL;
467 if (BASETYPE_VIA_VIRTUAL (type, i))
469 struct type **first_dont_print
470 = (struct type **) obstack_base (&dont_print_vb_obstack);
472 int j = (struct type **)
473 obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
476 if (baseclass == first_dont_print[j])
479 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
483 thistype = real_type;
487 boffset = baseclass_offset (type, i, valaddr, offset, address, val);
489 catch (const gdb_exception_error &ex)
491 if (ex.error == NOT_AVAILABLE_ERROR)
499 if (BASETYPE_VIA_VIRTUAL (type, i))
501 /* The virtual base class pointer might have been
502 clobbered by the user program. Make sure that it
503 still points to a valid memory location. */
505 if ((boffset + offset) < 0
506 || (boffset + offset) >= TYPE_LENGTH (real_type))
508 gdb::byte_vector buf (TYPE_LENGTH (baseclass));
510 if (target_read_memory (address + boffset, buf.data (),
511 TYPE_LENGTH (baseclass)) != 0)
513 base_val = value_from_contents_and_address (baseclass,
516 baseclass = value_type (base_val);
519 thistype = baseclass;
532 /* Now do the printing. */
533 if (options->prettyformat)
535 fprintf_filtered (stream, "\n");
536 print_spaces_filtered (2 * recurse, stream);
538 fputs_filtered ("<", stream);
539 /* Not sure what the best notation is in the case where there is
540 no baseclass name. */
541 fputs_filtered (basename ? basename : "", stream);
542 fputs_filtered ("> = ", stream);
545 val_print_unavailable (stream);
547 val_print_invalid_address (stream);
552 if (options->max_depth > -1
553 && recurse >= options->max_depth)
555 const struct language_defn *language = current_language;
556 gdb_assert (language->la_struct_too_deep_ellipsis != NULL);
557 fputs_filtered (language->la_struct_too_deep_ellipsis, stream);
561 /* Attempt to run an extension language pretty-printer on the
562 baseclass if possible. */
565 = apply_ext_lang_val_pretty_printer (baseclass,
566 thisoffset + boffset,
567 value_address (base_val),
573 cp_print_value_fields (baseclass, thistype,
574 thisoffset + boffset,
575 value_address (base_val),
576 stream, recurse, base_val, options,
578 obstack_base (&dont_print_vb_obstack)),
582 fputs_filtered (", ", stream);
588 if (dont_print_vb == 0)
590 /* Free the space used to deal with the printing
591 of this type from top level. */
592 obstack_free (&dont_print_vb_obstack, last_dont_print);
593 /* Reset watermark so that we can continue protecting
594 ourselves from whatever we were protecting ourselves. */
595 dont_print_vb_obstack = tmp_obstack;
599 /* Print value of a static member. To avoid infinite recursion when
600 printing a class that contains a static instance of the class, we
601 keep the addresses of all printed static member classes in an
602 obstack and refuse to print them more than once.
604 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
605 have the same meanings as in c_val_print. */
608 cp_print_static_field (struct type *type,
610 struct ui_file *stream,
612 const struct value_print_options *options)
614 struct value_print_options opts;
616 if (value_entirely_optimized_out (val))
618 val_print_optimized_out (val, stream);
622 struct type *real_type = check_typedef (type);
623 if (TYPE_CODE (real_type) == TYPE_CODE_STRUCT)
625 CORE_ADDR *first_dont_print;
630 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
631 i = obstack_object_size (&dont_print_statmem_obstack)
632 / sizeof (CORE_ADDR);
636 if (value_address (val) == first_dont_print[i])
638 fputs_filtered ("<same as static member of an already"
645 addr = value_address (val);
646 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
648 cp_print_value_fields (type, value_enclosing_type (val),
649 value_embedded_offset (val), addr,
650 stream, recurse, val,
655 if (TYPE_CODE (real_type) == TYPE_CODE_ARRAY)
657 struct type **first_dont_print;
659 struct type *target_type = TYPE_TARGET_TYPE (type);
662 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
663 i = obstack_object_size (&dont_print_stat_array_obstack)
664 / sizeof (struct type *);
668 if (target_type == first_dont_print[i])
670 fputs_filtered ("<same as static member of an already"
677 obstack_grow (&dont_print_stat_array_obstack,
678 (char *) &target_type,
679 sizeof (struct type *));
685 value_embedded_offset (val),
687 stream, recurse, val,
688 &opts, current_language);
691 /* Find the field in *SELF, or its non-virtual base classes, with
692 bit offset OFFSET. Set *SELF to the containing type and *FIELDNO
693 to the containing field number. If OFFSET is not exactly at the
694 start of some field, set *SELF to NULL. */
697 cp_find_class_member (struct type **self_p, int *fieldno,
704 *self_p = check_typedef (*self_p);
706 len = TYPE_NFIELDS (self);
708 for (i = TYPE_N_BASECLASSES (self); i < len; i++)
710 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
713 if (offset == bitpos)
720 for (i = 0; i < TYPE_N_BASECLASSES (self); i++)
722 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
723 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i));
725 if (offset >= bitpos && offset < bitpos + bitsize)
727 *self_p = TYPE_FIELD_TYPE (self, i);
728 cp_find_class_member (self_p, fieldno, offset - bitpos);
737 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
738 struct ui_file *stream, const char *prefix)
740 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
742 /* VAL is a byte offset into the structure type SELF_TYPE.
743 Find the name of the field for that offset and
745 struct type *self_type = TYPE_SELF_TYPE (type);
749 val = extract_signed_integer (valaddr,
753 /* Pointers to data members are usually byte offsets into an object.
754 Because a data member can have offset zero, and a NULL pointer to
755 member must be distinct from any valid non-NULL pointer to
756 member, either the value is biased or the NULL value has a
757 special representation; both are permitted by ISO C++. HP aCC
758 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
759 and other compilers which use the Itanium ABI use -1 as the NULL
760 value. GDB only supports that last form; to add support for
761 another form, make this into a cp-abi hook. */
765 fprintf_filtered (stream, "NULL");
769 cp_find_class_member (&self_type, &fieldno, val << 3);
771 if (self_type != NULL)
775 fputs_filtered (prefix, stream);
776 name = TYPE_NAME (self_type);
778 fputs_filtered (name, stream);
780 c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
781 fprintf_filtered (stream, "::");
782 fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream);
785 fprintf_filtered (stream, "%ld", (long) val);
790 _initialize_cp_valprint (void)
792 obstack_begin (&dont_print_stat_array_obstack,
793 32 * sizeof (struct type *));
794 obstack_begin (&dont_print_statmem_obstack,
795 32 * sizeof (CORE_ADDR));
796 obstack_begin (&dont_print_vb_obstack,
797 32 * sizeof (struct type *));