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