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