kernel NFS - Fix another deadlock in the readdirplus code
[dragonfly.git] / contrib / gdb-7 / gdb / cp-valprint.c
blob49d71a4480a3170da0890add3b44e448310a60a2
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
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/>. */
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"
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)
46 fprintf_filtered (file, _("\
47 Printing of C++ virtual function tables is %s.\n"),
48 value);
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)
58 fprintf_filtered (file, _("\
59 Printing of object's derived type based on vtable info is %s.\n"),
60 value);
63 static void
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"),
68 value);
72 static struct obstack dont_print_vb_obstack;
73 static struct obstack dont_print_statmem_obstack;
75 extern void _initialize_cp_valprint (void);
77 static void cp_print_static_field (struct type *, struct value *,
78 struct ui_file *, int,
79 const struct value_print_options *);
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 **);
86 /* GCC versions after 2.4.5 use this. */
87 const char vtbl_ptr_name[] = "__vtbl_ptr_type";
89 /* Return truth value for assertion that TYPE is of the type
90 "pointer to virtual function". */
92 int
93 cp_is_vtbl_ptr_type (struct type *type)
95 char *typename = type_name_no_tag (type);
97 return (typename != NULL && !strcmp (typename, vtbl_ptr_name));
100 /* Return truth value for the assertion that TYPE is of the type
101 "pointer to virtual function table". */
104 cp_is_vtbl_member (struct type *type)
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)
110 type = TYPE_TARGET_TYPE (type);
111 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
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 */
117 /* Virtual functions tables are full of pointers
118 to virtual functions. */
119 return cp_is_vtbl_ptr_type (type);
122 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */
124 return cp_is_vtbl_ptr_type (type);
126 else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
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);
134 return 0;
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.
140 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
141 same meanings as in cp_print_value and c_val_print.
143 2nd argument REAL_TYPE is used to carry over the type of the derived
144 class across the recursion to base classes.
146 DONT_PRINT is an array of baseclass types that we
147 should not print, or zero if called from top level. */
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)
156 int i, len, n_baseclasses;
157 char *last_dont_print = obstack_next_free (&dont_print_statmem_obstack);
158 int fields_seen = 0;
160 CHECK_TYPEDEF (type);
162 fprintf_filtered (stream, "{");
163 len = TYPE_NFIELDS (type);
164 n_baseclasses = TYPE_N_BASECLASSES (type);
166 /* First, print out baseclasses such that we don't print
167 duplicates of virtual baseclasses. */
169 if (n_baseclasses > 0)
170 cp_print_value (type, real_type, valaddr, offset, address, stream,
171 recurse + 1, options, dont_print_vb);
173 /* Second, print out data fields */
175 /* If there are no data fields, skip this part */
176 if (len == n_baseclasses || !len)
177 fprintf_filtered (stream, "<No data fields>");
178 else
180 struct obstack tmp_obstack = dont_print_statmem_obstack;
182 if (dont_print_statmem == 0)
184 /* If we're at top level, carve out a completely fresh
185 chunk of the obstack and use that until this particular
186 invocation returns. */
187 obstack_finish (&dont_print_statmem_obstack);
190 for (i = n_baseclasses; i < len; i++)
192 /* If requested, skip printing of static fields. */
193 if (!options->static_field_print
194 && field_is_static (&TYPE_FIELD (type, i)))
195 continue;
197 if (fields_seen)
198 fprintf_filtered (stream, ", ");
199 else if (n_baseclasses > 0)
201 if (options->pretty)
203 fprintf_filtered (stream, "\n");
204 print_spaces_filtered (2 + 2 * recurse, stream);
205 fputs_filtered ("members of ", stream);
206 fputs_filtered (type_name_no_tag (type), stream);
207 fputs_filtered (": ", stream);
210 fields_seen = 1;
212 if (options->pretty)
214 fprintf_filtered (stream, "\n");
215 print_spaces_filtered (2 + 2 * recurse, stream);
217 else
219 wrap_here (n_spaces (2 + 2 * recurse));
221 if (options->inspect_it)
223 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
224 fputs_filtered ("\"( ptr \"", stream);
225 else
226 fputs_filtered ("\"( nodef \"", stream);
227 if (field_is_static (&TYPE_FIELD (type, i)))
228 fputs_filtered ("static ", stream);
229 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
230 current_language->la_language,
231 DMGL_PARAMS | DMGL_ANSI);
232 fputs_filtered ("\" \"", stream);
233 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
234 current_language->la_language,
235 DMGL_PARAMS | DMGL_ANSI);
236 fputs_filtered ("\") \"", stream);
238 else
240 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
242 if (field_is_static (&TYPE_FIELD (type, i)))
243 fputs_filtered ("static ", stream);
244 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
245 current_language->la_language,
246 DMGL_PARAMS | DMGL_ANSI);
247 annotate_field_name_end ();
248 /* do not print leading '=' in case of anonymous unions */
249 if (strcmp (TYPE_FIELD_NAME (type, i), ""))
250 fputs_filtered (" = ", stream);
251 annotate_field_value ();
254 if (!field_is_static (&TYPE_FIELD (type, i))
255 && TYPE_FIELD_PACKED (type, i))
257 struct value *v;
259 /* Bitfields require special handling, especially due to byte
260 order problems. */
261 if (TYPE_FIELD_IGNORE (type, i))
263 fputs_filtered ("<optimized out or zero length>", stream);
265 else
267 struct value_print_options opts = *options;
268 opts.deref_ref = 0;
269 v = value_from_longest
270 (TYPE_FIELD_TYPE (type, i),
271 unpack_field_as_long (type, valaddr + offset, i));
273 common_val_print (v, stream, recurse + 1, &opts,
274 current_language);
277 else
279 if (TYPE_FIELD_IGNORE (type, i))
281 fputs_filtered ("<optimized out or zero length>", stream);
283 else if (field_is_static (&TYPE_FIELD (type, i)))
285 struct value *v = value_static_field (type, i);
286 if (v == NULL)
287 fputs_filtered ("<optimized out>", stream);
288 else
289 cp_print_static_field (TYPE_FIELD_TYPE (type, i), v,
290 stream, recurse + 1, options);
292 else
294 struct value_print_options opts = *options;
295 opts.deref_ref = 0;
296 val_print (TYPE_FIELD_TYPE (type, i),
297 valaddr, offset + TYPE_FIELD_BITPOS (type, i) / 8,
298 address + TYPE_FIELD_BITPOS (type, i) / 8,
299 stream, recurse + 1, &opts,
300 current_language);
303 annotate_field_end ();
306 if (dont_print_statmem == 0)
308 /* Free the space used to deal with the printing
309 of the members from top level. */
310 obstack_free (&dont_print_statmem_obstack, last_dont_print);
311 dont_print_statmem_obstack = tmp_obstack;
314 if (options->pretty)
316 fprintf_filtered (stream, "\n");
317 print_spaces_filtered (2 * recurse, stream);
319 } /* if there are data fields */
321 fprintf_filtered (stream, "}");
324 /* Special val_print routine to avoid printing multiple copies of virtual
325 baseclasses. */
327 static void
328 cp_print_value (struct type *type, struct type *real_type,
329 const gdb_byte *valaddr, int offset, CORE_ADDR address,
330 struct ui_file *stream, int recurse,
331 const struct value_print_options *options,
332 struct type **dont_print_vb)
334 struct type **last_dont_print
335 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
336 struct obstack tmp_obstack = dont_print_vb_obstack;
337 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
338 int thisoffset;
339 struct type *thistype;
341 if (dont_print_vb == 0)
343 /* If we're at top level, carve out a completely fresh
344 chunk of the obstack and use that until this particular
345 invocation returns. */
346 /* Bump up the high-water mark. Now alpha is omega. */
347 obstack_finish (&dont_print_vb_obstack);
350 for (i = 0; i < n_baseclasses; i++)
352 int boffset;
353 int skip;
354 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
355 char *basename = TYPE_NAME (baseclass);
356 const gdb_byte *base_valaddr;
358 if (BASETYPE_VIA_VIRTUAL (type, i))
360 struct type **first_dont_print
361 = (struct type **) obstack_base (&dont_print_vb_obstack);
363 int j = (struct type **) obstack_next_free (&dont_print_vb_obstack)
364 - first_dont_print;
366 while (--j >= 0)
367 if (baseclass == first_dont_print[j])
368 goto flush_it;
370 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
373 thisoffset = offset;
374 thistype = real_type;
376 boffset = baseclass_offset (type, i, valaddr + offset, address);
377 skip = ((boffset == -1) || (boffset + offset) < 0) ? 1 : -1;
379 if (BASETYPE_VIA_VIRTUAL (type, i))
381 /* The virtual base class pointer might have been
382 clobbered by the user program. Make sure that it
383 still points to a valid memory location. */
385 if (boffset != -1
386 && ((boffset + offset) < 0
387 || (boffset + offset) >= TYPE_LENGTH (type)))
389 /* FIXME (alloca): unsafe if baseclass is really really large. */
390 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
391 base_valaddr = buf;
392 if (target_read_memory (address + boffset, buf,
393 TYPE_LENGTH (baseclass)) != 0)
394 skip = 1;
395 address = address + boffset;
396 thisoffset = 0;
397 boffset = 0;
398 thistype = baseclass;
400 else
401 base_valaddr = valaddr;
403 else
404 base_valaddr = valaddr;
406 /* now do the printing */
407 if (options->pretty)
409 fprintf_filtered (stream, "\n");
410 print_spaces_filtered (2 * recurse, stream);
412 fputs_filtered ("<", stream);
413 /* Not sure what the best notation is in the case where there is no
414 baseclass name. */
415 fputs_filtered (basename ? basename : "", stream);
416 fputs_filtered ("> = ", stream);
419 if (skip >= 1)
420 fprintf_filtered (stream, "<invalid address>");
421 else
423 int result = 0;
425 /* Attempt to run the Python pretty-printers on the
426 baseclass if possible. */
427 if (!options->raw)
428 result = apply_val_pretty_printer (baseclass, base_valaddr,
429 thisoffset + boffset,
430 address + boffset,
431 stream, recurse,
432 options,
433 current_language);
435 if (!result)
436 cp_print_value_fields (baseclass, thistype, base_valaddr,
437 thisoffset + boffset, address + boffset,
438 stream, recurse, options,
439 ((struct type **)
440 obstack_base (&dont_print_vb_obstack)),
443 fputs_filtered (", ", stream);
445 flush_it:
449 if (dont_print_vb == 0)
451 /* Free the space used to deal with the printing
452 of this type from top level. */
453 obstack_free (&dont_print_vb_obstack, last_dont_print);
454 /* Reset watermark so that we can continue protecting
455 ourselves from whatever we were protecting ourselves. */
456 dont_print_vb_obstack = tmp_obstack;
460 /* Print value of a static member.
461 To avoid infinite recursion when printing a class that contains
462 a static instance of the class, we keep the addresses of all printed
463 static member classes in an obstack and refuse to print them more
464 than once.
466 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
467 have the same meanings as in c_val_print. */
469 static void
470 cp_print_static_field (struct type *type,
471 struct value *val,
472 struct ui_file *stream,
473 int recurse,
474 const struct value_print_options *options)
476 struct value_print_options opts;
477 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
479 CORE_ADDR *first_dont_print;
480 CORE_ADDR addr;
481 int i;
483 first_dont_print
484 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
485 i = (CORE_ADDR *) obstack_next_free (&dont_print_statmem_obstack)
486 - first_dont_print;
488 while (--i >= 0)
490 if (value_address (val) == first_dont_print[i])
492 fputs_filtered ("<same as static member of an already"
493 " seen type>",
494 stream);
495 return;
499 addr = value_address (val);
500 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
501 sizeof (CORE_ADDR));
503 CHECK_TYPEDEF (type);
504 cp_print_value_fields (type, type, value_contents_all (val),
505 value_embedded_offset (val), addr,
506 stream, recurse, options, NULL, 1);
507 return;
510 opts = *options;
511 opts.deref_ref = 0;
512 val_print (type, value_contents_all (val),
513 value_embedded_offset (val), value_address (val),
514 stream, recurse, &opts, current_language);
518 /* Find the field in *DOMAIN, or its non-virtual base classes, with bit offset
519 OFFSET. Set *DOMAIN to the containing type and *FIELDNO to the containing
520 field number. If OFFSET is not exactly at the start of some field, set
521 *DOMAIN to NULL. */
523 static void
524 cp_find_class_member (struct type **domain_p, int *fieldno,
525 LONGEST offset)
527 struct type *domain;
528 unsigned int i;
529 unsigned len;
531 *domain_p = check_typedef (*domain_p);
532 domain = *domain_p;
533 len = TYPE_NFIELDS (domain);
535 for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
537 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
539 QUIT;
540 if (offset == bitpos)
542 *fieldno = i;
543 return;
547 for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
549 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
550 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (domain, i));
552 if (offset >= bitpos && offset < bitpos + bitsize)
554 *domain_p = TYPE_FIELD_TYPE (domain, i);
555 cp_find_class_member (domain_p, fieldno, offset - bitpos);
556 return;
560 *domain_p = NULL;
563 void
564 cp_print_class_member (const gdb_byte *valaddr, struct type *type,
565 struct ui_file *stream, char *prefix)
567 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
569 /* VAL is a byte offset into the structure type DOMAIN.
570 Find the name of the field for that offset and
571 print it. */
572 struct type *domain = TYPE_DOMAIN_TYPE (type);
573 LONGEST val;
574 unsigned int fieldno;
576 val = extract_signed_integer (valaddr, TYPE_LENGTH (type), byte_order);
578 /* Pointers to data members are usually byte offsets into an object.
579 Because a data member can have offset zero, and a NULL pointer to
580 member must be distinct from any valid non-NULL pointer to
581 member, either the value is biased or the NULL value has a
582 special representation; both are permitted by ISO C++. HP aCC
583 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
584 and other compilers which use the Itanium ABI use -1 as the NULL
585 value. GDB only supports that last form; to add support for
586 another form, make this into a cp-abi hook. */
588 if (val == -1)
590 fprintf_filtered (stream, "NULL");
591 return;
594 cp_find_class_member (&domain, &fieldno, val << 3);
596 if (domain != NULL)
598 char *name;
599 fputs_filtered (prefix, stream);
600 name = type_name_no_tag (domain);
601 if (name)
602 fputs_filtered (name, stream);
603 else
604 c_type_print_base (domain, stream, 0, 0);
605 fprintf_filtered (stream, "::");
606 fputs_filtered (TYPE_FIELD_NAME (domain, fieldno), stream);
608 else
609 fprintf_filtered (stream, "%ld", (long) val);
613 void
614 _initialize_cp_valprint (void)
616 add_setshow_boolean_cmd ("static-members", class_support,
617 &user_print_options.static_field_print, _("\
618 Set printing of C++ static members."), _("\
619 Show printing of C++ static members."), NULL,
620 NULL,
621 show_static_field_print,
622 &setprintlist, &showprintlist);
624 add_setshow_boolean_cmd ("vtbl", class_support,
625 &user_print_options.vtblprint, _("\
626 Set printing of C++ virtual function tables."), _("\
627 Show printing of C++ virtual function tables."), NULL,
628 NULL,
629 show_vtblprint,
630 &setprintlist, &showprintlist);
632 add_setshow_boolean_cmd ("object", class_support,
633 &user_print_options.objectprint, _("\
634 Set printing of object's derived type based on vtable info."), _("\
635 Show printing of object's derived type based on vtable info."), NULL,
636 NULL,
637 show_objectprint,
638 &setprintlist, &showprintlist);
640 obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
641 obstack_specify_allocation (&dont_print_statmem_obstack,
642 32 * sizeof (CORE_ADDR), sizeof (CORE_ADDR),
643 xmalloc, xfree);