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