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