(generic_readchar): Tweak previous checkin, close error_fd if EOF.
[deliverable/binutils-gdb.git] / gdb / cp-valprint.c
1 /* Support for printing C++ values for GDB, the GNU debugger.
2
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.
6
7 This file is part of GDB.
8
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.
13
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.
18
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/>. */
21
22 #include "defs.h"
23 #include "gdb_obstack.h"
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "expression.h"
27 #include "value.h"
28 #include "command.h"
29 #include "gdbcmd.h"
30 #include "demangle.h"
31 #include "annotate.h"
32 #include "gdb_string.h"
33 #include "c-lang.h"
34 #include "target.h"
35 #include "cp-abi.h"
36 #include "valprint.h"
37 #include "cp-support.h"
38 #include "language.h"
39 #include "python/python.h"
40
41 /* Controls printing of vtbl's */
42 static void
43 show_vtblprint (struct ui_file *file, int from_tty,
44 struct cmd_list_element *c, const char *value)
45 {
46 fprintf_filtered (file, _("\
47 Printing of C++ virtual function tables is %s.\n"),
48 value);
49 }
50
51 /* Controls looking up an object's derived type using what we find in
52 its vtables. */
53 static void
54 show_objectprint (struct ui_file *file, int from_tty,
55 struct cmd_list_element *c,
56 const char *value)
57 {
58 fprintf_filtered (file, _("\
59 Printing of object's derived type based on vtable info is %s.\n"),
60 value);
61 }
62
63 static void
64 show_static_field_print (struct ui_file *file, int from_tty,
65 struct cmd_list_element *c, const char *value)
66 {
67 fprintf_filtered (file, _("Printing of C++ static members is %s.\n"),
68 value);
69 }
70
71
72 static struct obstack dont_print_vb_obstack;
73 static struct obstack dont_print_statmem_obstack;
74
75 extern void _initialize_cp_valprint (void);
76
77 static void cp_print_static_field (struct type *, struct value *,
78 struct ui_file *, int,
79 const struct value_print_options *);
80
81 static void cp_print_value (struct type *, struct type *, const gdb_byte *,
82 int, CORE_ADDR, struct ui_file *, int,
83 const struct value_print_options *, struct type **);
84
85
86 /* GCC versions after 2.4.5 use this. */
87 const char vtbl_ptr_name[] = "__vtbl_ptr_type";
88
89 /* Return truth value for assertion that TYPE is of the type
90 "pointer to virtual function". */
91
92 int
93 cp_is_vtbl_ptr_type (struct type *type)
94 {
95 char *typename = type_name_no_tag (type);
96
97 return (typename != NULL && !strcmp (typename, vtbl_ptr_name));
98 }
99
100 /* Return truth value for the assertion that TYPE is of the type
101 "pointer to virtual function table". */
102
103 int
104 cp_is_vtbl_member (struct type *type)
105 {
106 /* With older versions of g++, the vtbl field pointed to an array
107 of structures. Nowadays it points directly to the structure. */
108 if (TYPE_CODE (type) == TYPE_CODE_PTR)
109 {
110 type = TYPE_TARGET_TYPE (type);
111 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
112 {
113 type = TYPE_TARGET_TYPE (type);
114 if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
115 || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
116 {
117 /* Virtual functions tables are full of pointers
118 to virtual functions. */
119 return cp_is_vtbl_ptr_type (type);
120 }
121 }
122 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */
123 {
124 return cp_is_vtbl_ptr_type (type);
125 }
126 else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
127 {
128 /* The type name of the thunk pointer is NULL when using dwarf2.
129 We could test for a pointer to a function, but there is
130 no type info for the virtual table either, so it wont help. */
131 return cp_is_vtbl_ptr_type (type);
132 }
133 }
134 return 0;
135 }
136
137 /* Mutually recursive subroutines of cp_print_value and c_val_print to
138 print out a structure's fields: cp_print_value_fields and cp_print_value.
139
140 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
141 same meanings as in cp_print_value and c_val_print.
142
143 2nd argument REAL_TYPE is used to carry over the type of the derived
144 class across the recursion to base classes.
145
146 DONT_PRINT is an array of baseclass types that we
147 should not print, or zero if called from top level. */
148
149 void
150 cp_print_value_fields (struct type *type, struct type *real_type,
151 const gdb_byte *valaddr, int offset, CORE_ADDR address,
152 struct ui_file *stream, int recurse,
153 const struct value_print_options *options,
154 struct type **dont_print_vb, int dont_print_statmem)
155 {
156 int i, len, n_baseclasses;
157 int fields_seen = 0;
158
159 CHECK_TYPEDEF (type);
160
161 if (recurse == 0
162 && obstack_object_size (&dont_print_statmem_obstack) > 0)
163 obstack_free (&dont_print_statmem_obstack, NULL);
164
165 fprintf_filtered (stream, "{");
166 len = TYPE_NFIELDS (type);
167 n_baseclasses = TYPE_N_BASECLASSES (type);
168
169 /* First, print out baseclasses such that we don't print
170 duplicates of virtual baseclasses. */
171
172 if (n_baseclasses > 0)
173 cp_print_value (type, real_type, valaddr, offset, address, stream,
174 recurse + 1, options, dont_print_vb);
175
176 /* Second, print out data fields */
177
178 /* If there are no data fields, skip this part */
179 if (len == n_baseclasses || !len)
180 fprintf_filtered (stream, "<No data fields>");
181 else
182 {
183 void *statmem_obstack_top = NULL;
184
185 if (dont_print_statmem == 0)
186 {
187 /* Set the current printed-statics stack top. */
188 statmem_obstack_top
189 = obstack_next_free (&dont_print_statmem_obstack);
190 }
191
192 for (i = n_baseclasses; i < len; i++)
193 {
194 /* If requested, skip printing of static fields. */
195 if (!options->static_field_print
196 && field_is_static (&TYPE_FIELD (type, i)))
197 continue;
198
199 if (fields_seen)
200 fprintf_filtered (stream, ", ");
201 else if (n_baseclasses > 0)
202 {
203 if (options->pretty)
204 {
205 fprintf_filtered (stream, "\n");
206 print_spaces_filtered (2 + 2 * recurse, stream);
207 fputs_filtered ("members of ", stream);
208 fputs_filtered (type_name_no_tag (type), stream);
209 fputs_filtered (": ", stream);
210 }
211 }
212 fields_seen = 1;
213
214 if (options->pretty)
215 {
216 fprintf_filtered (stream, "\n");
217 print_spaces_filtered (2 + 2 * recurse, stream);
218 }
219 else
220 {
221 wrap_here (n_spaces (2 + 2 * recurse));
222 }
223 if (options->inspect_it)
224 {
225 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
226 fputs_filtered ("\"( ptr \"", stream);
227 else
228 fputs_filtered ("\"( nodef \"", stream);
229 if (field_is_static (&TYPE_FIELD (type, i)))
230 fputs_filtered ("static ", stream);
231 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
232 current_language->la_language,
233 DMGL_PARAMS | DMGL_ANSI);
234 fputs_filtered ("\" \"", stream);
235 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
236 current_language->la_language,
237 DMGL_PARAMS | DMGL_ANSI);
238 fputs_filtered ("\") \"", stream);
239 }
240 else
241 {
242 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
243
244 if (field_is_static (&TYPE_FIELD (type, i)))
245 fputs_filtered ("static ", stream);
246 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
247 current_language->la_language,
248 DMGL_PARAMS | DMGL_ANSI);
249 annotate_field_name_end ();
250 /* do not print leading '=' in case of anonymous unions */
251 if (strcmp (TYPE_FIELD_NAME (type, i), ""))
252 fputs_filtered (" = ", stream);
253 annotate_field_value ();
254 }
255
256 if (!field_is_static (&TYPE_FIELD (type, i))
257 && TYPE_FIELD_PACKED (type, i))
258 {
259 struct value *v;
260
261 /* Bitfields require special handling, especially due to byte
262 order problems. */
263 if (TYPE_FIELD_IGNORE (type, i))
264 {
265 fputs_filtered ("<optimized out or zero length>", stream);
266 }
267 else
268 {
269 struct value_print_options opts = *options;
270 opts.deref_ref = 0;
271 v = value_from_longest
272 (TYPE_FIELD_TYPE (type, i),
273 unpack_field_as_long (type, valaddr + offset, i));
274
275 common_val_print (v, stream, recurse + 1, &opts,
276 current_language);
277 }
278 }
279 else
280 {
281 if (TYPE_FIELD_IGNORE (type, i))
282 {
283 fputs_filtered ("<optimized out or zero length>", stream);
284 }
285 else if (field_is_static (&TYPE_FIELD (type, i)))
286 {
287 struct value *v = value_static_field (type, i);
288 if (v == NULL)
289 fputs_filtered ("<optimized out>", stream);
290 else
291 cp_print_static_field (TYPE_FIELD_TYPE (type, i), v,
292 stream, recurse + 1, options);
293 }
294 else
295 {
296 struct value_print_options opts = *options;
297 opts.deref_ref = 0;
298 val_print (TYPE_FIELD_TYPE (type, i),
299 valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8,
300 address,
301 stream, recurse + 1, &opts,
302 current_language);
303 }
304 }
305 annotate_field_end ();
306 }
307
308 if (dont_print_statmem == 0)
309 {
310 /* In effect, a pop of the printed-statics stack. */
311 if (obstack_object_size (&dont_print_statmem_obstack) > 0)
312 obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
313 }
314
315 if (options->pretty)
316 {
317 fprintf_filtered (stream, "\n");
318 print_spaces_filtered (2 * recurse, stream);
319 }
320 } /* if there are data fields */
321
322 fprintf_filtered (stream, "}");
323 }
324
325 /* Like cp_print_value_fields, but find the runtime type of the object
326 and pass it as the `real_type' argument to cp_print_value_fields.
327 This function is a hack to work around the fact that
328 common_val_print passes the embedded offset to val_print, but not
329 the enclosing type. */
330
331 void
332 cp_print_value_fields_rtti (struct type *type,
333 const gdb_byte *valaddr, int offset,
334 CORE_ADDR address,
335 struct ui_file *stream, int recurse,
336 const struct value_print_options *options,
337 struct type **dont_print_vb, int dont_print_statmem)
338 {
339 struct value *value;
340 int full, top, using_enc;
341 struct type *real_type;
342
343 /* Ugh, we have to convert back to a value here. */
344 value = value_from_contents_and_address (type, valaddr + offset,
345 address + offset);
346 /* We don't actually care about most of the result here -- just the
347 type. We already have the correct offset, due to how val_print
348 was initially called. */
349 real_type = value_rtti_type (value, &full, &top, &using_enc);
350 if (!real_type)
351 real_type = type;
352
353 cp_print_value_fields (type, real_type, valaddr, offset,
354 address, stream, recurse, options,
355 dont_print_vb, dont_print_statmem);
356 }
357
358 /* Special val_print routine to avoid printing multiple copies of virtual
359 baseclasses. */
360
361 static void
362 cp_print_value (struct type *type, struct type *real_type,
363 const gdb_byte *valaddr, int offset, CORE_ADDR address,
364 struct ui_file *stream, int recurse,
365 const struct value_print_options *options,
366 struct type **dont_print_vb)
367 {
368 struct type **last_dont_print
369 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
370 struct obstack tmp_obstack = dont_print_vb_obstack;
371 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
372 int thisoffset;
373 struct type *thistype;
374
375 if (dont_print_vb == 0)
376 {
377 /* If we're at top level, carve out a completely fresh
378 chunk of the obstack and use that until this particular
379 invocation returns. */
380 /* Bump up the high-water mark. Now alpha is omega. */
381 obstack_finish (&dont_print_vb_obstack);
382 }
383
384 for (i = 0; i < n_baseclasses; i++)
385 {
386 int boffset;
387 int skip;
388 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
389 char *basename = TYPE_NAME (baseclass);
390 const gdb_byte *base_valaddr;
391
392 if (BASETYPE_VIA_VIRTUAL (type, i))
393 {
394 struct type **first_dont_print
395 = (struct type **) obstack_base (&dont_print_vb_obstack);
396
397 int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
398 - first_dont_print;
399
400 while (--j >= 0)
401 if (baseclass == first_dont_print[j])
402 goto flush_it;
403
404 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
405 }
406
407 thisoffset = offset;
408 thistype = real_type;
409
410 boffset = baseclass_offset (type, i, valaddr + offset, address + offset);
411 skip = ((boffset == -1) || (boffset + offset) < 0) ? 1 : -1;
412
413 if (BASETYPE_VIA_VIRTUAL (type, i))
414 {
415 /* The virtual base class pointer might have been
416 clobbered by the user program. Make sure that it
417 still points to a valid memory location. */
418
419 if (boffset != -1
420 && ((boffset + offset) < 0
421 || (boffset + offset) >= TYPE_LENGTH (real_type)))
422 {
423 /* FIXME (alloca): unsafe if baseclass is really really large. */
424 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
425 base_valaddr = buf;
426 if (target_read_memory (address + boffset, buf,
427 TYPE_LENGTH (baseclass)) != 0)
428 skip = 1;
429 address = address + boffset;
430 thisoffset = 0;
431 boffset = 0;
432 thistype = baseclass;
433 }
434 else
435 base_valaddr = valaddr;
436 }
437 else
438 base_valaddr = valaddr;
439
440 /* now do the printing */
441 if (options->pretty)
442 {
443 fprintf_filtered (stream, "\n");
444 print_spaces_filtered (2 * recurse, stream);
445 }
446 fputs_filtered ("<", stream);
447 /* Not sure what the best notation is in the case where there is no
448 baseclass name. */
449 fputs_filtered (basename ? basename : "", stream);
450 fputs_filtered ("> = ", stream);
451
452
453 if (skip >= 1)
454 fprintf_filtered (stream, "<invalid address>");
455 else
456 {
457 int result = 0;
458
459 /* Attempt to run the Python pretty-printers on the
460 baseclass if possible. */
461 if (!options->raw)
462 result = apply_val_pretty_printer (baseclass, base_valaddr,
463 thisoffset + boffset,
464 address,
465 stream, recurse,
466 options,
467 current_language);
468
469 if (!result)
470 cp_print_value_fields (baseclass, thistype, base_valaddr,
471 thisoffset + boffset, address,
472 stream, recurse, options,
473 ((struct type **)
474 obstack_base (&dont_print_vb_obstack)),
475 0);
476 }
477 fputs_filtered (", ", stream);
478
479 flush_it:
480 ;
481 }
482
483 if (dont_print_vb == 0)
484 {
485 /* Free the space used to deal with the printing
486 of this type from top level. */
487 obstack_free (&dont_print_vb_obstack, last_dont_print);
488 /* Reset watermark so that we can continue protecting
489 ourselves from whatever we were protecting ourselves. */
490 dont_print_vb_obstack = tmp_obstack;
491 }
492 }
493
494 /* Print value of a static member.
495 To avoid infinite recursion when printing a class that contains
496 a static instance of the class, we keep the addresses of all printed
497 static member classes in an obstack and refuse to print them more
498 than once.
499
500 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
501 have the same meanings as in c_val_print. */
502
503 static void
504 cp_print_static_field (struct type *type,
505 struct value *val,
506 struct ui_file *stream,
507 int recurse,
508 const struct value_print_options *options)
509 {
510 struct value_print_options opts;
511 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
512 {
513 CORE_ADDR *first_dont_print;
514 CORE_ADDR addr;
515 int i;
516
517 first_dont_print
518 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
519 i = obstack_object_size (&dont_print_statmem_obstack)
520 / sizeof (CORE_ADDR);
521
522 while (--i >= 0)
523 {
524 if (value_address (val) == first_dont_print[i])
525 {
526 fputs_filtered ("<same as static member of an already"
527 " seen type>",
528 stream);
529 return;
530 }
531 }
532
533 addr = value_address (val);
534 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
535 sizeof (CORE_ADDR));
536
537 CHECK_TYPEDEF (type);
538 cp_print_value_fields (type, value_enclosing_type (val),
539 value_contents_all (val),
540 value_embedded_offset (val), addr,
541 stream, recurse, options, NULL, 1);
542 return;
543 }
544
545 opts = *options;
546 opts.deref_ref = 0;
547 val_print (type, value_contents_all (val),
548 value_embedded_offset (val), value_address (val),
549 stream, recurse, &opts, current_language);
550 }
551
552
553 /* Find the field in *DOMAIN, or its non-virtual base classes, with bit offset
554 OFFSET. Set *DOMAIN to the containing type and *FIELDNO to the containing
555 field number. If OFFSET is not exactly at the start of some field, set
556 *DOMAIN to NULL. */
557
558 static void
559 cp_find_class_member (struct type **domain_p, int *fieldno,
560 LONGEST offset)
561 {
562 struct type *domain;
563 unsigned int i;
564 unsigned len;
565
566 *domain_p = check_typedef (*domain_p);
567 domain = *domain_p;
568 len = TYPE_NFIELDS (domain);
569
570 for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
571 {
572 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
573
574 QUIT;
575 if (offset == bitpos)
576 {
577 *fieldno = i;
578 return;
579 }
580 }
581
582 for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
583 {
584 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
585 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (domain, i));
586
587 if (offset >= bitpos && offset < bitpos + bitsize)
588 {
589 *domain_p = TYPE_FIELD_TYPE (domain, i);
590 cp_find_class_member (domain_p, fieldno, offset - bitpos);
591 return;
592 }
593 }
594
595 *domain_p = NULL;
596 }
597
598 void
599 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
600 struct ui_file *stream, char *prefix)
601 {
602 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
603
604 /* VAL is a byte offset into the structure type DOMAIN.
605 Find the name of the field for that offset and
606 print it. */
607 struct type *domain = TYPE_DOMAIN_TYPE (type);
608 LONGEST val;
609 unsigned int fieldno;
610
611 val = extract_signed_integer (valaddr, TYPE_LENGTH (type), byte_order);
612
613 /* Pointers to data members are usually byte offsets into an object.
614 Because a data member can have offset zero, and a NULL pointer to
615 member must be distinct from any valid non-NULL pointer to
616 member, either the value is biased or the NULL value has a
617 special representation; both are permitted by ISO C++. HP aCC
618 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
619 and other compilers which use the Itanium ABI use -1 as the NULL
620 value. GDB only supports that last form; to add support for
621 another form, make this into a cp-abi hook. */
622
623 if (val == -1)
624 {
625 fprintf_filtered (stream, "NULL");
626 return;
627 }
628
629 cp_find_class_member (&domain, &fieldno, val << 3);
630
631 if (domain != NULL)
632 {
633 char *name;
634 fputs_filtered (prefix, stream);
635 name = type_name_no_tag (domain);
636 if (name)
637 fputs_filtered (name, stream);
638 else
639 c_type_print_base (domain, stream, 0, 0);
640 fprintf_filtered (stream, "::");
641 fputs_filtered (TYPE_FIELD_NAME (domain, fieldno), stream);
642 }
643 else
644 fprintf_filtered (stream, "%ld", (long) val);
645 }
646
647
648 void
649 _initialize_cp_valprint (void)
650 {
651 add_setshow_boolean_cmd ("static-members", class_support,
652 &user_print_options.static_field_print, _("\
653 Set printing of C++ static members."), _("\
654 Show printing of C++ static members."), NULL,
655 NULL,
656 show_static_field_print,
657 &setprintlist, &showprintlist);
658
659 add_setshow_boolean_cmd ("vtbl", class_support,
660 &user_print_options.vtblprint, _("\
661 Set printing of C++ virtual function tables."), _("\
662 Show printing of C++ virtual function tables."), NULL,
663 NULL,
664 show_vtblprint,
665 &setprintlist, &showprintlist);
666
667 add_setshow_boolean_cmd ("object", class_support,
668 &user_print_options.objectprint, _("\
669 Set printing of object's derived type based on vtable info."), _("\
670 Show printing of object's derived type based on vtable info."), NULL,
671 NULL,
672 show_objectprint,
673 &setprintlist, &showprintlist);
674
675 obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
676 obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
677 }
This page took 0.043889 seconds and 4 git commands to generate.