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