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