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