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 void *statmem_obstack_top = NULL;
190 void *stat_array_obstack_top = NULL;
192 if (dont_print_statmem == 0)
194 /* Set the current printed-statics stack top. */
196 = obstack_next_free (&dont_print_statmem_obstack);
198 if (last_set_recurse != recurse)
200 stat_array_obstack_top
201 = obstack_next_free (&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;
285 v = value_from_longest
286 (TYPE_FIELD_TYPE (type, i),
287 unpack_field_as_long (type, valaddr + offset, i));
289 common_val_print (v, stream, recurse + 1, &opts,
295 if (TYPE_FIELD_IGNORE (type, i))
297 fputs_filtered ("<optimized out or zero length>", stream);
299 else if (field_is_static (&TYPE_FIELD (type, i)))
301 struct value *v = value_static_field (type, i);
303 fputs_filtered ("<optimized out>", stream);
305 cp_print_static_field (TYPE_FIELD_TYPE (type, i), v,
306 stream, recurse + 1, options);
310 struct value_print_options opts = *options;
312 val_print (TYPE_FIELD_TYPE (type, i),
313 valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8,
315 stream, recurse + 1, &opts,
319 annotate_field_end ();
322 if (dont_print_statmem == 0)
324 if (obstack_object_size (&dont_print_statmem_obstack) > 0)
325 obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
327 if (last_set_recurse != recurse)
329 if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
330 obstack_free (&dont_print_stat_array_obstack,
331 stat_array_obstack_top);
332 last_set_recurse = -1;
338 fprintf_filtered (stream, "\n");
339 print_spaces_filtered (2 * recurse, stream);
341 } /* if there are data fields */
343 fprintf_filtered (stream, "}");
346 /* Like cp_print_value_fields, but find the runtime type of the object
347 and pass it as the `real_type' argument to cp_print_value_fields.
348 This function is a hack to work around the fact that
349 common_val_print passes the embedded offset to val_print, but not
350 the enclosing type. */
353 cp_print_value_fields_rtti (struct type *type,
354 const gdb_byte *valaddr, int offset,
356 struct ui_file *stream, int recurse,
357 const struct value_print_options *options,
358 struct type **dont_print_vb, int dont_print_statmem)
361 int full, top, using_enc;
362 struct type *real_type;
364 /* Ugh, we have to convert back to a value here. */
365 value = value_from_contents_and_address (type, valaddr + offset,
367 /* We don't actually care about most of the result here -- just the
368 type. We already have the correct offset, due to how val_print
369 was initially called. */
370 real_type = value_rtti_type (value, &full, &top, &using_enc);
374 cp_print_value_fields (type, real_type, valaddr, offset,
375 address, stream, recurse, options,
376 dont_print_vb, dont_print_statmem);
379 /* Special val_print routine to avoid printing multiple copies of virtual
383 cp_print_value (struct type *type, struct type *real_type,
384 const gdb_byte *valaddr, int offset, CORE_ADDR address,
385 struct ui_file *stream, int recurse,
386 const struct value_print_options *options,
387 struct type **dont_print_vb)
389 struct type **last_dont_print
390 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
391 struct obstack tmp_obstack = dont_print_vb_obstack;
392 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
394 struct type *thistype;
396 if (dont_print_vb == 0)
398 /* If we're at top level, carve out a completely fresh
399 chunk of the obstack and use that until this particular
400 invocation returns. */
401 /* Bump up the high-water mark. Now alpha is omega. */
402 obstack_finish (&dont_print_vb_obstack);
405 for (i = 0; i < n_baseclasses; i++)
409 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
410 char *basename = TYPE_NAME (baseclass);
411 const gdb_byte *base_valaddr;
413 if (BASETYPE_VIA_VIRTUAL (type, i))
415 struct type **first_dont_print
416 = (struct type **) obstack_base (&dont_print_vb_obstack);
418 int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
422 if (baseclass == first_dont_print[j])
425 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
429 thistype = real_type;
431 boffset = baseclass_offset (type, i, valaddr + offset, address + offset);
432 skip = ((boffset == -1) || (boffset + offset) < 0) ? 1 : -1;
434 if (BASETYPE_VIA_VIRTUAL (type, i))
436 /* The virtual base class pointer might have been
437 clobbered by the user program. Make sure that it
438 still points to a valid memory location. */
441 && ((boffset + offset) < 0
442 || (boffset + offset) >= TYPE_LENGTH (real_type)))
444 /* FIXME (alloca): unsafe if baseclass is really really large. */
445 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
447 if (target_read_memory (address + boffset, buf,
448 TYPE_LENGTH (baseclass)) != 0)
450 address = address + boffset;
453 thistype = baseclass;
456 base_valaddr = valaddr;
459 base_valaddr = valaddr;
461 /* now do the printing */
464 fprintf_filtered (stream, "\n");
465 print_spaces_filtered (2 * recurse, stream);
467 fputs_filtered ("<", stream);
468 /* Not sure what the best notation is in the case where there is no
470 fputs_filtered (basename ? basename : "", stream);
471 fputs_filtered ("> = ", stream);
475 fprintf_filtered (stream, "<invalid address>");
480 /* Attempt to run the Python pretty-printers on the
481 baseclass if possible. */
483 result = apply_val_pretty_printer (baseclass, base_valaddr,
484 thisoffset + boffset,
491 cp_print_value_fields (baseclass, thistype, base_valaddr,
492 thisoffset + boffset, address,
493 stream, recurse, options,
495 obstack_base (&dont_print_vb_obstack)),
498 fputs_filtered (", ", stream);
504 if (dont_print_vb == 0)
506 /* Free the space used to deal with the printing
507 of this type from top level. */
508 obstack_free (&dont_print_vb_obstack, last_dont_print);
509 /* Reset watermark so that we can continue protecting
510 ourselves from whatever we were protecting ourselves. */
511 dont_print_vb_obstack = tmp_obstack;
515 /* Print value of a static member.
516 To avoid infinite recursion when printing a class that contains
517 a static instance of the class, we keep the addresses of all printed
518 static member classes in an obstack and refuse to print them more
521 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
522 have the same meanings as in c_val_print. */
525 cp_print_static_field (struct type *type,
527 struct ui_file *stream,
529 const struct value_print_options *options)
531 struct value_print_options opts;
533 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
535 CORE_ADDR *first_dont_print;
540 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
541 i = obstack_object_size (&dont_print_statmem_obstack)
542 / sizeof (CORE_ADDR);
546 if (value_address (val) == first_dont_print[i])
548 fputs_filtered ("<same as static member of an already"
555 addr = value_address (val);
556 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
559 CHECK_TYPEDEF (type);
560 cp_print_value_fields (type, value_enclosing_type (val),
561 value_contents_all (val),
562 value_embedded_offset (val), addr,
563 stream, recurse, options, NULL, 1);
567 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
569 struct type **first_dont_print;
571 struct type *target_type = TYPE_TARGET_TYPE (type);
574 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
575 i = obstack_object_size (&dont_print_stat_array_obstack)
576 / sizeof (CORE_ADDR);
580 if (target_type == first_dont_print[i])
582 fputs_filtered ("<same as static member of an already"
589 obstack_grow (&dont_print_stat_array_obstack, (char *) &target_type,
590 sizeof (struct type *));
595 val_print (type, value_contents_all (val),
596 value_embedded_offset (val), value_address (val),
597 stream, recurse, &opts, current_language);
601 /* Find the field in *DOMAIN, or its non-virtual base classes, with bit offset
602 OFFSET. Set *DOMAIN to the containing type and *FIELDNO to the containing
603 field number. If OFFSET is not exactly at the start of some field, set
607 cp_find_class_member (struct type **domain_p, int *fieldno,
614 *domain_p = check_typedef (*domain_p);
616 len = TYPE_NFIELDS (domain);
618 for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
620 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
623 if (offset == bitpos)
630 for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
632 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
633 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (domain, i));
635 if (offset >= bitpos && offset < bitpos + bitsize)
637 *domain_p = TYPE_FIELD_TYPE (domain, i);
638 cp_find_class_member (domain_p, fieldno, offset - bitpos);
647 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
648 struct ui_file *stream, char *prefix)
650 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
652 /* VAL is a byte offset into the structure type DOMAIN.
653 Find the name of the field for that offset and
655 struct type *domain = TYPE_DOMAIN_TYPE (type);
657 unsigned int fieldno;
659 val = extract_signed_integer (valaddr, TYPE_LENGTH (type), byte_order);
661 /* Pointers to data members are usually byte offsets into an object.
662 Because a data member can have offset zero, and a NULL pointer to
663 member must be distinct from any valid non-NULL pointer to
664 member, either the value is biased or the NULL value has a
665 special representation; both are permitted by ISO C++. HP aCC
666 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
667 and other compilers which use the Itanium ABI use -1 as the NULL
668 value. GDB only supports that last form; to add support for
669 another form, make this into a cp-abi hook. */
673 fprintf_filtered (stream, "NULL");
677 cp_find_class_member (&domain, &fieldno, val << 3);
682 fputs_filtered (prefix, stream);
683 name = type_name_no_tag (domain);
685 fputs_filtered (name, stream);
687 c_type_print_base (domain, stream, 0, 0);
688 fprintf_filtered (stream, "::");
689 fputs_filtered (TYPE_FIELD_NAME (domain, fieldno), stream);
692 fprintf_filtered (stream, "%ld", (long) val);
697 _initialize_cp_valprint (void)
699 add_setshow_boolean_cmd ("static-members", class_support,
700 &user_print_options.static_field_print, _("\
701 Set printing of C++ static members."), _("\
702 Show printing of C++ static members."), NULL,
704 show_static_field_print,
705 &setprintlist, &showprintlist);
707 add_setshow_boolean_cmd ("vtbl", class_support,
708 &user_print_options.vtblprint, _("\
709 Set printing of C++ virtual function tables."), _("\
710 Show printing of C++ virtual function tables."), NULL,
713 &setprintlist, &showprintlist);
715 add_setshow_boolean_cmd ("object", class_support,
716 &user_print_options.objectprint, _("\
717 Set printing of object's derived type based on vtable info."), _("\
718 Show printing of object's derived type based on vtable info."), NULL,
721 &setprintlist, &showprintlist);
723 obstack_begin (&dont_print_stat_array_obstack, 32 * sizeof (CORE_ADDR));
724 obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
725 obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));