2011-02-24 Michael Snyder <msnyder@vmware.com>
[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 {
6943961c 343 struct value *v = value_static_field (type, i);
c5504eaf 344
c906108c 345 if (v == NULL)
585fdaa1 346 val_print_optimized_out (stream);
c906108c 347 else
aff410f1
MS
348 cp_print_static_field (TYPE_FIELD_TYPE (type, i),
349 v, stream, recurse + 1,
350 options);
c906108c
SS
351 }
352 else
353 {
79a45b7d 354 struct value_print_options opts = *options;
c5504eaf 355
79a45b7d 356 opts.deref_ref = 0;
c5aa993b 357 val_print (TYPE_FIELD_TYPE (type, i),
aff410f1
MS
358 valaddr,
359 offset + TYPE_FIELD_BITPOS (type, i) / 8,
edf3d5f3 360 address,
0e03807e 361 stream, recurse + 1, val, &opts,
d8ca156b 362 current_language);
c906108c
SS
363 }
364 }
365 annotate_field_end ();
366 }
367
368 if (dont_print_statmem == 0)
369 {
0b66f317
CM
370 int obstack_final_size =
371 obstack_object_size (&dont_print_statmem_obstack);
372
aff410f1
MS
373 if (obstack_final_size > statmem_obstack_initial_size)
374 {
375 /* In effect, a pop of the printed-statics stack. */
0b66f317 376
aff410f1
MS
377 void *free_to_ptr =
378 obstack_next_free (&dont_print_statmem_obstack) -
379 (obstack_final_size - statmem_obstack_initial_size);
0b66f317 380
aff410f1
MS
381 obstack_free (&dont_print_statmem_obstack,
382 free_to_ptr);
383 }
ec31cde5
CM
384
385 if (last_set_recurse != recurse)
386 {
f56dcb88
CM
387 int obstack_final_size =
388 obstack_object_size (&dont_print_stat_array_obstack);
389
390 if (obstack_final_size > stat_array_obstack_initial_size)
391 {
392 void *free_to_ptr =
aff410f1
MS
393 obstack_next_free (&dont_print_stat_array_obstack)
394 - (obstack_final_size
395 - stat_array_obstack_initial_size);
f56dcb88
CM
396
397 obstack_free (&dont_print_stat_array_obstack,
398 free_to_ptr);
399 }
ec31cde5
CM
400 last_set_recurse = -1;
401 }
c906108c
SS
402 }
403
79a45b7d 404 if (options->pretty)
c906108c
SS
405 {
406 fprintf_filtered (stream, "\n");
407 print_spaces_filtered (2 * recurse, stream);
408 }
c5aa993b 409 } /* if there are data fields */
c5aa993b 410
c906108c
SS
411 fprintf_filtered (stream, "}");
412}
413
edf3d5f3
TT
414/* Like cp_print_value_fields, but find the runtime type of the object
415 and pass it as the `real_type' argument to cp_print_value_fields.
416 This function is a hack to work around the fact that
417 common_val_print passes the embedded offset to val_print, but not
418 the enclosing type. */
419
420void
421cp_print_value_fields_rtti (struct type *type,
422 const gdb_byte *valaddr, int offset,
423 CORE_ADDR address,
424 struct ui_file *stream, int recurse,
0e03807e 425 const struct value *val,
edf3d5f3 426 const struct value_print_options *options,
c5504eaf
MS
427 struct type **dont_print_vb,
428 int dont_print_statmem)
edf3d5f3 429{
0e03807e
TT
430 struct type *real_type = NULL;
431
432 /* We require all bits to be valid in order to attempt a
433 conversion. */
434 if (value_bits_valid (val, TARGET_CHAR_BIT * offset,
435 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
436 {
437 struct value *value;
438 int full, top, using_enc;
439
440 /* Ugh, we have to convert back to a value here. */
441 value = value_from_contents_and_address (type, valaddr + offset,
442 address + offset);
aff410f1
MS
443 /* We don't actually care about most of the result here -- just
444 the type. We already have the correct offset, due to how
445 val_print was initially called. */
0e03807e
TT
446 real_type = value_rtti_type (value, &full, &top, &using_enc);
447 }
448
edf3d5f3
TT
449 if (!real_type)
450 real_type = type;
451
452 cp_print_value_fields (type, real_type, valaddr, offset,
0e03807e 453 address, stream, recurse, val, options,
edf3d5f3
TT
454 dont_print_vb, dont_print_statmem);
455}
456
aff410f1
MS
457/* Special val_print routine to avoid printing multiple copies of
458 virtual baseclasses. */
c906108c
SS
459
460static void
a2bd3dcd 461cp_print_value (struct type *type, struct type *real_type,
aff410f1
MS
462 const gdb_byte *valaddr, int offset,
463 CORE_ADDR address, struct ui_file *stream,
464 int recurse, const struct value *val,
79a45b7d
TT
465 const struct value_print_options *options,
466 struct type **dont_print_vb)
c906108c 467{
c906108c 468 struct type **last_dont_print
2c63a960 469 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
c1b6e682 470 struct obstack tmp_obstack = dont_print_vb_obstack;
c906108c 471 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
b9d652ac
DJ
472 int thisoffset;
473 struct type *thistype;
c906108c
SS
474
475 if (dont_print_vb == 0)
476 {
aff410f1
MS
477 /* If we're at top level, carve out a completely fresh chunk of
478 the obstack and use that until this particular invocation
479 returns. */
c906108c
SS
480 /* Bump up the high-water mark. Now alpha is omega. */
481 obstack_finish (&dont_print_vb_obstack);
482 }
483
484 for (i = 0; i < n_baseclasses; i++)
485 {
8af8e3bc 486 int boffset = 0;
c906108c
SS
487 int skip;
488 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
489 char *basename = TYPE_NAME (baseclass);
8af8e3bc
PA
490 const gdb_byte *base_valaddr = NULL;
491 const struct value *base_val = NULL;
492 volatile struct gdb_exception ex;
c906108c
SS
493
494 if (BASETYPE_VIA_VIRTUAL (type, i))
495 {
496 struct type **first_dont_print
2c63a960 497 = (struct type **) obstack_base (&dont_print_vb_obstack);
c906108c 498
aff410f1
MS
499 int j = (struct type **)
500 obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
c906108c
SS
501
502 while (--j >= 0)
503 if (baseclass == first_dont_print[j])
504 goto flush_it;
505
506 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
507 }
508
b9d652ac
DJ
509 thisoffset = offset;
510 thistype = real_type;
086280be 511
8af8e3bc 512 TRY_CATCH (ex, RETURN_MASK_ERROR)
c5aa993b 513 {
8af8e3bc
PA
514 boffset = baseclass_offset (type, i, valaddr, offset, address, val);
515 }
516 if (ex.reason < 0 && ex.error == NOT_AVAILABLE_ERROR)
517 skip = -1;
518 else if (ex.reason < 0)
519 skip = 1;
520 else
521 {
522 skip = 0;
c906108c 523
8af8e3bc 524 if (BASETYPE_VIA_VIRTUAL (type, i))
c5aa993b 525 {
8af8e3bc
PA
526 /* The virtual base class pointer might have been
527 clobbered by the user program. Make sure that it
528 still points to a valid memory location. */
529
530 if ((boffset + offset) < 0
531 || (boffset + offset) >= TYPE_LENGTH (real_type))
532 {
533 /* FIXME (alloca): unsafe if baseclass is really
534 really large. */
535 gdb_byte *buf = alloca (TYPE_LENGTH (baseclass));
536
537 if (target_read_memory (address + boffset, buf,
538 TYPE_LENGTH (baseclass)) != 0)
539 skip = 1;
540 base_val = value_from_contents_and_address (baseclass,
541 buf,
542 address + boffset);
543 thisoffset = 0;
544 boffset = 0;
545 thistype = baseclass;
546 base_valaddr = value_contents_for_printing_const (base_val);
547 }
548 else
549 {
550 base_valaddr = valaddr;
551 base_val = val;
552 }
c5aa993b
JM
553 }
554 else
de4127a3
PA
555 {
556 base_valaddr = valaddr;
557 base_val = val;
558 }
c906108c
SS
559 }
560
aff410f1 561 /* Now do the printing. */
79a45b7d 562 if (options->pretty)
c906108c
SS
563 {
564 fprintf_filtered (stream, "\n");
565 print_spaces_filtered (2 * recurse, stream);
566 }
567 fputs_filtered ("<", stream);
aff410f1
MS
568 /* Not sure what the best notation is in the case where there is
569 no baseclass name. */
c906108c
SS
570 fputs_filtered (basename ? basename : "", stream);
571 fputs_filtered ("> = ", stream);
572
8af8e3bc
PA
573 if (skip < 0)
574 val_print_unavailable (stream);
575 else if (skip > 0)
576 val_print_invalid_address (stream);
c906108c 577 else
a6bac58e
TT
578 {
579 int result = 0;
580
581 /* Attempt to run the Python pretty-printers on the
582 baseclass if possible. */
583 if (!options->raw)
584 result = apply_val_pretty_printer (baseclass, base_valaddr,
585 thisoffset + boffset,
de4127a3
PA
586 value_address (base_val),
587 stream, recurse, base_val,
588 options, current_language);
589
590
a6bac58e
TT
591
592 if (!result)
593 cp_print_value_fields (baseclass, thistype, base_valaddr,
de4127a3
PA
594 thisoffset + boffset,
595 value_address (base_val),
596 stream, recurse, base_val, options,
a6bac58e
TT
597 ((struct type **)
598 obstack_base (&dont_print_vb_obstack)),
599 0);
600 }
c906108c
SS
601 fputs_filtered (", ", stream);
602
603 flush_it:
604 ;
605 }
606
607 if (dont_print_vb == 0)
608 {
609 /* Free the space used to deal with the printing
c5aa993b 610 of this type from top level. */
c906108c
SS
611 obstack_free (&dont_print_vb_obstack, last_dont_print);
612 /* Reset watermark so that we can continue protecting
c5aa993b 613 ourselves from whatever we were protecting ourselves. */
c906108c
SS
614 dont_print_vb_obstack = tmp_obstack;
615 }
616}
617
aff410f1
MS
618/* Print value of a static member. To avoid infinite recursion when
619 printing a class that contains a static instance of the class, we
620 keep the addresses of all printed static member classes in an
621 obstack and refuse to print them more than once.
c906108c 622
79a45b7d 623 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
c906108c
SS
624 have the same meanings as in c_val_print. */
625
626static void
2c63a960 627cp_print_static_field (struct type *type,
6943961c 628 struct value *val,
2c63a960 629 struct ui_file *stream,
2c63a960 630 int recurse,
79a45b7d 631 const struct value_print_options *options)
c906108c 632{
79a45b7d 633 struct value_print_options opts;
ec31cde5 634
c906108c
SS
635 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
636 {
637 CORE_ADDR *first_dont_print;
42ae5230 638 CORE_ADDR addr;
c906108c
SS
639 int i;
640
641 first_dont_print
c5aa993b 642 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
99903ae3
CM
643 i = obstack_object_size (&dont_print_statmem_obstack)
644 / sizeof (CORE_ADDR);
c906108c
SS
645
646 while (--i >= 0)
647 {
42ae5230 648 if (value_address (val) == first_dont_print[i])
c906108c 649 {
2c63a960
JB
650 fputs_filtered ("<same as static member of an already"
651 " seen type>",
c906108c
SS
652 stream);
653 return;
654 }
655 }
656
42ae5230
TT
657 addr = value_address (val);
658 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
c906108c 659 sizeof (CORE_ADDR));
c906108c 660 CHECK_TYPEDEF (type);
edf3d5f3 661 cp_print_value_fields (type, value_enclosing_type (val),
0e03807e 662 value_contents_for_printing (val),
42ae5230 663 value_embedded_offset (val), addr,
aff410f1
MS
664 stream, recurse, val,
665 options, NULL, 1);
c906108c
SS
666 return;
667 }
79a45b7d 668
ec31cde5
CM
669 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
670 {
671 struct type **first_dont_print;
672 int i;
673 struct type *target_type = TYPE_TARGET_TYPE (type);
674
675 first_dont_print
676 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
677 i = obstack_object_size (&dont_print_stat_array_obstack)
1e9beacb 678 / sizeof (struct type *);
ec31cde5
CM
679
680 while (--i >= 0)
681 {
682 if (target_type == first_dont_print[i])
683 {
684 fputs_filtered ("<same as static member of an already"
685 " seen type>",
686 stream);
687 return;
688 }
689 }
690
aff410f1
MS
691 obstack_grow (&dont_print_stat_array_obstack,
692 (char *) &target_type,
ec31cde5
CM
693 sizeof (struct type *));
694 }
695
79a45b7d
TT
696 opts = *options;
697 opts.deref_ref = 0;
0e03807e 698 val_print (type, value_contents_for_printing (val),
aff410f1
MS
699 value_embedded_offset (val),
700 value_address (val),
701 stream, recurse, val,
702 &opts, current_language);
c906108c
SS
703}
704
0d5de010 705
aff410f1
MS
706/* Find the field in *DOMAIN, or its non-virtual base classes, with
707 bit offset OFFSET. Set *DOMAIN to the containing type and *FIELDNO
708 to the containing field number. If OFFSET is not exactly at the
709 start of some field, set *DOMAIN to NULL. */
0d5de010 710
2c0b251b 711static void
0d5de010
DJ
712cp_find_class_member (struct type **domain_p, int *fieldno,
713 LONGEST offset)
714{
715 struct type *domain;
716 unsigned int i;
717 unsigned len;
718
719 *domain_p = check_typedef (*domain_p);
720 domain = *domain_p;
721 len = TYPE_NFIELDS (domain);
722
723 for (i = TYPE_N_BASECLASSES (domain); i < len; i++)
724 {
725 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
726
727 QUIT;
728 if (offset == bitpos)
729 {
730 *fieldno = i;
731 return;
732 }
733 }
734
735 for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
736 {
737 LONGEST bitpos = TYPE_FIELD_BITPOS (domain, i);
738 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (domain, i));
739
740 if (offset >= bitpos && offset < bitpos + bitsize)
741 {
742 *domain_p = TYPE_FIELD_TYPE (domain, i);
743 cp_find_class_member (domain_p, fieldno, offset - bitpos);
744 return;
745 }
746 }
747
748 *domain_p = NULL;
749}
750
c906108c 751void
ad4820ab 752cp_print_class_member (const gdb_byte *valaddr, struct type *type,
fba45db2 753 struct ui_file *stream, char *prefix)
c906108c 754{
e17a4113
UW
755 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
756
c906108c
SS
757 /* VAL is a byte offset into the structure type DOMAIN.
758 Find the name of the field for that offset and
759 print it. */
ad4820ab 760 struct type *domain = TYPE_DOMAIN_TYPE (type);
e17a4113 761 LONGEST val;
0d5de010 762 unsigned int fieldno;
c906108c 763
aff410f1
MS
764 val = extract_signed_integer (valaddr,
765 TYPE_LENGTH (type),
766 byte_order);
e17a4113 767
0d5de010
DJ
768 /* Pointers to data members are usually byte offsets into an object.
769 Because a data member can have offset zero, and a NULL pointer to
770 member must be distinct from any valid non-NULL pointer to
771 member, either the value is biased or the NULL value has a
772 special representation; both are permitted by ISO C++. HP aCC
773 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
774 and other compilers which use the Itanium ABI use -1 as the NULL
775 value. GDB only supports that last form; to add support for
776 another form, make this into a cp-abi hook. */
c906108c 777
0d5de010 778 if (val == -1)
c906108c 779 {
0d5de010
DJ
780 fprintf_filtered (stream, "NULL");
781 return;
c906108c 782 }
0d5de010
DJ
783
784 cp_find_class_member (&domain, &fieldno, val << 3);
785
786 if (domain != NULL)
c906108c
SS
787 {
788 char *name;
c5504eaf 789
306d9ac5 790 fputs_filtered (prefix, stream);
c906108c
SS
791 name = type_name_no_tag (domain);
792 if (name)
c5aa993b 793 fputs_filtered (name, stream);
c906108c
SS
794 else
795 c_type_print_base (domain, stream, 0, 0);
796 fprintf_filtered (stream, "::");
0d5de010 797 fputs_filtered (TYPE_FIELD_NAME (domain, fieldno), stream);
c906108c
SS
798 }
799 else
0d5de010 800 fprintf_filtered (stream, "%ld", (long) val);
c906108c
SS
801}
802
803
c906108c 804void
fba45db2 805_initialize_cp_valprint (void)
c906108c 806{
5bf193a2 807 add_setshow_boolean_cmd ("static-members", class_support,
79a45b7d 808 &user_print_options.static_field_print, _("\
5bf193a2
AC
809Set printing of C++ static members."), _("\
810Show printing of C++ static members."), NULL,
811 NULL,
920d2a44 812 show_static_field_print,
5bf193a2 813 &setprintlist, &showprintlist);
c906108c 814
79a45b7d
TT
815 add_setshow_boolean_cmd ("vtbl", class_support,
816 &user_print_options.vtblprint, _("\
5bf193a2
AC
817Set printing of C++ virtual function tables."), _("\
818Show printing of C++ virtual function tables."), NULL,
819 NULL,
920d2a44 820 show_vtblprint,
5bf193a2
AC
821 &setprintlist, &showprintlist);
822
79a45b7d
TT
823 add_setshow_boolean_cmd ("object", class_support,
824 &user_print_options.objectprint, _("\
5bf193a2
AC
825Set printing of object's derived type based on vtable info."), _("\
826Show printing of object's derived type based on vtable info."), NULL,
827 NULL,
920d2a44 828 show_objectprint,
5bf193a2 829 &setprintlist, &showprintlist);
c906108c 830
aff410f1
MS
831 obstack_begin (&dont_print_stat_array_obstack,
832 32 * sizeof (struct type *));
833 obstack_begin (&dont_print_statmem_obstack,
834 32 * sizeof (CORE_ADDR));
835 obstack_begin (&dont_print_vb_obstack,
836 32 * sizeof (struct type *));
c906108c 837}
This page took 0.75701 seconds and 4 git commands to generate.