Allow integer immediate for VFP vmov instructions.
[deliverable/binutils-gdb.git] / gdb / cp-valprint.c
CommitLineData
c906108c 1/* Support for printing C++ values for GDB, the GNU debugger.
a2bd3dcd 2
e2882c85 3 Copyright (C) 1986-2018 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. */
a43f3893
PF
374 size_t shrink_bytes
375 = statmem_obstack_initial_size - obstack_final_size;
376 obstack_blank_fast (&dont_print_statmem_obstack, shrink_bytes);
aff410f1 377 }
ec31cde5
CM
378
379 if (last_set_recurse != recurse)
380 {
241fd515 381 size_t obstack_final_size =
f56dcb88
CM
382 obstack_object_size (&dont_print_stat_array_obstack);
383
384 if (obstack_final_size > stat_array_obstack_initial_size)
385 {
386 void *free_to_ptr =
1ae1b8cc 387 (char *) obstack_next_free (&dont_print_stat_array_obstack)
aff410f1
MS
388 - (obstack_final_size
389 - stat_array_obstack_initial_size);
f56dcb88
CM
390
391 obstack_free (&dont_print_stat_array_obstack,
392 free_to_ptr);
393 }
ec31cde5
CM
394 last_set_recurse = -1;
395 }
c906108c
SS
396 }
397
2a998fc0 398 if (options->prettyformat)
c906108c
SS
399 {
400 fprintf_filtered (stream, "\n");
401 print_spaces_filtered (2 * recurse, stream);
402 }
c5aa993b 403 } /* if there are data fields */
c5aa993b 404
c906108c
SS
405 fprintf_filtered (stream, "}");
406}
407
edf3d5f3
TT
408/* Like cp_print_value_fields, but find the runtime type of the object
409 and pass it as the `real_type' argument to cp_print_value_fields.
410 This function is a hack to work around the fact that
411 common_val_print passes the embedded offset to val_print, but not
412 the enclosing type. */
413
414void
415cp_print_value_fields_rtti (struct type *type,
6b850546 416 const gdb_byte *valaddr, LONGEST offset,
edf3d5f3
TT
417 CORE_ADDR address,
418 struct ui_file *stream, int recurse,
e8b24d9f 419 struct value *val,
edf3d5f3 420 const struct value_print_options *options,
c5504eaf
MS
421 struct type **dont_print_vb,
422 int dont_print_statmem)
edf3d5f3 423{
0e03807e
TT
424 struct type *real_type = NULL;
425
426 /* We require all bits to be valid in order to attempt a
427 conversion. */
9a0dc9e3
PA
428 if (!value_bits_any_optimized_out (val,
429 TARGET_CHAR_BIT * offset,
430 TARGET_CHAR_BIT * TYPE_LENGTH (type)))
0e03807e
TT
431 {
432 struct value *value;
6b850546
DT
433 int full, using_enc;
434 LONGEST top;
0e03807e
TT
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
65408fa6 449 cp_print_value_fields (type, real_type, 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,
65408fa6 459 LONGEST offset,
aff410f1 460 CORE_ADDR address, struct ui_file *stream,
e8b24d9f 461 int recurse, 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);
6b850546 469 LONGEST thisoffset;
b9d652ac 470 struct type *thistype;
65408fa6 471 const gdb_byte *valaddr = value_contents_for_printing (val);
c906108c
SS
472
473 if (dont_print_vb == 0)
474 {
aff410f1
MS
475 /* If we're at top level, carve out a completely fresh chunk of
476 the obstack and use that until this particular invocation
477 returns. */
c906108c
SS
478 /* Bump up the high-water mark. Now alpha is omega. */
479 obstack_finish (&dont_print_vb_obstack);
480 }
481
482 for (i = 0; i < n_baseclasses; i++)
483 {
6b850546 484 LONGEST boffset = 0;
7556d4a4 485 int skip = 0;
c906108c 486 struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
0d5cff50 487 const char *basename = TYPE_NAME (baseclass);
e8b24d9f 488 struct value *base_val = NULL;
c906108c
SS
489
490 if (BASETYPE_VIA_VIRTUAL (type, i))
491 {
492 struct type **first_dont_print
2c63a960 493 = (struct type **) obstack_base (&dont_print_vb_obstack);
c906108c 494
aff410f1
MS
495 int j = (struct type **)
496 obstack_next_free (&dont_print_vb_obstack) - first_dont_print;
c906108c
SS
497
498 while (--j >= 0)
499 if (baseclass == first_dont_print[j])
500 goto flush_it;
501
502 obstack_ptr_grow (&dont_print_vb_obstack, baseclass);
503 }
504
b9d652ac
DJ
505 thisoffset = offset;
506 thistype = real_type;
086280be 507
492d29ea 508 TRY
c5aa993b 509 {
8af8e3bc
PA
510 boffset = baseclass_offset (type, i, valaddr, offset, address, val);
511 }
492d29ea 512 CATCH (ex, RETURN_MASK_ERROR)
7556d4a4
PA
513 {
514 if (ex.error == NOT_AVAILABLE_ERROR)
515 skip = -1;
516 else
517 skip = 1;
518 }
492d29ea 519 END_CATCH
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 {
26fcd5d7 532 gdb::byte_vector buf (TYPE_LENGTH (baseclass));
d5161074 533
26fcd5d7 534 if (target_read_memory (address + boffset, buf.data (),
8af8e3bc
PA
535 TYPE_LENGTH (baseclass)) != 0)
536 skip = 1;
537 base_val = value_from_contents_and_address (baseclass,
26fcd5d7 538 buf.data (),
8af8e3bc 539 address + boffset);
9f1f738a 540 baseclass = value_type (base_val);
8af8e3bc
PA
541 thisoffset = 0;
542 boffset = 0;
543 thistype = baseclass;
8af8e3bc
PA
544 }
545 else
546 {
8af8e3bc
PA
547 base_val = val;
548 }
c5aa993b
JM
549 }
550 else
de4127a3 551 {
de4127a3
PA
552 base_val = val;
553 }
c906108c
SS
554 }
555
aff410f1 556 /* Now do the printing. */
2a998fc0 557 if (options->prettyformat)
c906108c
SS
558 {
559 fprintf_filtered (stream, "\n");
560 print_spaces_filtered (2 * recurse, stream);
561 }
562 fputs_filtered ("<", stream);
aff410f1
MS
563 /* Not sure what the best notation is in the case where there is
564 no baseclass name. */
c906108c
SS
565 fputs_filtered (basename ? basename : "", stream);
566 fputs_filtered ("> = ", stream);
567
8af8e3bc
PA
568 if (skip < 0)
569 val_print_unavailable (stream);
570 else if (skip > 0)
571 val_print_invalid_address (stream);
c906108c 572 else
a6bac58e
TT
573 {
574 int result = 0;
575
6dddc817 576 /* Attempt to run an extension language pretty-printer on the
a6bac58e
TT
577 baseclass if possible. */
578 if (!options->raw)
6dddc817 579 result
668e1674 580 = apply_ext_lang_val_pretty_printer (baseclass,
6dddc817
DE
581 thisoffset + boffset,
582 value_address (base_val),
583 stream, recurse,
584 base_val, options,
585 current_language);
de4127a3 586
a6bac58e 587 if (!result)
65408fa6 588 cp_print_value_fields (baseclass, thistype,
de4127a3
PA
589 thisoffset + boffset,
590 value_address (base_val),
591 stream, recurse, base_val, options,
a6bac58e
TT
592 ((struct type **)
593 obstack_base (&dont_print_vb_obstack)),
594 0);
595 }
c906108c
SS
596 fputs_filtered (", ", stream);
597
598 flush_it:
599 ;
600 }
601
602 if (dont_print_vb == 0)
603 {
604 /* Free the space used to deal with the printing
c5aa993b 605 of this type from top level. */
c906108c
SS
606 obstack_free (&dont_print_vb_obstack, last_dont_print);
607 /* Reset watermark so that we can continue protecting
c5aa993b 608 ourselves from whatever we were protecting ourselves. */
c906108c
SS
609 dont_print_vb_obstack = tmp_obstack;
610 }
611}
612
aff410f1
MS
613/* Print value of a static member. To avoid infinite recursion when
614 printing a class that contains a static instance of the class, we
615 keep the addresses of all printed static member classes in an
616 obstack and refuse to print them more than once.
c906108c 617
79a45b7d 618 VAL contains the value to print, TYPE, STREAM, RECURSE, and OPTIONS
c906108c
SS
619 have the same meanings as in c_val_print. */
620
621static void
2c63a960 622cp_print_static_field (struct type *type,
6943961c 623 struct value *val,
2c63a960 624 struct ui_file *stream,
2c63a960 625 int recurse,
79a45b7d 626 const struct value_print_options *options)
c906108c 627{
79a45b7d 628 struct value_print_options opts;
686d4def
PA
629
630 if (value_entirely_optimized_out (val))
631 {
632 val_print_optimized_out (val, stream);
633 return;
634 }
635
79f18731
WP
636 struct type *real_type = check_typedef (type);
637 if (TYPE_CODE (real_type) == TYPE_CODE_STRUCT)
c906108c
SS
638 {
639 CORE_ADDR *first_dont_print;
42ae5230 640 CORE_ADDR addr;
c906108c
SS
641 int i;
642
643 first_dont_print
c5aa993b 644 = (CORE_ADDR *) obstack_base (&dont_print_statmem_obstack);
99903ae3
CM
645 i = obstack_object_size (&dont_print_statmem_obstack)
646 / sizeof (CORE_ADDR);
c906108c
SS
647
648 while (--i >= 0)
649 {
42ae5230 650 if (value_address (val) == first_dont_print[i])
c906108c 651 {
2c63a960
JB
652 fputs_filtered ("<same as static member of an already"
653 " seen type>",
c906108c
SS
654 stream);
655 return;
656 }
657 }
658
42ae5230
TT
659 addr = value_address (val);
660 obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
c906108c 661 sizeof (CORE_ADDR));
edf3d5f3 662 cp_print_value_fields (type, value_enclosing_type (val),
42ae5230 663 value_embedded_offset (val), addr,
aff410f1
MS
664 stream, recurse, val,
665 options, NULL, 1);
c906108c
SS
666 return;
667 }
79a45b7d 668
79f18731 669 if (TYPE_CODE (real_type) == TYPE_CODE_ARRAY)
ec31cde5
CM
670 {
671 struct type **first_dont_print;
672 int i;
673 struct type *target_type = TYPE_TARGET_TYPE (type);
674
675 first_dont_print
676 = (struct type **) obstack_base (&dont_print_stat_array_obstack);
677 i = obstack_object_size (&dont_print_stat_array_obstack)
1e9beacb 678 / sizeof (struct type *);
ec31cde5
CM
679
680 while (--i >= 0)
681 {
682 if (target_type == first_dont_print[i])
683 {
684 fputs_filtered ("<same as static member of an already"
685 " seen type>",
686 stream);
687 return;
688 }
689 }
690
aff410f1
MS
691 obstack_grow (&dont_print_stat_array_obstack,
692 (char *) &target_type,
ec31cde5
CM
693 sizeof (struct type *));
694 }
695
79a45b7d
TT
696 opts = *options;
697 opts.deref_ref = 0;
e8b24d9f 698 val_print (type,
aff410f1
MS
699 value_embedded_offset (val),
700 value_address (val),
701 stream, recurse, val,
702 &opts, current_language);
c906108c
SS
703}
704
09e2d7c7
DE
705/* Find the field in *SELF, or its non-virtual base classes, with
706 bit offset OFFSET. Set *SELF to the containing type and *FIELDNO
aff410f1 707 to the containing field number. If OFFSET is not exactly at the
09e2d7c7 708 start of some field, set *SELF to NULL. */
0d5de010 709
2c0b251b 710static void
09e2d7c7 711cp_find_class_member (struct type **self_p, int *fieldno,
0d5de010
DJ
712 LONGEST offset)
713{
09e2d7c7 714 struct type *self;
0d5de010
DJ
715 unsigned int i;
716 unsigned len;
717
09e2d7c7
DE
718 *self_p = check_typedef (*self_p);
719 self = *self_p;
720 len = TYPE_NFIELDS (self);
0d5de010 721
09e2d7c7 722 for (i = TYPE_N_BASECLASSES (self); i < len; i++)
0d5de010 723 {
09e2d7c7 724 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
0d5de010
DJ
725
726 QUIT;
727 if (offset == bitpos)
728 {
729 *fieldno = i;
730 return;
731 }
732 }
733
09e2d7c7 734 for (i = 0; i < TYPE_N_BASECLASSES (self); i++)
0d5de010 735 {
09e2d7c7
DE
736 LONGEST bitpos = TYPE_FIELD_BITPOS (self, i);
737 LONGEST bitsize = 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (self, i));
0d5de010
DJ
738
739 if (offset >= bitpos && offset < bitpos + bitsize)
740 {
09e2d7c7
DE
741 *self_p = TYPE_FIELD_TYPE (self, i);
742 cp_find_class_member (self_p, fieldno, offset - bitpos);
0d5de010
DJ
743 return;
744 }
745 }
746
09e2d7c7 747 *self_p = NULL;
0d5de010
DJ
748}
749
c906108c 750void
ad4820ab 751cp_print_class_member (const gdb_byte *valaddr, struct type *type,
a121b7c1 752 struct ui_file *stream, const char *prefix)
c906108c 753{
e17a4113
UW
754 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
755
09e2d7c7 756 /* VAL is a byte offset into the structure type SELF_TYPE.
c906108c
SS
757 Find the name of the field for that offset and
758 print it. */
09e2d7c7 759 struct type *self_type = TYPE_SELF_TYPE (type);
e17a4113 760 LONGEST val;
9f8afa72 761 int fieldno;
c906108c 762
aff410f1
MS
763 val = extract_signed_integer (valaddr,
764 TYPE_LENGTH (type),
765 byte_order);
e17a4113 766
0d5de010
DJ
767 /* Pointers to data members are usually byte offsets into an object.
768 Because a data member can have offset zero, and a NULL pointer to
769 member must be distinct from any valid non-NULL pointer to
770 member, either the value is biased or the NULL value has a
771 special representation; both are permitted by ISO C++. HP aCC
772 used a bias of 0x20000000; HP cfront used a bias of 1; g++ 3.x
773 and other compilers which use the Itanium ABI use -1 as the NULL
774 value. GDB only supports that last form; to add support for
775 another form, make this into a cp-abi hook. */
c906108c 776
0d5de010 777 if (val == -1)
c906108c 778 {
0d5de010
DJ
779 fprintf_filtered (stream, "NULL");
780 return;
c906108c 781 }
0d5de010 782
09e2d7c7 783 cp_find_class_member (&self_type, &fieldno, val << 3);
0d5de010 784
09e2d7c7 785 if (self_type != NULL)
c906108c 786 {
0d5cff50 787 const char *name;
c5504eaf 788
306d9ac5 789 fputs_filtered (prefix, stream);
09e2d7c7 790 name = type_name_no_tag (self_type);
c906108c 791 if (name)
c5aa993b 792 fputs_filtered (name, stream);
c906108c 793 else
09e2d7c7 794 c_type_print_base (self_type, stream, 0, 0, &type_print_raw_options);
c906108c 795 fprintf_filtered (stream, "::");
09e2d7c7 796 fputs_filtered (TYPE_FIELD_NAME (self_type, fieldno), stream);
c906108c
SS
797 }
798 else
0d5de010 799 fprintf_filtered (stream, "%ld", (long) val);
c906108c
SS
800}
801
802
c906108c 803void
fba45db2 804_initialize_cp_valprint (void)
c906108c 805{
5bf193a2 806 add_setshow_boolean_cmd ("static-members", class_support,
79a45b7d 807 &user_print_options.static_field_print, _("\
5bf193a2
AC
808Set printing of C++ static members."), _("\
809Show printing of C++ static members."), NULL,
810 NULL,
920d2a44 811 show_static_field_print,
5bf193a2 812 &setprintlist, &showprintlist);
c906108c 813
79a45b7d
TT
814 add_setshow_boolean_cmd ("vtbl", class_support,
815 &user_print_options.vtblprint, _("\
5bf193a2
AC
816Set printing of C++ virtual function tables."), _("\
817Show printing of C++ virtual function tables."), NULL,
818 NULL,
920d2a44 819 show_vtblprint,
5bf193a2
AC
820 &setprintlist, &showprintlist);
821
79a45b7d
TT
822 add_setshow_boolean_cmd ("object", class_support,
823 &user_print_options.objectprint, _("\
5bf193a2
AC
824Set printing of object's derived type based on vtable info."), _("\
825Show printing of object's derived type based on vtable info."), NULL,
826 NULL,
920d2a44 827 show_objectprint,
5bf193a2 828 &setprintlist, &showprintlist);
c906108c 829
aff410f1
MS
830 obstack_begin (&dont_print_stat_array_obstack,
831 32 * sizeof (struct type *));
832 obstack_begin (&dont_print_statmem_obstack,
833 32 * sizeof (CORE_ADDR));
834 obstack_begin (&dont_print_vb_obstack,
835 32 * sizeof (struct type *));
c906108c 836}
This page took 1.276612 seconds and 4 git commands to generate.