gdb/
[deliverable/binutils-gdb.git] / gdb / cp-valprint.c
CommitLineData
c906108c 1/* Support for printing C++ values for GDB, the GNU debugger.
a2bd3dcd 2
6aba47ca 3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
7b6bb8da 4 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011
9b254dd1 5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
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.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
04ea0df1 23#include "gdb_obstack.h"
c906108c
SS
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"
b9d652ac 35#include "cp-abi.h"
973177d3 36#include "valprint.h"
d3cbe7ef 37#include "cp-support.h"
cf309262 38#include "language.h"
a6bac58e 39#include "python/python.h"
8af8e3bc 40#include "exceptions.h"
c906108c 41
aff410f1 42/* Controls printing of vtbl's. */
920d2a44
AC
43static void
44show_vtblprint (struct ui_file *file, int from_tty,
45 struct cmd_list_element *c, const char *value)
46{
47 fprintf_filtered (file, _("\
48Printing of C++ virtual function tables is %s.\n"),
49 value);
50}
51
52/* Controls looking up an object's derived type using what we find in
53 its vtables. */
920d2a44
AC
54static void
55show_objectprint (struct ui_file *file, int from_tty,
56 struct cmd_list_element *c,
57 const char *value)
58{
59 fprintf_filtered (file, _("\
60Printing of object's derived type based on vtable info is %s.\n"),
61 value);
62}
63
920d2a44
AC
64static void
65show_static_field_print (struct ui_file *file, int from_tty,
aff410f1
MS
66 struct cmd_list_element *c,
67 const char *value)
920d2a44 68{
aff410f1
MS
69 fprintf_filtered (file,
70 _("Printing of C++ static members is %s.\n"),
920d2a44
AC
71 value);
72}
73
c906108c
SS
74
75static struct obstack dont_print_vb_obstack;
76static struct obstack dont_print_statmem_obstack;
ec31cde5 77static struct obstack dont_print_stat_array_obstack;
c906108c 78
a14ed312 79extern void _initialize_cp_valprint (void);
392a587b 80
6943961c 81static void cp_print_static_field (struct type *, struct value *,
79a45b7d
TT
82 struct ui_file *, int,
83 const struct value_print_options *);
c906108c 84
aff410f1
MS
85static void cp_print_value (struct type *, struct type *,
86 const gdb_byte *, int,
87 CORE_ADDR, struct ui_file *,
88 int, const struct value *,
89 const struct value_print_options *,
90 struct type **);
c906108c 91
c906108c 92
8343f86c 93/* GCC versions after 2.4.5 use this. */
2c63a960 94const char vtbl_ptr_name[] = "__vtbl_ptr_type";
c906108c 95
c906108c
SS
96/* Return truth value for assertion that TYPE is of the type
97 "pointer to virtual function". */
98
99int
fba45db2 100cp_is_vtbl_ptr_type (struct type *type)
c906108c
SS
101{
102 char *typename = type_name_no_tag (type);
103
8343f86c 104 return (typename != NULL && !strcmp (typename, vtbl_ptr_name));
c906108c
SS
105}
106
107/* Return truth value for the assertion that TYPE is of the type
108 "pointer to virtual function table". */
109
110int
fba45db2 111cp_is_vtbl_member (struct type *type)
c906108c 112{
aff410f1
MS
113 /* With older versions of g++, the vtbl field pointed to an array of
114 structures. Nowadays it points directly to the structure. */
c906108c
SS
115 if (TYPE_CODE (type) == TYPE_CODE_PTR)
116 {
117 type = TYPE_TARGET_TYPE (type);
118 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
119 {
120 type = TYPE_TARGET_TYPE (type);
aff410f1
MS
121 if (TYPE_CODE (type) == TYPE_CODE_STRUCT /* if not using thunks */
122 || TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
c906108c
SS
123 {
124 /* Virtual functions tables are full of pointers
aff410f1 125 to virtual functions. */
c906108c
SS
126 return cp_is_vtbl_ptr_type (type);
127 }
128 }
0e5e3ea6
PS
129 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT) /* if not using thunks */
130 {
131 return cp_is_vtbl_ptr_type (type);
132 }
133 else if (TYPE_CODE (type) == TYPE_CODE_PTR) /* if using thunks */
134 {
aff410f1
MS
135 /* The type name of the thunk pointer is NULL when using
136 dwarf2. We could test for a pointer to a function, but
137 there is no type info for the virtual table either, so it
138 wont help. */
0e5e3ea6
PS
139 return cp_is_vtbl_ptr_type (type);
140 }
c906108c
SS
141 }
142 return 0;
143}
144
145/* Mutually recursive subroutines of cp_print_value and c_val_print to
aff410f1
MS
146 print out a structure's fields: cp_print_value_fields and
147 cp_print_value.
c5aa993b 148
aff410f1
MS
149 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the same
150 meanings as in cp_print_value and c_val_print.
c906108c 151
aff410f1
MS
152 2nd argument REAL_TYPE is used to carry over the type of the
153 derived class across the recursion to base classes.
c906108c 154
aff410f1
MS
155 DONT_PRINT is an array of baseclass types that we should not print,
156 or zero if called from top level. */
c906108c
SS
157
158void
a2bd3dcd 159cp_print_value_fields (struct type *type, struct type *real_type,
aff410f1
MS
160 const gdb_byte *valaddr, int offset,
161 CORE_ADDR address, struct ui_file *stream,
162 int recurse, const struct value *val,
79a45b7d 163 const struct value_print_options *options,
aff410f1
MS
164 struct type **dont_print_vb,
165 int dont_print_statmem)
c906108c
SS
166{
167 int i, len, n_baseclasses;
c906108c 168 int fields_seen = 0;
ec31cde5 169 static int last_set_recurse = -1;
c906108c
SS
170
171 CHECK_TYPEDEF (type);
99903ae3 172
ec31cde5
CM
173 if (recurse == 0)
174 {
aff410f1
MS
175 /* Any object can be left on obstacks only during an unexpected
176 error. */
6036c742 177
ec31cde5 178 if (obstack_object_size (&dont_print_statmem_obstack) > 0)
6036c742
JK
179 {
180 obstack_free (&dont_print_statmem_obstack, NULL);
aff410f1
MS
181 obstack_begin (&dont_print_statmem_obstack,
182 32 * sizeof (CORE_ADDR));
6036c742 183 }
ec31cde5 184 if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
6036c742
JK
185 {
186 obstack_free (&dont_print_stat_array_obstack, NULL);
187 obstack_begin (&dont_print_stat_array_obstack,
188 32 * sizeof (struct type *));
189 }
ec31cde5 190 }
c906108c
SS
191
192 fprintf_filtered (stream, "{");
193 len = TYPE_NFIELDS (type);
194 n_baseclasses = TYPE_N_BASECLASSES (type);
195
196 /* First, print out baseclasses such that we don't print
197 duplicates of virtual baseclasses. */
198
199 if (n_baseclasses > 0)
aff410f1
MS
200 cp_print_value (type, real_type, valaddr,
201 offset, address, stream,
202 recurse + 1, val, options,
203 dont_print_vb);
c906108c
SS
204
205 /* Second, print out data fields */
206
086280be
UW
207 /* If there are no data fields, skip this part */
208 if (len == n_baseclasses || !len)
c906108c
SS
209 fprintf_filtered (stream, "<No data fields>");
210 else
211 {
f56dcb88
CM
212 int statmem_obstack_initial_size = 0;
213 int stat_array_obstack_initial_size = 0;
99903ae3 214
c906108c
SS
215 if (dont_print_statmem == 0)
216 {
f56dcb88 217 statmem_obstack_initial_size =
0b66f317 218 obstack_object_size (&dont_print_statmem_obstack);
ec31cde5
CM
219
220 if (last_set_recurse != recurse)
221 {
f56dcb88
CM
222 stat_array_obstack_initial_size =
223 obstack_object_size (&dont_print_stat_array_obstack);
c5504eaf 224
ec31cde5
CM
225 last_set_recurse = recurse;
226 }
c906108c
SS
227 }
228
229 for (i = n_baseclasses; i < len; i++)
230 {
231 /* If requested, skip printing of static fields. */
79a45b7d 232 if (!options->static_field_print
d6a843b5 233 && field_is_static (&TYPE_FIELD (type, i)))
c906108c
SS
234 continue;
235
c906108c
SS
236 if (fields_seen)
237 fprintf_filtered (stream, ", ");
238 else if (n_baseclasses > 0)
239 {
79a45b7d 240 if (options->pretty)
c906108c
SS
241 {
242 fprintf_filtered (stream, "\n");
243 print_spaces_filtered (2 + 2 * recurse, stream);
244 fputs_filtered ("members of ", stream);
245 fputs_filtered (type_name_no_tag (type), stream);
246 fputs_filtered (": ", stream);
247 }
248 }
249 fields_seen = 1;
250
79a45b7d 251 if (options->pretty)
c906108c
SS
252 {
253 fprintf_filtered (stream, "\n");
254 print_spaces_filtered (2 + 2 * recurse, stream);
255 }
c5aa993b 256 else
c906108c
SS
257 {
258 wrap_here (n_spaces (2 + 2 * recurse));
259 }
79a45b7d 260 if (options->inspect_it)
c906108c
SS
261 {
262 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
263 fputs_filtered ("\"( ptr \"", stream);
264 else
265 fputs_filtered ("\"( nodef \"", stream);
d6a843b5 266 if (field_is_static (&TYPE_FIELD (type, i)))
c906108c 267 fputs_filtered ("static ", stream);
aff410f1
MS
268 fprintf_symbol_filtered (stream,
269 TYPE_FIELD_NAME (type, i),
cf309262 270 current_language->la_language,
c906108c
SS
271 DMGL_PARAMS | DMGL_ANSI);
272 fputs_filtered ("\" \"", stream);
aff410f1
MS
273 fprintf_symbol_filtered (stream,
274 TYPE_FIELD_NAME (type, i),
cf309262 275 current_language->la_language,
c906108c
SS
276 DMGL_PARAMS | DMGL_ANSI);
277 fputs_filtered ("\") \"", stream);
278 }
279 else
280 {
281 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
282
d6a843b5 283 if (field_is_static (&TYPE_FIELD (type, i)))
c906108c 284 fputs_filtered ("static ", stream);
aff410f1
MS
285 fprintf_symbol_filtered (stream,
286 TYPE_FIELD_NAME (type, i),
cf309262 287 current_language->la_language,
c906108c
SS
288 DMGL_PARAMS | DMGL_ANSI);
289 annotate_field_name_end ();
aff410f1
MS
290 /* Do not print leading '=' in case of anonymous
291 unions. */
c906108c
SS
292 if (strcmp (TYPE_FIELD_NAME (type, i), ""))
293 fputs_filtered (" = ", stream);
294 annotate_field_value ();
295 }
296
d6a843b5
JK
297 if (!field_is_static (&TYPE_FIELD (type, i))
298 && TYPE_FIELD_PACKED (type, i))
c906108c 299 {
6943961c 300 struct value *v;
c906108c 301
aff410f1
MS
302 /* Bitfields require special handling, especially due to
303 byte order problems. */
c906108c
SS
304 if (TYPE_FIELD_IGNORE (type, i))
305 {
c5aa993b 306 fputs_filtered ("<optimized out or zero length>", stream);
c906108c 307 }
8cf6f0b1
TT
308 else if (value_bits_synthetic_pointer (val,
309 TYPE_FIELD_BITPOS (type,
310 i),
311 TYPE_FIELD_BITSIZE (type,
312 i)))
313 {
314 fputs_filtered (_("<synthetic pointer>"), stream);
315 }
aff410f1
MS
316 else if (!value_bits_valid (val,
317 TYPE_FIELD_BITPOS (type, i),
0e03807e
TT
318 TYPE_FIELD_BITSIZE (type, i)))
319 {
585fdaa1 320 val_print_optimized_out (stream);
0e03807e 321 }
c906108c
SS
322 else
323 {
79a45b7d 324 struct value_print_options opts = *options;
c5504eaf 325
79a45b7d 326 opts.deref_ref = 0;
5467c6c8
PA
327
328 v = value_field_bitfield (type, i, valaddr, offset, val);
c906108c 329
79a45b7d 330 common_val_print (v, stream, recurse + 1, &opts,
d8ca156b 331 current_language);
c906108c
SS
332 }
333 }
334 else
335 {
336 if (TYPE_FIELD_IGNORE (type, i))
337 {
aff410f1
MS
338 fputs_filtered ("<optimized out or zero length>",
339 stream);
c906108c 340 }
d6a843b5 341 else if (field_is_static (&TYPE_FIELD (type, i)))
c906108c 342 {
ee86786c
TT
343 volatile struct gdb_exception ex;
344 struct value *v = NULL;
345
346 TRY_CATCH (ex, RETURN_MASK_ERROR)
347 {
348 v = value_static_field (type, i);
349 }
350
351 if (ex.reason < 0)
352 fprintf_filtered (stream,
353 _("<error reading variable: %s>"),
354 ex.message);
355 else if (v == NULL)
585fdaa1 356 val_print_optimized_out (stream);
c906108c 357 else
aff410f1
MS
358 cp_print_static_field (TYPE_FIELD_TYPE (type, i),
359 v, stream, recurse + 1,
360 options);
c906108c
SS
361 }
362 else
363 {
79a45b7d 364 struct value_print_options opts = *options;
c5504eaf 365
79a45b7d 366 opts.deref_ref = 0;
c5aa993b 367 val_print (TYPE_FIELD_TYPE (type, i),
aff410f1
MS
368 valaddr,
369 offset + TYPE_FIELD_BITPOS (type, i) / 8,
edf3d5f3 370 address,
0e03807e 371 stream, recurse + 1, val, &opts,
d8ca156b 372 current_language);
c906108c
SS
373 }
374 }
375 annotate_field_end ();
376 }
377
378 if (dont_print_statmem == 0)
379 {
0b66f317
CM
380 int obstack_final_size =
381 obstack_object_size (&dont_print_statmem_obstack);
382
aff410f1
MS
383 if (obstack_final_size > statmem_obstack_initial_size)
384 {
385 /* In effect, a pop of the printed-statics stack. */
0b66f317 386
aff410f1
MS
387 void *free_to_ptr =
388 obstack_next_free (&dont_print_statmem_obstack) -
389 (obstack_final_size - statmem_obstack_initial_size);
0b66f317 390
aff410f1
MS
391 obstack_free (&dont_print_statmem_obstack,
392 free_to_ptr);
393 }
ec31cde5
CM
394
395 if (last_set_recurse != recurse)
396 {
f56dcb88
CM
397 int obstack_final_size =
398 obstack_object_size (&dont_print_stat_array_obstack);
399
400 if (obstack_final_size > stat_array_obstack_initial_size)
401 {
402 void *free_to_ptr =
aff410f1
MS
403 obstack_next_free (&dont_print_stat_array_obstack)
404 - (obstack_final_size
405 - stat_array_obstack_initial_size);
f56dcb88
CM
406
407 obstack_free (&dont_print_stat_array_obstack,
408 free_to_ptr);
409 }
ec31cde5
CM
410 last_set_recurse = -1;
411 }
c906108c
SS
412 }
413
79a45b7d 414 if (options->pretty)
c906108c
SS
415 {
416 fprintf_filtered (stream, "\n");
417 print_spaces_filtered (2 * recurse, stream);
418 }
c5aa993b 419 } /* if there are data fields */
c5aa993b 420
c906108c
SS
421 fprintf_filtered (stream, "}");
422}
423
edf3d5f3
TT
424/* Like cp_print_value_fields, but find the runtime type of the object
425 and pass it as the `real_type' argument to cp_print_value_fields.
426 This function is a hack to work around the fact that
427 common_val_print passes the embedded offset to val_print, but not
428 the enclosing type. */
429
430void
431cp_print_value_fields_rtti (struct type *type,
432 const gdb_byte *valaddr, int offset,
433 CORE_ADDR address,
434 struct ui_file *stream, int recurse,
0e03807e 435 const struct value *val,
edf3d5f3 436 const struct value_print_options *options,
c5504eaf
MS
437 struct type **dont_print_vb,
438 int dont_print_statmem)
edf3d5f3 439{
0e03807e
TT
440 struct type *real_type = NULL;
441
442 /* We require all bits to be valid in order to attempt a
443 conversion. */
444 if (value_bits_valid (val, TARGET_CHAR_BIT * offset,
445 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
446 {
447 struct value *value;
448 int full, top, using_enc;
449
450 /* Ugh, we have to convert back to a value here. */
451 value = value_from_contents_and_address (type, valaddr + offset,
452 address + offset);
aff410f1
MS
453 /* We don't actually care about most of the result here -- just
454 the type. We already have the correct offset, due to how
455 val_print was initially called. */
0e03807e
TT
456 real_type = value_rtti_type (value, &full, &top, &using_enc);
457 }
458
edf3d5f3
TT
459 if (!real_type)
460 real_type = type;
461
462 cp_print_value_fields (type, real_type, valaddr, offset,
0e03807e 463 address, stream, recurse, val, options,
edf3d5f3
TT
464 dont_print_vb, dont_print_statmem);
465}
466
aff410f1
MS
467/* Special val_print routine to avoid printing multiple copies of
468 virtual baseclasses. */
c906108c
SS
469
470static void
a2bd3dcd 471cp_print_value (struct type *type, struct type *real_type,
aff410f1
MS
472 const gdb_byte *valaddr, int offset,
473 CORE_ADDR address, struct ui_file *stream,
474 int recurse, const struct value *val,
79a45b7d
TT
475 const struct value_print_options *options,
476 struct type **dont_print_vb)
c906108c 477{
c906108c 478 struct type **last_dont_print
2c63a960 479 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
c1b6e682 480 struct obstack tmp_obstack = dont_print_vb_obstack;
c906108c 481 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
b9d652ac
DJ
482 int thisoffset;
483 struct type *thistype;
c906108c
SS
484
485 if (dont_print_vb == 0)
486 {
aff410f1
MS
487 /* If we're at top level, carve out a completely fresh chunk of
488 the obstack and use that until this particular invocation
489 returns. */
c906108c
SS
490 /* Bump up the high-water mark. Now alpha is omega. */
491 obstack_finish (&dont_print_vb_obstack);
492 }
493
494 for (i = 0; i < n_baseclasses; i++)
495 {
8af8e3bc 496 int boffset = 0;
c906108c
SS
497 int skip;
498 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
499 char *basename = TYPE_NAME (baseclass);
8af8e3bc
PA
500 const gdb_byte *base_valaddr = NULL;
501 const struct value *base_val = NULL;
502 volatile struct gdb_exception ex;
c906108c
SS
503
504 if (BASETYPE_VIA_VIRTUAL (type, i))
505 {
506 struct type **first_dont_print
2c63a960 507 = (struct type **) obstack_base (&dont_print_vb_obstack);
c906108c 508
aff410f1
MS
509 int j = (struct type **)
510 obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
c906108c
SS
511
512 while (--j >= 0)
513 if (baseclass == first_dont_print[j])
514 goto flush_it;
515
516 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
517 }
518
b9d652ac
DJ
519 thisoffset = offset;
520 thistype = real_type;
086280be 521
8af8e3bc 522 TRY_CATCH (ex, RETURN_MASK_ERROR)
c5aa993b 523 {
8af8e3bc
PA
524 boffset = baseclass_offset (type, i, valaddr, offset, address, val);
525 }
526 if (ex.reason < 0 && ex.error == NOT_AVAILABLE_ERROR)
527 skip = -1;
528 else if (ex.reason < 0)
529 skip = 1;
530 else
531 {
532 skip = 0;
c906108c 533
8af8e3bc 534 if (BASETYPE_VIA_VIRTUAL (type, i))
c5aa993b 535 {
8af8e3bc
PA
536 /* The virtual base class pointer might have been
537 clobbered by the user program. Make sure that it
538 still points to a valid memory location. */
539
540 if ((boffset + offset) < 0
541 || (boffset + offset) >= TYPE_LENGTH (real_type))
542 {
543 /* FIXME (alloca): unsafe if baseclass is really
544 really large. */
545 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
546
547 if (target_read_memory (address + boffset, buf,
548 TYPE_LENGTH (baseclass)) != 0)
549 skip = 1;
550 base_val = value_from_contents_and_address (baseclass,
551 buf,
552 address + boffset);
553 thisoffset = 0;
554 boffset = 0;
555 thistype = baseclass;
556 base_valaddr = value_contents_for_printing_const (base_val);
557 }
558 else
559 {
560 base_valaddr = valaddr;
561 base_val = val;
562 }
c5aa993b
JM
563 }
564 else
de4127a3
PA
565 {
566 base_valaddr = valaddr;
567 base_val = val;
568 }
c906108c
SS
569 }
570
aff410f1 571 /* Now do the printing. */
79a45b7d 572 if (options->pretty)
c906108c
SS
573 {
574 fprintf_filtered (stream, "\n");
575 print_spaces_filtered (2 * recurse, stream);
576 }
577 fputs_filtered ("<", stream);
aff410f1
MS
578 /* Not sure what the best notation is in the case where there is
579 no baseclass name. */
c906108c
SS
580 fputs_filtered (basename ? basename : "", stream);
581 fputs_filtered ("> = ", stream);
582
8af8e3bc
PA
583 if (skip < 0)
584 val_print_unavailable (stream);
585 else if (skip > 0)
586 val_print_invalid_address (stream);
c906108c 587 else
a6bac58e
TT
588 {
589 int result = 0;
590
591 /* Attempt to run the Python pretty-printers on the
592 baseclass if possible. */
593 if (!options->raw)
594 result = apply_val_pretty_printer (baseclass, base_valaddr,
595 thisoffset + boffset,
de4127a3
PA
596 value_address (base_val),
597 stream, recurse, base_val,
598 options, current_language);
599
600
a6bac58e
TT
601
602 if (!result)
603 cp_print_value_fields (baseclass, thistype, base_valaddr,
de4127a3
PA
604 thisoffset + boffset,
605 value_address (base_val),
606 stream, recurse, base_val, options,
a6bac58e
TT
607 ((struct type **)
608 obstack_base (&dont_print_vb_obstack)),
609 0);
610 }
c906108c
SS
611 fputs_filtered (", ", stream);
612
613 flush_it:
614 ;
615 }
616
617 if (dont_print_vb == 0)
618 {
619 /* Free the space used to deal with the printing
c5aa993b 620 of this type from top level. */
c906108c
SS
621 obstack_free (&dont_print_vb_obstack, last_dont_print);
622 /* Reset watermark so that we can continue protecting
c5aa993b 623 ourselves from whatever we were protecting ourselves. */
c906108c
SS
624 dont_print_vb_obstack = tmp_obstack;
625 }
626}
627
aff410f1
MS
628/* Print value of a static member. To avoid infinite recursion when
629 printing a class that contains a static instance of the class, we
630 keep the addresses of all printed static member classes in an
631 obstack and refuse to print them more than once.
c906108c 632
79a45b7d 633 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
c906108c
SS
634 have the same meanings as in c_val_print. */
635
636static void
2c63a960 637cp_print_static_field (struct type *type,
6943961c 638 struct value *val,
2c63a960 639 struct ui_file *stream,
2c63a960 640 int recurse,
79a45b7d 641 const struct value_print_options *options)
c906108c 642{
79a45b7d 643 struct value_print_options opts;
ec31cde5 644
c906108c
SS
645 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
646 {
647 CORE_ADDR *first_dont_print;
42ae5230 648 CORE_ADDR addr;
c906108c
SS
649 int i;
650
651 first_dont_print
c5aa993b 652 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
99903ae3
CM
653 i = obstack_object_size (&dont_print_statmem_obstack)
654 / sizeof (CORE_ADDR);
c906108c
SS
655
656 while (--i >= 0)
657 {
42ae5230 658 if (value_address (val) == first_dont_print[i])
c906108c 659 {
2c63a960
JB
660 fputs_filtered ("<same as static member of an already"
661 " seen type>",
c906108c
SS
662 stream);
663 return;
664 }
665 }
666
42ae5230
TT
667 addr = value_address (val);
668 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
c906108c 669 sizeof (CORE_ADDR));
c906108c 670 CHECK_TYPEDEF (type);
edf3d5f3 671 cp_print_value_fields (type, value_enclosing_type (val),
0e03807e 672 value_contents_for_printing (val),
42ae5230 673 value_embedded_offset (val), addr,
aff410f1
MS
674 stream, recurse, val,
675 options, NULL, 1);
c906108c
SS
676 return;
677 }
79a45b7d 678
ec31cde5
CM
679 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
680 {
681 struct type **first_dont_print;
682 int i;
683 struct type *target_type = TYPE_TARGET_TYPE (type);
684
685 first_dont_print
686 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
687 i = obstack_object_size (&dont_print_stat_array_obstack)
1e9beacb 688 / sizeof (struct type *);
ec31cde5
CM
689
690 while (--i >= 0)
691 {
692 if (target_type == first_dont_print[i])
693 {
694 fputs_filtered ("<same as static member of an already"
695 " seen type>",
696 stream);
697 return;
698 }
699 }
700
aff410f1
MS
701 obstack_grow (&dont_print_stat_array_obstack,
702 (char *) &target_type,
ec31cde5
CM
703 sizeof (struct type *));
704 }
705
79a45b7d
TT
706 opts = *options;
707 opts.deref_ref = 0;
0e03807e 708 val_print (type, value_contents_for_printing (val),
aff410f1
MS
709 value_embedded_offset (val),
710 value_address (val),
711 stream, recurse, val,
712 &opts, current_language);
c906108c
SS
713}
714
0d5de010 715
aff410f1
MS
716/* Find the field in *DOMAIN, or its non-virtual base classes, with
717 bit offset OFFSET. Set *DOMAIN to the containing type and *FIELDNO
718 to the containing field number. If OFFSET is not exactly at the
719 start of some field, set *DOMAIN to NULL. */
0d5de010 720
2c0b251b 721static void
0d5de010
DJ
722cp_find_class_member (struct type **domain_p, int *fieldno,
723 LONGEST offset)
724{
725 struct type *domain;
726 unsigned int i;
727 unsigned len;
728
729 *domain_p = check_typedef (*domain_p);
730 domain = *domain_p;
731 len = TYPE_NFIELDS (domain);
732
733 for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
734 {
735 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
736
737 QUIT;
738 if (offset == bitpos)
739 {
740 *fieldno = i;
741 return;
742 }
743 }
744
745 for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
746 {
747 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
748 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (domain, i));
749
750 if (offset >= bitpos && offset < bitpos + bitsize)
751 {
752 *domain_p = TYPE_FIELD_TYPE (domain, i);
753 cp_find_class_member (domain_p, fieldno, offset - bitpos);
754 return;
755 }
756 }
757
758 *domain_p = NULL;
759}
760
c906108c 761void
ad4820ab 762cp_print_class_member (const gdb_byte *valaddr, struct type *type,
fba45db2 763 struct ui_file *stream, char *prefix)
c906108c 764{
e17a4113
UW
765 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
766
c906108c
SS
767 /* VAL is a byte offset into the structure type DOMAIN.
768 Find the name of the field for that offset and
769 print it. */
ad4820ab 770 struct type *domain = TYPE_DOMAIN_TYPE (type);
e17a4113 771 LONGEST val;
0d5de010 772 unsigned int fieldno;
c906108c 773
aff410f1
MS
774 val = extract_signed_integer (valaddr,
775 TYPE_LENGTH (type),
776 byte_order);
e17a4113 777
0d5de010
DJ
778 /* Pointers to data members are usually byte offsets into an object.
779 Because a data member can have offset zero, and a NULL pointer to
780 member must be distinct from any valid non-NULL pointer to
781 member, either the value is biased or the NULL value has a
782 special representation; both are permitted by ISO C++. HP aCC
783 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
784 and other compilers which use the Itanium ABI use -1 as the NULL
785 value. GDB only supports that last form; to add support for
786 another form, make this into a cp-abi hook. */
c906108c 787
0d5de010 788 if (val == -1)
c906108c 789 {
0d5de010
DJ
790 fprintf_filtered (stream, "NULL");
791 return;
c906108c 792 }
0d5de010
DJ
793
794 cp_find_class_member (&domain, &fieldno, val << 3);
795
796 if (domain != NULL)
c906108c
SS
797 {
798 char *name;
c5504eaf 799
306d9ac5 800 fputs_filtered (prefix, stream);
c906108c
SS
801 name = type_name_no_tag (domain);
802 if (name)
c5aa993b 803 fputs_filtered (name, stream);
c906108c
SS
804 else
805 c_type_print_base (domain, stream, 0, 0);
806 fprintf_filtered (stream, "::");
0d5de010 807 fputs_filtered (TYPE_FIELD_NAME (domain, fieldno), stream);
c906108c
SS
808 }
809 else
0d5de010 810 fprintf_filtered (stream, "%ld", (long) val);
c906108c
SS
811}
812
813
c906108c 814void
fba45db2 815_initialize_cp_valprint (void)
c906108c 816{
5bf193a2 817 add_setshow_boolean_cmd ("static-members", class_support,
79a45b7d 818 &user_print_options.static_field_print, _("\
5bf193a2
AC
819Set printing of C++ static members."), _("\
820Show printing of C++ static members."), NULL,
821 NULL,
920d2a44 822 show_static_field_print,
5bf193a2 823 &setprintlist, &showprintlist);
c906108c 824
79a45b7d
TT
825 add_setshow_boolean_cmd ("vtbl", class_support,
826 &user_print_options.vtblprint, _("\
5bf193a2
AC
827Set printing of C++ virtual function tables."), _("\
828Show printing of C++ virtual function tables."), NULL,
829 NULL,
920d2a44 830 show_vtblprint,
5bf193a2
AC
831 &setprintlist, &showprintlist);
832
79a45b7d
TT
833 add_setshow_boolean_cmd ("object", class_support,
834 &user_print_options.objectprint, _("\
5bf193a2
AC
835Set printing of object's derived type based on vtable info."), _("\
836Show printing of object's derived type based on vtable info."), NULL,
837 NULL,
920d2a44 838 show_objectprint,
5bf193a2 839 &setprintlist, &showprintlist);
c906108c 840
aff410f1
MS
841 obstack_begin (&dont_print_stat_array_obstack,
842 32 * sizeof (struct type *));
843 obstack_begin (&dont_print_statmem_obstack,
844 32 * sizeof (CORE_ADDR));
845 obstack_begin (&dont_print_vb_obstack,
846 32 * sizeof (struct type *));
c906108c 847}
This page took 1.111104 seconds and 4 git commands to generate.