windows-nat: Don't change current_event.dwThreadId in handle_output_debug_string()
[deliverable/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. */
7cf99fb1 91EXPORTED_CONST 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 struct value *v = NULL;
317
492d29ea 318 TRY
ee86786c
TT
319 {
320 v = value_static_field (type, i);
321 }
322
492d29ea
PA
323 CATCH (ex, RETURN_MASK_ERROR)
324 {
325 fprintf_filtered (stream,
326 _("<error reading variable: %s>"),
327 ex.message);
328 }
329 END_CATCH
330
686d4def
PA
331 cp_print_static_field (TYPE_FIELD_TYPE (type, i),
332 v, stream, recurse + 1,
333 options);
c906108c 334 }
7977e5d2 335 else if (i == vptr_fieldno && type == vptr_basetype)
410528f0 336 {
a72c8f6a
JK
337 int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
338 struct type *i_type = TYPE_FIELD_TYPE (type, i);
339
340 if (valprint_check_validity (stream, i_type, i_offset, val))
341 {
342 CORE_ADDR addr;
343
344 addr = extract_typed_address (valaddr + i_offset, i_type);
edf0c1b7
TT
345 print_function_pointer_address (options,
346 get_type_arch (type),
347 addr, stream);
a72c8f6a 348 }
410528f0 349 }
c906108c
SS
350 else
351 {
79a45b7d 352 struct value_print_options opts = *options;
c5504eaf 353
79a45b7d 354 opts.deref_ref = 0;
c5aa993b 355 val_print (TYPE_FIELD_TYPE (type, i),
aff410f1
MS
356 valaddr,
357 offset + TYPE_FIELD_BITPOS (type, i) / 8,
edf3d5f3 358 address,
0e03807e 359 stream, recurse + 1, val, &opts,
d8ca156b 360 current_language);
c906108c
SS
361 }
362 }
363 annotate_field_end ();
364 }
365
366 if (dont_print_statmem == 0)
367 {
241fd515 368 size_t obstack_final_size =
0b66f317
CM
369 obstack_object_size (&dont_print_statmem_obstack);
370
aff410f1
MS
371 if (obstack_final_size > statmem_obstack_initial_size)
372 {
373 /* In effect, a pop of the printed-statics stack. */
0b66f317 374
aff410f1 375 void *free_to_ptr =
1ae1b8cc 376 (char *) obstack_next_free (&dont_print_statmem_obstack) -
aff410f1 377 (obstack_final_size - statmem_obstack_initial_size);
0b66f317 378
aff410f1
MS
379 obstack_free (&dont_print_statmem_obstack,
380 free_to_ptr);
381 }
ec31cde5
CM
382
383 if (last_set_recurse != recurse)
384 {
241fd515 385 size_t obstack_final_size =
f56dcb88
CM
386 obstack_object_size (&dont_print_stat_array_obstack);
387
388 if (obstack_final_size > stat_array_obstack_initial_size)
389 {
390 void *free_to_ptr =
1ae1b8cc 391 (char *) obstack_next_free (&dont_print_stat_array_obstack)
aff410f1
MS
392 - (obstack_final_size
393 - stat_array_obstack_initial_size);
f56dcb88
CM
394
395 obstack_free (&dont_print_stat_array_obstack,
396 free_to_ptr);
397 }
ec31cde5
CM
398 last_set_recurse = -1;
399 }
c906108c
SS
400 }
401
2a998fc0 402 if (options->prettyformat)
c906108c
SS
403 {
404 fprintf_filtered (stream, "\n");
405 print_spaces_filtered (2 * recurse, stream);
406 }
c5aa993b 407 } /* if there are data fields */
c5aa993b 408
c906108c
SS
409 fprintf_filtered (stream, "}");
410}
411
edf3d5f3
TT
412/* Like cp_print_value_fields, but find the runtime type of the object
413 and pass it as the `real_type' argument to cp_print_value_fields.
414 This function is a hack to work around the fact that
415 common_val_print passes the embedded offset to val_print, but not
416 the enclosing type. */
417
418void
419cp_print_value_fields_rtti (struct type *type,
420 const gdb_byte *valaddr, int offset,
421 CORE_ADDR address,
422 struct ui_file *stream, int recurse,
0e03807e 423 const struct value *val,
edf3d5f3 424 const struct value_print_options *options,
c5504eaf
MS
425 struct type **dont_print_vb,
426 int dont_print_statmem)
edf3d5f3 427{
0e03807e
TT
428 struct type *real_type = NULL;
429
430 /* We require all bits to be valid in order to attempt a
431 conversion. */
9a0dc9e3
PA
432 if (!value_bits_any_optimized_out (val,
433 TARGET_CHAR_BIT * offset,
434 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
0e03807e
TT
435 {
436 struct value *value;
437 int full, top, using_enc;
438
439 /* Ugh, we have to convert back to a value here. */
440 value = value_from_contents_and_address (type, valaddr + offset,
441 address + offset);
9f1f738a 442 type = value_type (value);
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;
7556d4a4 487 int skip = 0;
c906108c 488 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
0d5cff50 489 const char *basename = TYPE_NAME (baseclass);
8af8e3bc
PA
490 const gdb_byte *base_valaddr = NULL;
491 const struct value *base_val = NULL;
c906108c
SS
492
493 if (BASETYPE_VIA_VIRTUAL (type, i))
494 {
495 struct type **first_dont_print
2c63a960 496 = (struct type **) obstack_base (&dont_print_vb_obstack);
c906108c 497
aff410f1
MS
498 int j = (struct type **)
499 obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
c906108c
SS
500
501 while (--j >= 0)
502 if (baseclass == first_dont_print[j])
503 goto flush_it;
504
505 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
506 }
507
b9d652ac
DJ
508 thisoffset = offset;
509 thistype = real_type;
086280be 510
492d29ea 511 TRY
c5aa993b 512 {
8af8e3bc
PA
513 boffset = baseclass_offset (type, i, valaddr, offset, address, val);
514 }
492d29ea 515 CATCH (ex, RETURN_MASK_ERROR)
7556d4a4
PA
516 {
517 if (ex.error == NOT_AVAILABLE_ERROR)
518 skip = -1;
519 else
520 skip = 1;
521 }
492d29ea 522 END_CATCH
c906108c 523
7556d4a4
PA
524 if (skip == 0)
525 {
8af8e3bc 526 if (BASETYPE_VIA_VIRTUAL (type, i))
c5aa993b 527 {
8af8e3bc
PA
528 /* The virtual base class pointer might have been
529 clobbered by the user program. Make sure that it
530 still points to a valid memory location. */
531
532 if ((boffset + offset) < 0
533 || (boffset + offset) >= TYPE_LENGTH (real_type))
534 {
d5161074
SP
535 gdb_byte *buf;
536 struct cleanup *back_to;
537
538 buf = xmalloc (TYPE_LENGTH (baseclass));
539 back_to = make_cleanup (xfree, buf);
8af8e3bc
PA
540
541 if (target_read_memory (address + boffset, buf,
542 TYPE_LENGTH (baseclass)) != 0)
543 skip = 1;
544 base_val = value_from_contents_and_address (baseclass,
545 buf,
546 address + boffset);
9f1f738a 547 baseclass = value_type (base_val);
8af8e3bc
PA
548 thisoffset = 0;
549 boffset = 0;
550 thistype = baseclass;
551 base_valaddr = value_contents_for_printing_const (base_val);
d5161074 552 do_cleanups (back_to);
8af8e3bc
PA
553 }
554 else
555 {
556 base_valaddr = valaddr;
557 base_val = val;
558 }
c5aa993b
JM
559 }
560 else
de4127a3
PA
561 {
562 base_valaddr = valaddr;
563 base_val = val;
564 }
c906108c
SS
565 }
566
aff410f1 567 /* Now do the printing. */
2a998fc0 568 if (options->prettyformat)
c906108c
SS
569 {
570 fprintf_filtered (stream, "\n");
571 print_spaces_filtered (2 * recurse, stream);
572 }
573 fputs_filtered ("<", stream);
aff410f1
MS
574 /* Not sure what the best notation is in the case where there is
575 no baseclass name. */
c906108c
SS
576 fputs_filtered (basename ? basename : "", stream);
577 fputs_filtered ("> = ", stream);
578
8af8e3bc
PA
579 if (skip < 0)
580 val_print_unavailable (stream);
581 else if (skip > 0)
582 val_print_invalid_address (stream);
c906108c 583 else
a6bac58e
TT
584 {
585 int result = 0;
586
6dddc817 587 /* Attempt to run an extension language pretty-printer on the
a6bac58e
TT
588 baseclass if possible. */
589 if (!options->raw)
6dddc817
DE
590 result
591 = apply_ext_lang_val_pretty_printer (baseclass, base_valaddr,
592 thisoffset + boffset,
593 value_address (base_val),
594 stream, recurse,
595 base_val, options,
596 current_language);
de4127a3 597
a6bac58e
TT
598 if (!result)
599 cp_print_value_fields (baseclass, thistype, base_valaddr,
de4127a3
PA
600 thisoffset + boffset,
601 value_address (base_val),
602 stream, recurse, base_val, options,
a6bac58e
TT
603 ((struct type **)
604 obstack_base (&dont_print_vb_obstack)),
605 0);
606 }
c906108c
SS
607 fputs_filtered (", ", stream);
608
609 flush_it:
610 ;
611 }
612
613 if (dont_print_vb == 0)
614 {
615 /* Free the space used to deal with the printing
c5aa993b 616 of this type from top level. */
c906108c
SS
617 obstack_free (&dont_print_vb_obstack, last_dont_print);
618 /* Reset watermark so that we can continue protecting
c5aa993b 619 ourselves from whatever we were protecting ourselves. */
c906108c
SS
620 dont_print_vb_obstack = tmp_obstack;
621 }
622}
623
aff410f1
MS
624/* Print value of a static member. To avoid infinite recursion when
625 printing a class that contains a static instance of the class, we
626 keep the addresses of all printed static member classes in an
627 obstack and refuse to print them more than once.
c906108c 628
79a45b7d 629 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
c906108c
SS
630 have the same meanings as in c_val_print. */
631
632static void
2c63a960 633cp_print_static_field (struct type *type,
6943961c 634 struct value *val,
2c63a960 635 struct ui_file *stream,
2c63a960 636 int recurse,
79a45b7d 637 const struct value_print_options *options)
c906108c 638{
79a45b7d 639 struct value_print_options opts;
686d4def
PA
640
641 if (value_entirely_optimized_out (val))
642 {
643 val_print_optimized_out (val, stream);
644 return;
645 }
646
c906108c
SS
647 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
648 {
649 CORE_ADDR *first_dont_print;
42ae5230 650 CORE_ADDR addr;
c906108c
SS
651 int i;
652
653 first_dont_print
c5aa993b 654 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
99903ae3
CM
655 i = obstack_object_size (&dont_print_statmem_obstack)
656 / sizeof (CORE_ADDR);
c906108c
SS
657
658 while (--i >= 0)
659 {
42ae5230 660 if (value_address (val) == first_dont_print[i])
c906108c 661 {
2c63a960
JB
662 fputs_filtered ("<same as static member of an already"
663 " seen type>",
c906108c
SS
664 stream);
665 return;
666 }
667 }
668
42ae5230
TT
669 addr = value_address (val);
670 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
c906108c 671 sizeof (CORE_ADDR));
c906108c 672 CHECK_TYPEDEF (type);
edf3d5f3 673 cp_print_value_fields (type, value_enclosing_type (val),
0e03807e 674 value_contents_for_printing (val),
42ae5230 675 value_embedded_offset (val), addr,
aff410f1
MS
676 stream, recurse, val,
677 options, NULL, 1);
c906108c
SS
678 return;
679 }
79a45b7d 680
ec31cde5
CM
681 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
682 {
683 struct type **first_dont_print;
684 int i;
685 struct type *target_type = TYPE_TARGET_TYPE (type);
686
687 first_dont_print
688 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
689 i = obstack_object_size (&dont_print_stat_array_obstack)
1e9beacb 690 / sizeof (struct type *);
ec31cde5
CM
691
692 while (--i >= 0)
693 {
694 if (target_type == first_dont_print[i])
695 {
696 fputs_filtered ("<same as static member of an already"
697 " seen type>",
698 stream);
699 return;
700 }
701 }
702
aff410f1
MS
703 obstack_grow (&dont_print_stat_array_obstack,
704 (char *) &target_type,
ec31cde5
CM
705 sizeof (struct type *));
706 }
707
79a45b7d
TT
708 opts = *options;
709 opts.deref_ref = 0;
0e03807e 710 val_print (type, value_contents_for_printing (val),
aff410f1
MS
711 value_embedded_offset (val),
712 value_address (val),
713 stream, recurse, val,
714 &opts, current_language);
c906108c
SS
715}
716
09e2d7c7
DE
717/* Find the field in *SELF, or its non-virtual base classes, with
718 bit offset OFFSET. Set *SELF to the containing type and *FIELDNO
aff410f1 719 to the containing field number. If OFFSET is not exactly at the
09e2d7c7 720 start of some field, set *SELF to NULL. */
0d5de010 721
2c0b251b 722static void
09e2d7c7 723cp_find_class_member (struct type **self_p, int *fieldno,
0d5de010
DJ
724 LONGEST offset)
725{
09e2d7c7 726 struct type *self;
0d5de010
DJ
727 unsigned int i;
728 unsigned len;
729
09e2d7c7
DE
730 *self_p = check_typedef (*self_p);
731 self = *self_p;
732 len = TYPE_NFIELDS (self);
0d5de010 733
09e2d7c7 734 for (i = TYPE_N_BASECLASSES (self); i < len; i++)
0d5de010 735 {
09e2d7c7 736 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
0d5de010
DJ
737
738 QUIT;
739 if (offset == bitpos)
740 {
741 *fieldno = i;
742 return;
743 }
744 }
745
09e2d7c7 746 for (i = 0; i < TYPE_N_BASECLASSES (self); i++)
0d5de010 747 {
09e2d7c7
DE
748 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
749 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i));
0d5de010
DJ
750
751 if (offset >= bitpos && offset < bitpos + bitsize)
752 {
09e2d7c7
DE
753 *self_p = TYPE_FIELD_TYPE (self, i);
754 cp_find_class_member (self_p, fieldno, offset - bitpos);
0d5de010
DJ
755 return;
756 }
757 }
758
09e2d7c7 759 *self_p = NULL;
0d5de010
DJ
760}
761
c906108c 762void
ad4820ab 763cp_print_class_member (const gdb_byte *valaddr, struct type *type,
fba45db2 764 struct ui_file *stream, char *prefix)
c906108c 765{
e17a4113
UW
766 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
767
09e2d7c7 768 /* VAL is a byte offset into the structure type SELF_TYPE.
c906108c
SS
769 Find the name of the field for that offset and
770 print it. */
09e2d7c7 771 struct type *self_type = TYPE_SELF_TYPE (type);
e17a4113 772 LONGEST val;
9f8afa72 773 int fieldno;
c906108c 774
aff410f1
MS
775 val = extract_signed_integer (valaddr,
776 TYPE_LENGTH (type),
777 byte_order);
e17a4113 778
0d5de010
DJ
779 /* Pointers to data members are usually byte offsets into an object.
780 Because a data member can have offset zero, and a NULL pointer to
781 member must be distinct from any valid non-NULL pointer to
782 member, either the value is biased or the NULL value has a
783 special representation; both are permitted by ISO C++. HP aCC
784 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
785 and other compilers which use the Itanium ABI use -1 as the NULL
786 value. GDB only supports that last form; to add support for
787 another form, make this into a cp-abi hook. */
c906108c 788
0d5de010 789 if (val == -1)
c906108c 790 {
0d5de010
DJ
791 fprintf_filtered (stream, "NULL");
792 return;
c906108c 793 }
0d5de010 794
09e2d7c7 795 cp_find_class_member (&self_type, &fieldno, val << 3);
0d5de010 796
09e2d7c7 797 if (self_type != NULL)
c906108c 798 {
0d5cff50 799 const char *name;
c5504eaf 800
306d9ac5 801 fputs_filtered (prefix, stream);
09e2d7c7 802 name = type_name_no_tag (self_type);
c906108c 803 if (name)
c5aa993b 804 fputs_filtered (name, stream);
c906108c 805 else
09e2d7c7 806 c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
c906108c 807 fprintf_filtered (stream, "::");
09e2d7c7 808 fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream);
c906108c
SS
809 }
810 else
0d5de010 811 fprintf_filtered (stream, "%ld", (long) val);
c906108c
SS
812}
813
814
c906108c 815void
fba45db2 816_initialize_cp_valprint (void)
c906108c 817{
5bf193a2 818 add_setshow_boolean_cmd ("static-members", class_support,
79a45b7d 819 &user_print_options.static_field_print, _("\
5bf193a2
AC
820Set printing of C++ static members."), _("\
821Show printing of C++ static members."), NULL,
822 NULL,
920d2a44 823 show_static_field_print,
5bf193a2 824 &setprintlist, &showprintlist);
c906108c 825
79a45b7d
TT
826 add_setshow_boolean_cmd ("vtbl", class_support,
827 &user_print_options.vtblprint, _("\
5bf193a2
AC
828Set printing of C++ virtual function tables."), _("\
829Show printing of C++ virtual function tables."), NULL,
830 NULL,
920d2a44 831 show_vtblprint,
5bf193a2
AC
832 &setprintlist, &showprintlist);
833
79a45b7d
TT
834 add_setshow_boolean_cmd ("object", class_support,
835 &user_print_options.objectprint, _("\
5bf193a2
AC
836Set printing of object's derived type based on vtable info."), _("\
837Show printing of object's derived type based on vtable info."), NULL,
838 NULL,
920d2a44 839 show_objectprint,
5bf193a2 840 &setprintlist, &showprintlist);
c906108c 841
aff410f1
MS
842 obstack_begin (&dont_print_stat_array_obstack,
843 32 * sizeof (struct type *));
844 obstack_begin (&dont_print_statmem_obstack,
845 32 * sizeof (CORE_ADDR));
846 obstack_begin (&dont_print_vb_obstack,
847 32 * sizeof (struct type *));
c906108c 848}
This page took 1.653018 seconds and 4 git commands to generate.