1 /* Support for printing C++ values for GDB, the GNU debugger.
3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010
5 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #include "gdb_obstack.h"
26 #include "expression.h"
32 #include "gdb_string.h"
37 #include "cp-support.h"
39 #include "python/python.h"
41 /* Controls printing of vtbl's */
43 show_vtblprint (struct ui_file *file, int from_tty,
44 struct cmd_list_element *c, const char *value)
46 fprintf_filtered (file, _("\
47 Printing of C++ virtual function tables is %s.\n"),
51 /* Controls looking up an object's derived type using what we find in
54 show_objectprint (struct ui_file *file, int from_tty,
55 struct cmd_list_element *c,
58 fprintf_filtered (file, _("\
59 Printing of object's derived type based on vtable info is %s.\n"),
64 show_static_field_print (struct ui_file *file, int from_tty,
65 struct cmd_list_element *c, const char *value)
67 fprintf_filtered (file, _("Printing of C++ static members is %s.\n"),
72 static struct obstack dont_print_vb_obstack;
73 static struct obstack dont_print_statmem_obstack;
74 static struct obstack dont_print_stat_array_obstack;
76 extern void _initialize_cp_valprint (void);
78 static void cp_print_static_field (struct type *, struct value *,
79 struct ui_file *, int,
80 const struct value_print_options *);
82 static void cp_print_value (struct type *, struct type *, const gdb_byte *,
83 int, CORE_ADDR, struct ui_file *, int,
84 const struct value_print_options *, struct type **);
87 /* GCC versions after 2.4.5 use this. */
88 const char vtbl_ptr_name[] = "__vtbl_ptr_type";
90 /* Return truth value for assertion that TYPE is of the type
91 "pointer to virtual function". */
94 cp_is_vtbl_ptr_type (struct type *type)
96 char *typename = type_name_no_tag (type);
98 return (typename != NULL && !strcmp (typename, vtbl_ptr_name));
101 /* Return truth value for the assertion that TYPE is of the type
102 "pointer to virtual function table". */
105 cp_is_vtbl_member (struct type *type)
107 /* With older versions of g++, the vtbl field pointed to an array
108 of structures. Nowadays it points directly to the structure. */
109 if (TYPE_CODE (type) == TYPE_CODE_PTR)
111 type = TYPE_TARGET_TYPE (type);
112 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
114 type = TYPE_TARGET_TYPE (type);
115 if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
116 || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
118 /* Virtual functions tables are full of pointers
119 to virtual functions. */
120 return cp_is_vtbl_ptr_type (type);
123 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */
125 return cp_is_vtbl_ptr_type (type);
127 else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
129 /* The type name of the thunk pointer is NULL when using dwarf2.
130 We could test for a pointer to a function, but there is
131 no type info for the virtual table either, so it wont help. */
132 return cp_is_vtbl_ptr_type (type);
138 /* Mutually recursive subroutines of cp_print_value and c_val_print to
139 print out a structure's fields: cp_print_value_fields and cp_print_value.
141 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
142 same meanings as in cp_print_value and c_val_print.
144 2nd argument REAL_TYPE is used to carry over the type of the derived
145 class across the recursion to base classes.
147 DONT_PRINT is an array of baseclass types that we
148 should not print, or zero if called from top level. */
151 cp_print_value_fields (struct type *type, struct type *real_type,
152 const gdb_byte *valaddr, int offset, CORE_ADDR address,
153 struct ui_file *stream, int recurse,
154 const struct value_print_options *options,
155 struct type **dont_print_vb, int dont_print_statmem)
157 int i, len, n_baseclasses;
159 static int last_set_recurse = -1;
161 CHECK_TYPEDEF (type);
165 if (obstack_object_size (&dont_print_statmem_obstack) > 0)
166 obstack_free (&dont_print_statmem_obstack, NULL);
167 if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
168 obstack_free (&dont_print_stat_array_obstack, NULL);
171 fprintf_filtered (stream, "{");
172 len = TYPE_NFIELDS (type);
173 n_baseclasses = TYPE_N_BASECLASSES (type);
175 /* First, print out baseclasses such that we don't print
176 duplicates of virtual baseclasses. */
178 if (n_baseclasses > 0)
179 cp_print_value (type, real_type, valaddr, offset, address, stream,
180 recurse + 1, options, dont_print_vb);
182 /* Second, print out data fields */
184 /* If there are no data fields, skip this part */
185 if (len == n_baseclasses || !len)
186 fprintf_filtered (stream, "<No data fields>");
189 int statmem_obstack_initial_size = 0;
190 int stat_array_obstack_initial_size = 0;
192 if (dont_print_statmem == 0)
194 statmem_obstack_initial_size =
195 obstack_object_size (&dont_print_statmem_obstack);
197 if (last_set_recurse != recurse)
199 stat_array_obstack_initial_size =
200 obstack_object_size (&dont_print_stat_array_obstack);
202 last_set_recurse = recurse;
206 for (i = n_baseclasses; i < len; i++)
208 /* If requested, skip printing of static fields. */
209 if (!options->static_field_print
210 && field_is_static (&TYPE_FIELD (type, i)))
214 fprintf_filtered (stream, ", ");
215 else if (n_baseclasses > 0)
219 fprintf_filtered (stream, "\n");
220 print_spaces_filtered (2 + 2 * recurse, stream);
221 fputs_filtered ("members of ", stream);
222 fputs_filtered (type_name_no_tag (type), stream);
223 fputs_filtered (": ", stream);
230 fprintf_filtered (stream, "\n");
231 print_spaces_filtered (2 + 2 * recurse, stream);
235 wrap_here (n_spaces (2 + 2 * recurse));
237 if (options->inspect_it)
239 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
240 fputs_filtered ("\"( ptr \"", stream);
242 fputs_filtered ("\"( nodef \"", stream);
243 if (field_is_static (&TYPE_FIELD (type, i)))
244 fputs_filtered ("static ", stream);
245 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
246 current_language->la_language,
247 DMGL_PARAMS | DMGL_ANSI);
248 fputs_filtered ("\" \"", stream);
249 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
250 current_language->la_language,
251 DMGL_PARAMS | DMGL_ANSI);
252 fputs_filtered ("\") \"", stream);
256 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
258 if (field_is_static (&TYPE_FIELD (type, i)))
259 fputs_filtered ("static ", stream);
260 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
261 current_language->la_language,
262 DMGL_PARAMS | DMGL_ANSI);
263 annotate_field_name_end ();
264 /* do not print leading '=' in case of anonymous unions */
265 if (strcmp (TYPE_FIELD_NAME (type, i), ""))
266 fputs_filtered (" = ", stream);
267 annotate_field_value ();
270 if (!field_is_static (&TYPE_FIELD (type, i))
271 && TYPE_FIELD_PACKED (type, i))
275 /* Bitfields require special handling, especially due to byte
277 if (TYPE_FIELD_IGNORE (type, i))
279 fputs_filtered ("<optimized out or zero length>", stream);
283 struct value_print_options opts = *options;
286 v = value_from_longest
287 (TYPE_FIELD_TYPE (type, i),
288 unpack_field_as_long (type, valaddr + offset, i));
290 common_val_print (v, stream, recurse + 1, &opts,
296 if (TYPE_FIELD_IGNORE (type, i))
298 fputs_filtered ("<optimized out or zero length>", stream);
300 else if (field_is_static (&TYPE_FIELD (type, i)))
302 struct value *v = value_static_field (type, i);
305 fputs_filtered ("<optimized out>", stream);
307 cp_print_static_field (TYPE_FIELD_TYPE (type, i), v,
308 stream, recurse + 1, options);
312 struct value_print_options opts = *options;
315 val_print (TYPE_FIELD_TYPE (type, i),
316 valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8,
318 stream, recurse + 1, &opts,
322 annotate_field_end ();
325 if (dont_print_statmem == 0)
327 int obstack_final_size =
328 obstack_object_size (&dont_print_statmem_obstack);
330 if (obstack_final_size > statmem_obstack_initial_size) {
331 /* In effect, a pop of the printed-statics stack. */
334 obstack_next_free (&dont_print_statmem_obstack) -
335 (obstack_final_size - statmem_obstack_initial_size);
337 obstack_free (&dont_print_statmem_obstack,
341 if (last_set_recurse != recurse)
343 int obstack_final_size =
344 obstack_object_size (&dont_print_stat_array_obstack);
346 if (obstack_final_size > stat_array_obstack_initial_size)
349 obstack_next_free (&dont_print_stat_array_obstack) -
350 (obstack_final_size - stat_array_obstack_initial_size);
352 obstack_free (&dont_print_stat_array_obstack,
355 last_set_recurse = -1;
361 fprintf_filtered (stream, "\n");
362 print_spaces_filtered (2 * recurse, stream);
364 } /* if there are data fields */
366 fprintf_filtered (stream, "}");
369 /* Like cp_print_value_fields, but find the runtime type of the object
370 and pass it as the `real_type' argument to cp_print_value_fields.
371 This function is a hack to work around the fact that
372 common_val_print passes the embedded offset to val_print, but not
373 the enclosing type. */
376 cp_print_value_fields_rtti (struct type *type,
377 const gdb_byte *valaddr, int offset,
379 struct ui_file *stream, int recurse,
380 const struct value_print_options *options,
381 struct type **dont_print_vb,
382 int dont_print_statmem)
385 int full, top, using_enc;
386 struct type *real_type;
388 /* Ugh, we have to convert back to a value here. */
389 value = value_from_contents_and_address (type, valaddr + offset,
391 /* We don't actually care about most of the result here -- just the
392 type. We already have the correct offset, due to how val_print
393 was initially called. */
394 real_type = value_rtti_type (value, &full, &top, &using_enc);
398 cp_print_value_fields (type, real_type, valaddr, offset,
399 address, stream, recurse, options,
400 dont_print_vb, dont_print_statmem);
403 /* Special val_print routine to avoid printing multiple copies of virtual
407 cp_print_value (struct type *type, struct type *real_type,
408 const gdb_byte *valaddr, int offset, CORE_ADDR address,
409 struct ui_file *stream, int recurse,
410 const struct value_print_options *options,
411 struct type **dont_print_vb)
413 struct type **last_dont_print
414 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
415 struct obstack tmp_obstack = dont_print_vb_obstack;
416 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
418 struct type *thistype;
420 if (dont_print_vb == 0)
422 /* If we're at top level, carve out a completely fresh
423 chunk of the obstack and use that until this particular
424 invocation returns. */
425 /* Bump up the high-water mark. Now alpha is omega. */
426 obstack_finish (&dont_print_vb_obstack);
429 for (i = 0; i < n_baseclasses; i++)
433 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
434 char *basename = TYPE_NAME (baseclass);
435 const gdb_byte *base_valaddr;
437 if (BASETYPE_VIA_VIRTUAL (type, i))
439 struct type **first_dont_print
440 = (struct type **) obstack_base (&dont_print_vb_obstack);
442 int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
446 if (baseclass == first_dont_print[j])
449 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
453 thistype = real_type;
455 boffset = baseclass_offset (type, i, valaddr + offset, address + offset);
456 skip = ((boffset == -1) || (boffset + offset) < 0) ? 1 : -1;
458 if (BASETYPE_VIA_VIRTUAL (type, i))
460 /* The virtual base class pointer might have been
461 clobbered by the user program. Make sure that it
462 still points to a valid memory location. */
465 && ((boffset + offset) < 0
466 || (boffset + offset) >= TYPE_LENGTH (real_type)))
468 /* FIXME (alloca): unsafe if baseclass is really really large. */
469 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
472 if (target_read_memory (address + boffset, buf,
473 TYPE_LENGTH (baseclass)) != 0)
475 address = address + boffset;
478 thistype = baseclass;
481 base_valaddr = valaddr;
484 base_valaddr = valaddr;
486 /* now do the printing */
489 fprintf_filtered (stream, "\n");
490 print_spaces_filtered (2 * recurse, stream);
492 fputs_filtered ("<", stream);
493 /* Not sure what the best notation is in the case where there is no
495 fputs_filtered (basename ? basename : "", stream);
496 fputs_filtered ("> = ", stream);
500 fprintf_filtered (stream, "<invalid address>");
505 /* Attempt to run the Python pretty-printers on the
506 baseclass if possible. */
508 result = apply_val_pretty_printer (baseclass, base_valaddr,
509 thisoffset + boffset,
516 cp_print_value_fields (baseclass, thistype, base_valaddr,
517 thisoffset + boffset, address,
518 stream, recurse, options,
520 obstack_base (&dont_print_vb_obstack)),
523 fputs_filtered (", ", stream);
529 if (dont_print_vb == 0)
531 /* Free the space used to deal with the printing
532 of this type from top level. */
533 obstack_free (&dont_print_vb_obstack, last_dont_print);
534 /* Reset watermark so that we can continue protecting
535 ourselves from whatever we were protecting ourselves. */
536 dont_print_vb_obstack = tmp_obstack;
540 /* Print value of a static member.
541 To avoid infinite recursion when printing a class that contains
542 a static instance of the class, we keep the addresses of all printed
543 static member classes in an obstack and refuse to print them more
546 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
547 have the same meanings as in c_val_print. */
550 cp_print_static_field (struct type *type,
552 struct ui_file *stream,
554 const struct value_print_options *options)
556 struct value_print_options opts;
558 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
560 CORE_ADDR *first_dont_print;
565 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
566 i = obstack_object_size (&dont_print_statmem_obstack)
567 / sizeof (CORE_ADDR);
571 if (value_address (val) == first_dont_print[i])
573 fputs_filtered ("<same as static member of an already"
580 addr = value_address (val);
581 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
583 CHECK_TYPEDEF (type);
584 cp_print_value_fields (type, value_enclosing_type (val),
585 value_contents_all (val),
586 value_embedded_offset (val), addr,
587 stream, recurse, options, NULL, 1);
591 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
593 struct type **first_dont_print;
595 struct type *target_type = TYPE_TARGET_TYPE (type);
598 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
599 i = obstack_object_size (&dont_print_stat_array_obstack)
600 / sizeof (CORE_ADDR);
604 if (target_type == first_dont_print[i])
606 fputs_filtered ("<same as static member of an already"
613 obstack_grow (&dont_print_stat_array_obstack, (char *) &target_type,
614 sizeof (struct type *));
619 val_print (type, value_contents_all (val),
620 value_embedded_offset (val), value_address (val),
621 stream, recurse, &opts, current_language);
625 /* Find the field in *DOMAIN, or its non-virtual base classes, with bit offset
626 OFFSET. Set *DOMAIN to the containing type and *FIELDNO to the containing
627 field number. If OFFSET is not exactly at the start of some field, set
631 cp_find_class_member (struct type **domain_p, int *fieldno,
638 *domain_p = check_typedef (*domain_p);
640 len = TYPE_NFIELDS (domain);
642 for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
644 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
647 if (offset == bitpos)
654 for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
656 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
657 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (domain, i));
659 if (offset >= bitpos && offset < bitpos + bitsize)
661 *domain_p = TYPE_FIELD_TYPE (domain, i);
662 cp_find_class_member (domain_p, fieldno, offset - bitpos);
671 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
672 struct ui_file *stream, char *prefix)
674 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
676 /* VAL is a byte offset into the structure type DOMAIN.
677 Find the name of the field for that offset and
679 struct type *domain = TYPE_DOMAIN_TYPE (type);
681 unsigned int fieldno;
683 val = extract_signed_integer (valaddr, TYPE_LENGTH (type), byte_order);
685 /* Pointers to data members are usually byte offsets into an object.
686 Because a data member can have offset zero, and a NULL pointer to
687 member must be distinct from any valid non-NULL pointer to
688 member, either the value is biased or the NULL value has a
689 special representation; both are permitted by ISO C++. HP aCC
690 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
691 and other compilers which use the Itanium ABI use -1 as the NULL
692 value. GDB only supports that last form; to add support for
693 another form, make this into a cp-abi hook. */
697 fprintf_filtered (stream, "NULL");
701 cp_find_class_member (&domain, &fieldno, val << 3);
707 fputs_filtered (prefix, stream);
708 name = type_name_no_tag (domain);
710 fputs_filtered (name, stream);
712 c_type_print_base (domain, stream, 0, 0);
713 fprintf_filtered (stream, "::");
714 fputs_filtered (TYPE_FIELD_NAME (domain, fieldno), stream);
717 fprintf_filtered (stream, "%ld", (long) val);
722 _initialize_cp_valprint (void)
724 add_setshow_boolean_cmd ("static-members", class_support,
725 &user_print_options.static_field_print, _("\
726 Set printing of C++ static members."), _("\
727 Show printing of C++ static members."), NULL,
729 show_static_field_print,
730 &setprintlist, &showprintlist);
732 add_setshow_boolean_cmd ("vtbl", class_support,
733 &user_print_options.vtblprint, _("\
734 Set printing of C++ virtual function tables."), _("\
735 Show printing of C++ virtual function tables."), NULL,
738 &setprintlist, &showprintlist);
740 add_setshow_boolean_cmd ("object", class_support,
741 &user_print_options.objectprint, _("\
742 Set printing of object's derived type based on vtable info."), _("\
743 Show printing of object's derived type based on vtable info."), NULL,
746 &setprintlist, &showprintlist);
748 obstack_begin (&dont_print_stat_array_obstack, 32 * sizeof (CORE_ADDR));
749 obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
750 obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));