-Wwrite-strings: More Solaris
[deliverable/binutils-gdb.git] / gdb / cp-valprint.c
CommitLineData
c906108c 1/* Support for printing C++ values for GDB, the GNU debugger.
a2bd3dcd 2
61baf725 3 Copyright (C) 1986-2017 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 82static void cp_print_value (struct type *, struct type *,
65408fa6 83 LONGEST,
aff410f1 84 CORE_ADDR, struct ui_file *,
e8b24d9f 85 int, struct value *,
aff410f1
MS
86 const struct value_print_options *,
87 struct type **);
c906108c 88
c906108c 89
8343f86c 90/* GCC versions after 2.4.5 use this. */
ddb6d633 91extern 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,
65408fa6 157 LONGEST offset,
aff410f1 158 CORE_ADDR address, struct ui_file *stream,
e8b24d9f 159 int recurse, 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 167
f168693b 168 type = 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)
65408fa6 197 cp_print_value (type, real_type,
aff410f1
MS
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 {
65408fa6
YQ
231 const gdb_byte *valaddr = value_contents_for_printing (val);
232
c906108c 233 /* If requested, skip printing of static fields. */
79a45b7d 234 if (!options->static_field_print
d6a843b5 235 && field_is_static (&TYPE_FIELD (type, i)))
c906108c
SS
236 continue;
237
c906108c
SS
238 if (fields_seen)
239 fprintf_filtered (stream, ", ");
240 else if (n_baseclasses > 0)
241 {
2a998fc0 242 if (options->prettyformat)
c906108c
SS
243 {
244 fprintf_filtered (stream, "\n");
245 print_spaces_filtered (2 + 2 * recurse, stream);
246 fputs_filtered ("members of ", stream);
247 fputs_filtered (type_name_no_tag (type), stream);
248 fputs_filtered (": ", stream);
249 }
250 }
251 fields_seen = 1;
252
2a998fc0 253 if (options->prettyformat)
c906108c
SS
254 {
255 fprintf_filtered (stream, "\n");
256 print_spaces_filtered (2 + 2 * recurse, stream);
257 }
c5aa993b 258 else
c906108c
SS
259 {
260 wrap_here (n_spaces (2 + 2 * recurse));
261 }
e93a8774
TT
262
263 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
264
265 if (field_is_static (&TYPE_FIELD (type, i)))
266 fputs_filtered ("static ", stream);
267 fprintf_symbol_filtered (stream,
268 TYPE_FIELD_NAME (type, i),
269 current_language->la_language,
270 DMGL_PARAMS | DMGL_ANSI);
271 annotate_field_name_end ();
272 /* Do not print leading '=' in case of anonymous
273 unions. */
274 if (strcmp (TYPE_FIELD_NAME (type, i), ""))
275 fputs_filtered (" = ", stream);
276 annotate_field_value ();
c906108c 277
d6a843b5
JK
278 if (!field_is_static (&TYPE_FIELD (type, i))
279 && TYPE_FIELD_PACKED (type, i))
c906108c 280 {
6943961c 281 struct value *v;
c906108c 282
aff410f1
MS
283 /* Bitfields require special handling, especially due to
284 byte order problems. */
c906108c
SS
285 if (TYPE_FIELD_IGNORE (type, i))
286 {
c5aa993b 287 fputs_filtered ("<optimized out or zero length>", stream);
c906108c 288 }
8cf6f0b1
TT
289 else if (value_bits_synthetic_pointer (val,
290 TYPE_FIELD_BITPOS (type,
291 i),
292 TYPE_FIELD_BITSIZE (type,
293 i)))
294 {
295 fputs_filtered (_("<synthetic pointer>"), stream);
296 }
c906108c
SS
297 else
298 {
79a45b7d 299 struct value_print_options opts = *options;
c5504eaf 300
79a45b7d 301 opts.deref_ref = 0;
5467c6c8
PA
302
303 v = value_field_bitfield (type, i, valaddr, offset, val);
c906108c 304
79a45b7d 305 common_val_print (v, stream, recurse + 1, &opts,
d8ca156b 306 current_language);
c906108c
SS
307 }
308 }
309 else
310 {
311 if (TYPE_FIELD_IGNORE (type, i))
312 {
aff410f1
MS
313 fputs_filtered ("<optimized out or zero length>",
314 stream);
c906108c 315 }
d6a843b5 316 else if (field_is_static (&TYPE_FIELD (type, i)))
c906108c 317 {
ee86786c
TT
318 struct value *v = NULL;
319
492d29ea 320 TRY
ee86786c
TT
321 {
322 v = value_static_field (type, i);
323 }
324
492d29ea
PA
325 CATCH (ex, RETURN_MASK_ERROR)
326 {
327 fprintf_filtered (stream,
328 _("<error reading variable: %s>"),
329 ex.message);
330 }
331 END_CATCH
332
686d4def
PA
333 cp_print_static_field (TYPE_FIELD_TYPE (type, i),
334 v, stream, recurse + 1,
335 options);
c906108c 336 }
7977e5d2 337 else if (i == vptr_fieldno && type == vptr_basetype)
410528f0 338 {
a72c8f6a
JK
339 int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
340 struct type *i_type = TYPE_FIELD_TYPE (type, i);
341
342 if (valprint_check_validity (stream, i_type, i_offset, val))
343 {
344 CORE_ADDR addr;
345
346 addr = extract_typed_address (valaddr + i_offset, i_type);
edf0c1b7
TT
347 print_function_pointer_address (options,
348 get_type_arch (type),
349 addr, stream);
a72c8f6a 350 }
410528f0 351 }
c906108c
SS
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 358 offset + TYPE_FIELD_BITPOS (type, i) / 8,
edf3d5f3 359 address,
0e03807e 360 stream, recurse + 1, val, &opts,
d8ca156b 361 current_language);
c906108c
SS
362 }
363 }
364 annotate_field_end ();
365 }
366
367 if (dont_print_statmem == 0)
368 {
241fd515 369 size_t obstack_final_size =
0b66f317
CM
370 obstack_object_size (&dont_print_statmem_obstack);
371
aff410f1
MS
372 if (obstack_final_size > statmem_obstack_initial_size)
373 {
374 /* In effect, a pop of the printed-statics stack. */
0b66f317 375
aff410f1 376 void *free_to_ptr =
1ae1b8cc 377 (char *) obstack_next_free (&dont_print_statmem_obstack) -
aff410f1 378 (obstack_final_size - statmem_obstack_initial_size);
0b66f317 379
aff410f1
MS
380 obstack_free (&dont_print_statmem_obstack,
381 free_to_ptr);
382 }
ec31cde5
CM
383
384 if (last_set_recurse != recurse)
385 {
241fd515 386 size_t obstack_final_size =
f56dcb88
CM
387 obstack_object_size (&dont_print_stat_array_obstack);
388
389 if (obstack_final_size > stat_array_obstack_initial_size)
390 {
391 void *free_to_ptr =
1ae1b8cc 392 (char *) obstack_next_free (&dont_print_stat_array_obstack)
aff410f1
MS
393 - (obstack_final_size
394 - stat_array_obstack_initial_size);
f56dcb88
CM
395
396 obstack_free (&dont_print_stat_array_obstack,
397 free_to_ptr);
398 }
ec31cde5
CM
399 last_set_recurse = -1;
400 }
c906108c
SS
401 }
402
2a998fc0 403 if (options->prettyformat)
c906108c
SS
404 {
405 fprintf_filtered (stream, "\n");
406 print_spaces_filtered (2 * recurse, stream);
407 }
c5aa993b 408 } /* if there are data fields */
c5aa993b 409
c906108c
SS
410 fprintf_filtered (stream, "}");
411}
412
edf3d5f3
TT
413/* Like cp_print_value_fields, but find the runtime type of the object
414 and pass it as the `real_type' argument to cp_print_value_fields.
415 This function is a hack to work around the fact that
416 common_val_print passes the embedded offset to val_print, but not
417 the enclosing type. */
418
419void
420cp_print_value_fields_rtti (struct type *type,
6b850546 421 const gdb_byte *valaddr, LONGEST offset,
edf3d5f3
TT
422 CORE_ADDR address,
423 struct ui_file *stream, int recurse,
e8b24d9f 424 struct value *val,
edf3d5f3 425 const struct value_print_options *options,
c5504eaf
MS
426 struct type **dont_print_vb,
427 int dont_print_statmem)
edf3d5f3 428{
0e03807e
TT
429 struct type *real_type = NULL;
430
431 /* We require all bits to be valid in order to attempt a
432 conversion. */
9a0dc9e3
PA
433 if (!value_bits_any_optimized_out (val,
434 TARGET_CHAR_BIT * offset,
435 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
0e03807e
TT
436 {
437 struct value *value;
6b850546
DT
438 int full, using_enc;
439 LONGEST top;
0e03807e
TT
440
441 /* Ugh, we have to convert back to a value here. */
442 value = value_from_contents_and_address (type, valaddr + offset,
443 address + offset);
9f1f738a 444 type = value_type (value);
aff410f1
MS
445 /* We don't actually care about most of the result here -- just
446 the type. We already have the correct offset, due to how
447 val_print was initially called. */
0e03807e
TT
448 real_type = value_rtti_type (value, &full, &top, &using_enc);
449 }
450
edf3d5f3
TT
451 if (!real_type)
452 real_type = type;
453
65408fa6 454 cp_print_value_fields (type, real_type, offset,
0e03807e 455 address, stream, recurse, val, options,
edf3d5f3
TT
456 dont_print_vb, dont_print_statmem);
457}
458
aff410f1
MS
459/* Special val_print routine to avoid printing multiple copies of
460 virtual baseclasses. */
c906108c
SS
461
462static void
a2bd3dcd 463cp_print_value (struct type *type, struct type *real_type,
65408fa6 464 LONGEST offset,
aff410f1 465 CORE_ADDR address, struct ui_file *stream,
e8b24d9f 466 int recurse, struct value *val,
79a45b7d
TT
467 const struct value_print_options *options,
468 struct type **dont_print_vb)
c906108c 469{
c906108c 470 struct type **last_dont_print
2c63a960 471 = (struct type **) obstack_next_free (&dont_print_vb_obstack);
c1b6e682 472 struct obstack tmp_obstack = dont_print_vb_obstack;
c906108c 473 int i, n_baseclasses = TYPE_N_BASECLASSES (type);
6b850546 474 LONGEST thisoffset;
b9d652ac 475 struct type *thistype;
65408fa6 476 const gdb_byte *valaddr = value_contents_for_printing (val);
c906108c
SS
477
478 if (dont_print_vb == 0)
479 {
aff410f1
MS
480 /* If we're at top level, carve out a completely fresh chunk of
481 the obstack and use that until this particular invocation
482 returns. */
c906108c
SS
483 /* Bump up the high-water mark. Now alpha is omega. */
484 obstack_finish (&dont_print_vb_obstack);
485 }
486
487 for (i = 0; i < n_baseclasses; i++)
488 {
6b850546 489 LONGEST boffset = 0;
7556d4a4 490 int skip = 0;
c906108c 491 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
0d5cff50 492 const char *basename = TYPE_NAME (baseclass);
e8b24d9f 493 struct value *base_val = NULL;
c906108c
SS
494
495 if (BASETYPE_VIA_VIRTUAL (type, i))
496 {
497 struct type **first_dont_print
2c63a960 498 = (struct type **) obstack_base (&dont_print_vb_obstack);
c906108c 499
aff410f1
MS
500 int j = (struct type **)
501 obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
c906108c
SS
502
503 while (--j >= 0)
504 if (baseclass == first_dont_print[j])
505 goto flush_it;
506
507 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
508 }
509
b9d652ac
DJ
510 thisoffset = offset;
511 thistype = real_type;
086280be 512
492d29ea 513 TRY
c5aa993b 514 {
8af8e3bc
PA
515 boffset = baseclass_offset (type, i, valaddr, offset, address, val);
516 }
492d29ea 517 CATCH (ex, RETURN_MASK_ERROR)
7556d4a4
PA
518 {
519 if (ex.error == NOT_AVAILABLE_ERROR)
520 skip = -1;
521 else
522 skip = 1;
523 }
492d29ea 524 END_CATCH
c906108c 525
7556d4a4
PA
526 if (skip == 0)
527 {
8af8e3bc 528 if (BASETYPE_VIA_VIRTUAL (type, i))
c5aa993b 529 {
8af8e3bc
PA
530 /* The virtual base class pointer might have been
531 clobbered by the user program. Make sure that it
532 still points to a valid memory location. */
533
534 if ((boffset + offset) < 0
535 || (boffset + offset) >= TYPE_LENGTH (real_type))
536 {
d5161074
SP
537 gdb_byte *buf;
538 struct cleanup *back_to;
539
224c3ddb 540 buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass));
d5161074 541 back_to = make_cleanup (xfree, buf);
8af8e3bc
PA
542
543 if (target_read_memory (address + boffset, buf,
544 TYPE_LENGTH (baseclass)) != 0)
545 skip = 1;
546 base_val = value_from_contents_and_address (baseclass,
547 buf,
548 address + boffset);
9f1f738a 549 baseclass = value_type (base_val);
8af8e3bc
PA
550 thisoffset = 0;
551 boffset = 0;
552 thistype = baseclass;
d5161074 553 do_cleanups (back_to);
8af8e3bc
PA
554 }
555 else
556 {
8af8e3bc
PA
557 base_val = val;
558 }
c5aa993b
JM
559 }
560 else
de4127a3 561 {
de4127a3
PA
562 base_val = val;
563 }
c906108c
SS
564 }
565
aff410f1 566 /* Now do the printing. */
2a998fc0 567 if (options->prettyformat)
c906108c
SS
568 {
569 fprintf_filtered (stream, "\n");
570 print_spaces_filtered (2 * recurse, stream);
571 }
572 fputs_filtered ("<", stream);
aff410f1
MS
573 /* Not sure what the best notation is in the case where there is
574 no baseclass name. */
c906108c
SS
575 fputs_filtered (basename ? basename : "", stream);
576 fputs_filtered ("> = ", stream);
577
8af8e3bc
PA
578 if (skip < 0)
579 val_print_unavailable (stream);
580 else if (skip > 0)
581 val_print_invalid_address (stream);
c906108c 582 else
a6bac58e
TT
583 {
584 int result = 0;
585
6dddc817 586 /* Attempt to run an extension language pretty-printer on the
a6bac58e
TT
587 baseclass if possible. */
588 if (!options->raw)
6dddc817 589 result
668e1674 590 = apply_ext_lang_val_pretty_printer (baseclass,
6dddc817
DE
591 thisoffset + boffset,
592 value_address (base_val),
593 stream, recurse,
594 base_val, options,
595 current_language);
de4127a3 596
a6bac58e 597 if (!result)
65408fa6 598 cp_print_value_fields (baseclass, thistype,
de4127a3
PA
599 thisoffset + boffset,
600 value_address (base_val),
601 stream, recurse, base_val, options,
a6bac58e
TT
602 ((struct type **)
603 obstack_base (&dont_print_vb_obstack)),
604 0);
605 }
c906108c
SS
606 fputs_filtered (", ", stream);
607
608 flush_it:
609 ;
610 }
611
612 if (dont_print_vb == 0)
613 {
614 /* Free the space used to deal with the printing
c5aa993b 615 of this type from top level. */
c906108c
SS
616 obstack_free (&dont_print_vb_obstack, last_dont_print);
617 /* Reset watermark so that we can continue protecting
c5aa993b 618 ourselves from whatever we were protecting ourselves. */
c906108c
SS
619 dont_print_vb_obstack = tmp_obstack;
620 }
621}
622
aff410f1
MS
623/* Print value of a static member. To avoid infinite recursion when
624 printing a class that contains a static instance of the class, we
625 keep the addresses of all printed static member classes in an
626 obstack and refuse to print them more than once.
c906108c 627
79a45b7d 628 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
c906108c
SS
629 have the same meanings as in c_val_print. */
630
631static void
2c63a960 632cp_print_static_field (struct type *type,
6943961c 633 struct value *val,
2c63a960 634 struct ui_file *stream,
2c63a960 635 int recurse,
79a45b7d 636 const struct value_print_options *options)
c906108c 637{
79a45b7d 638 struct value_print_options opts;
686d4def
PA
639
640 if (value_entirely_optimized_out (val))
641 {
642 val_print_optimized_out (val, stream);
643 return;
644 }
645
c906108c
SS
646 if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
647 {
648 CORE_ADDR *first_dont_print;
42ae5230 649 CORE_ADDR addr;
c906108c
SS
650 int i;
651
652 first_dont_print
c5aa993b 653 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
99903ae3
CM
654 i = obstack_object_size (&dont_print_statmem_obstack)
655 / sizeof (CORE_ADDR);
c906108c
SS
656
657 while (--i >= 0)
658 {
42ae5230 659 if (value_address (val) == first_dont_print[i])
c906108c 660 {
2c63a960
JB
661 fputs_filtered ("<same as static member of an already"
662 " seen type>",
c906108c
SS
663 stream);
664 return;
665 }
666 }
667
42ae5230
TT
668 addr = value_address (val);
669 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
c906108c 670 sizeof (CORE_ADDR));
f168693b 671 type = check_typedef (type);
edf3d5f3 672 cp_print_value_fields (type, value_enclosing_type (val),
42ae5230 673 value_embedded_offset (val), addr,
aff410f1
MS
674 stream, recurse, val,
675 options, NULL, 1);
c906108c
SS
676 return;
677 }
79a45b7d 678
ec31cde5
CM
679 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
680 {
681 struct type **first_dont_print;
682 int i;
683 struct type *target_type = TYPE_TARGET_TYPE (type);
684
685 first_dont_print
686 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
687 i = obstack_object_size (&dont_print_stat_array_obstack)
1e9beacb 688 / sizeof (struct type *);
ec31cde5
CM
689
690 while (--i >= 0)
691 {
692 if (target_type == first_dont_print[i])
693 {
694 fputs_filtered ("<same as static member of an already"
695 " seen type>",
696 stream);
697 return;
698 }
699 }
700
aff410f1
MS
701 obstack_grow (&dont_print_stat_array_obstack,
702 (char *) &target_type,
ec31cde5
CM
703 sizeof (struct type *));
704 }
705
79a45b7d
TT
706 opts = *options;
707 opts.deref_ref = 0;
e8b24d9f 708 val_print (type,
aff410f1
MS
709 value_embedded_offset (val),
710 value_address (val),
711 stream, recurse, val,
712 &opts, current_language);
c906108c
SS
713}
714
09e2d7c7
DE
715/* Find the field in *SELF, or its non-virtual base classes, with
716 bit offset OFFSET. Set *SELF to the containing type and *FIELDNO
aff410f1 717 to the containing field number. If OFFSET is not exactly at the
09e2d7c7 718 start of some field, set *SELF to NULL. */
0d5de010 719
2c0b251b 720static void
09e2d7c7 721cp_find_class_member (struct type **self_p, int *fieldno,
0d5de010
DJ
722 LONGEST offset)
723{
09e2d7c7 724 struct type *self;
0d5de010
DJ
725 unsigned int i;
726 unsigned len;
727
09e2d7c7
DE
728 *self_p = check_typedef (*self_p);
729 self = *self_p;
730 len = TYPE_NFIELDS (self);
0d5de010 731
09e2d7c7 732 for (i = TYPE_N_BASECLASSES (self); i < len; i++)
0d5de010 733 {
09e2d7c7 734 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
0d5de010
DJ
735
736 QUIT;
737 if (offset == bitpos)
738 {
739 *fieldno = i;
740 return;
741 }
742 }
743
09e2d7c7 744 for (i = 0; i < TYPE_N_BASECLASSES (self); i++)
0d5de010 745 {
09e2d7c7
DE
746 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
747 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i));
0d5de010
DJ
748
749 if (offset >= bitpos && offset < bitpos + bitsize)
750 {
09e2d7c7
DE
751 *self_p = TYPE_FIELD_TYPE (self, i);
752 cp_find_class_member (self_p, fieldno, offset - bitpos);
0d5de010
DJ
753 return;
754 }
755 }
756
09e2d7c7 757 *self_p = NULL;
0d5de010
DJ
758}
759
c906108c 760void
ad4820ab 761cp_print_class_member (const gdb_byte *valaddr, struct type *type,
fba45db2 762 struct ui_file *stream, char *prefix)
c906108c 763{
e17a4113
UW
764 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
765
09e2d7c7 766 /* VAL is a byte offset into the structure type SELF_TYPE.
c906108c
SS
767 Find the name of the field for that offset and
768 print it. */
09e2d7c7 769 struct type *self_type = TYPE_SELF_TYPE (type);
e17a4113 770 LONGEST val;
9f8afa72 771 int fieldno;
c906108c 772
aff410f1
MS
773 val = extract_signed_integer (valaddr,
774 TYPE_LENGTH (type),
775 byte_order);
e17a4113 776
0d5de010
DJ
777 /* Pointers to data members are usually byte offsets into an object.
778 Because a data member can have offset zero, and a NULL pointer to
779 member must be distinct from any valid non-NULL pointer to
780 member, either the value is biased or the NULL value has a
781 special representation; both are permitted by ISO C++. HP aCC
782 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
783 and other compilers which use the Itanium ABI use -1 as the NULL
784 value. GDB only supports that last form; to add support for
785 another form, make this into a cp-abi hook. */
c906108c 786
0d5de010 787 if (val == -1)
c906108c 788 {
0d5de010
DJ
789 fprintf_filtered (stream, "NULL");
790 return;
c906108c 791 }
0d5de010 792
09e2d7c7 793 cp_find_class_member (&self_type, &fieldno, val << 3);
0d5de010 794
09e2d7c7 795 if (self_type != NULL)
c906108c 796 {
0d5cff50 797 const char *name;
c5504eaf 798
306d9ac5 799 fputs_filtered (prefix, stream);
09e2d7c7 800 name = type_name_no_tag (self_type);
c906108c 801 if (name)
c5aa993b 802 fputs_filtered (name, stream);
c906108c 803 else
09e2d7c7 804 c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
c906108c 805 fprintf_filtered (stream, "::");
09e2d7c7 806 fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream);
c906108c
SS
807 }
808 else
0d5de010 809 fprintf_filtered (stream, "%ld", (long) val);
c906108c
SS
810}
811
812
c906108c 813void
fba45db2 814_initialize_cp_valprint (void)
c906108c 815{
5bf193a2 816 add_setshow_boolean_cmd ("static-members", class_support,
79a45b7d 817 &user_print_options.static_field_print, _("\
5bf193a2
AC
818Set printing of C++ static members."), _("\
819Show printing of C++ static members."), NULL,
820 NULL,
920d2a44 821 show_static_field_print,
5bf193a2 822 &setprintlist, &showprintlist);
c906108c 823
79a45b7d
TT
824 add_setshow_boolean_cmd ("vtbl", class_support,
825 &user_print_options.vtblprint, _("\
5bf193a2
AC
826Set printing of C++ virtual function tables."), _("\
827Show printing of C++ virtual function tables."), NULL,
828 NULL,
920d2a44 829 show_vtblprint,
5bf193a2
AC
830 &setprintlist, &showprintlist);
831
79a45b7d
TT
832 add_setshow_boolean_cmd ("object", class_support,
833 &user_print_options.objectprint, _("\
5bf193a2
AC
834Set printing of object's derived type based on vtable info."), _("\
835Show printing of object's derived type based on vtable info."), NULL,
836 NULL,
920d2a44 837 show_objectprint,
5bf193a2 838 &setprintlist, &showprintlist);
c906108c 839
aff410f1
MS
840 obstack_begin (&dont_print_stat_array_obstack,
841 32 * sizeof (struct type *));
842 obstack_begin (&dont_print_statmem_obstack,
843 32 * sizeof (CORE_ADDR));
844 obstack_begin (&dont_print_vb_obstack,
845 32 * sizeof (struct type *));
c906108c 846}
This page took 1.170835 seconds and 4 git commands to generate.