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