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