1 /* Support for printing Pascal values for GDB, the GNU debugger.
3 Copyright (C) 2000, 2001, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 /* This file is derived from c-valprint.c */
24 #include "gdb_obstack.h"
27 #include "expression.h"
34 #include "typeprint.h"
40 #include "cp-support.h"
41 #include "exceptions.h"
44 /* See val_print for a description of the various parameters of this
45 function; they are identical. The semantics of the return value is
46 also identical to val_print. */
49 pascal_val_print (struct type
*type
, const gdb_byte
*valaddr
,
50 int embedded_offset
, CORE_ADDR address
,
51 struct ui_file
*stream
, int recurse
,
52 const struct value
*original_value
,
53 const struct value_print_options
*options
)
55 struct gdbarch
*gdbarch
= get_type_arch (type
);
56 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
57 unsigned int i
= 0; /* Number of characters printed */
59 LONGEST low_bound
, high_bound
;
62 int length_pos
, length_size
, string_pos
;
63 struct type
*char_type
;
68 switch (TYPE_CODE (type
))
71 if (get_array_bounds (type
, &low_bound
, &high_bound
))
73 len
= high_bound
- low_bound
+ 1;
74 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
75 eltlen
= TYPE_LENGTH (elttype
);
76 if (options
->prettyprint_arrays
)
78 print_spaces_filtered (2 + 2 * recurse
, stream
);
80 /* If 's' format is used, try to print out as string.
81 If no format is given, print as string if element type
82 is of TYPE_CODE_CHAR and element size is 1,2 or 4. */
83 if (options
->format
== 's'
84 || ((eltlen
== 1 || eltlen
== 2 || eltlen
== 4)
85 && TYPE_CODE (elttype
) == TYPE_CODE_CHAR
86 && options
->format
== 0))
88 /* If requested, look for the first null char and only print
90 if (options
->stop_print_at_null
)
92 unsigned int temp_len
;
94 /* Look for a NULL char. */
96 extract_unsigned_integer (valaddr
+ embedded_offset
+
97 temp_len
* eltlen
, eltlen
,
99 && temp_len
< len
&& temp_len
< options
->print_max
;
104 LA_PRINT_STRING (stream
, TYPE_TARGET_TYPE (type
),
105 valaddr
+ embedded_offset
, len
, NULL
, 0,
111 fprintf_filtered (stream
, "{");
112 /* If this is a virtual function table, print the 0th
113 entry specially, and the rest of the members normally. */
114 if (pascal_object_is_vtbl_ptr_type (elttype
))
117 fprintf_filtered (stream
, "%d vtable entries", len
- 1);
123 val_print_array_elements (type
, valaddr
, embedded_offset
,
124 address
, stream
, recurse
,
125 original_value
, options
, i
);
126 fprintf_filtered (stream
, "}");
130 /* Array of unspecified length: treat like pointer to first elt. */
131 addr
= address
+ embedded_offset
;
132 goto print_unpacked_pointer
;
135 if (options
->format
&& options
->format
!= 's')
137 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
138 original_value
, options
, 0, stream
);
141 if (options
->vtblprint
&& pascal_object_is_vtbl_ptr_type (type
))
143 /* Print the unmangled name if desired. */
144 /* Print vtable entry - we only get here if we ARE using
145 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
146 /* Extract the address, assume that it is unsigned. */
147 addr
= extract_unsigned_integer (valaddr
+ embedded_offset
,
148 TYPE_LENGTH (type
), byte_order
);
149 print_address_demangle (gdbarch
, addr
, stream
, demangle
);
152 check_typedef (TYPE_TARGET_TYPE (type
));
154 addr
= unpack_pointer (type
, valaddr
+ embedded_offset
);
155 print_unpacked_pointer
:
156 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
158 if (TYPE_CODE (elttype
) == TYPE_CODE_FUNC
)
160 /* Try to print what function it points to. */
161 print_address_demangle (gdbarch
, addr
, stream
, demangle
);
162 /* Return value is irrelevant except for string pointers. */
166 if (options
->addressprint
&& options
->format
!= 's')
168 fputs_filtered (paddress (gdbarch
, addr
), stream
);
171 /* For a pointer to char or unsigned char, also print the string
172 pointed to, unless pointer is null. */
173 if (((TYPE_LENGTH (elttype
) == 1
174 && (TYPE_CODE (elttype
) == TYPE_CODE_INT
175 || TYPE_CODE (elttype
) == TYPE_CODE_CHAR
))
176 || ((TYPE_LENGTH (elttype
) == 2 || TYPE_LENGTH (elttype
) == 4)
177 && TYPE_CODE (elttype
) == TYPE_CODE_CHAR
))
178 && (options
->format
== 0 || options
->format
== 's')
181 /* No wide string yet. */
182 i
= val_print_string (elttype
, NULL
, addr
, -1, stream
, options
);
184 /* Also for pointers to pascal strings. */
185 /* Note: this is Free Pascal specific:
186 as GDB does not recognize stabs pascal strings
187 Pascal strings are mapped to records
188 with lowercase names PM. */
189 if (is_pascal_string_type (elttype
, &length_pos
, &length_size
,
190 &string_pos
, &char_type
, NULL
)
193 ULONGEST string_length
;
196 buffer
= xmalloc (length_size
);
197 read_memory (addr
+ length_pos
, buffer
, length_size
);
198 string_length
= extract_unsigned_integer (buffer
, length_size
,
201 i
= val_print_string (char_type
, NULL
,
202 addr
+ string_pos
, string_length
,
205 else if (pascal_object_is_vtbl_member (type
))
207 /* Print vtbl's nicely. */
208 CORE_ADDR vt_address
= unpack_pointer (type
,
209 valaddr
+ embedded_offset
);
210 struct minimal_symbol
*msymbol
=
211 lookup_minimal_symbol_by_pc (vt_address
);
213 if ((msymbol
!= NULL
)
214 && (vt_address
== SYMBOL_VALUE_ADDRESS (msymbol
)))
216 fputs_filtered (" <", stream
);
217 fputs_filtered (SYMBOL_PRINT_NAME (msymbol
), stream
);
218 fputs_filtered (">", stream
);
220 if (vt_address
&& options
->vtblprint
)
222 struct value
*vt_val
;
223 struct symbol
*wsym
= (struct symbol
*) NULL
;
225 struct block
*block
= (struct block
*) NULL
;
229 wsym
= lookup_symbol (SYMBOL_LINKAGE_NAME (msymbol
), block
,
230 VAR_DOMAIN
, &is_this_fld
);
234 wtype
= SYMBOL_TYPE (wsym
);
238 wtype
= TYPE_TARGET_TYPE (type
);
240 vt_val
= value_at (wtype
, vt_address
);
241 common_val_print (vt_val
, stream
, recurse
+ 1, options
,
245 fprintf_filtered (stream
, "\n");
246 print_spaces_filtered (2 + 2 * recurse
, stream
);
251 /* Return number of characters printed, including the terminating
252 '\0' if we reached the end. val_print_string takes care including
253 the terminating '\0' if necessary. */
259 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
260 if (options
->addressprint
)
263 = extract_typed_address (valaddr
+ embedded_offset
, type
);
265 fprintf_filtered (stream
, "@");
266 fputs_filtered (paddress (gdbarch
, addr
), stream
);
267 if (options
->deref_ref
)
268 fputs_filtered (": ", stream
);
270 /* De-reference the reference. */
271 if (options
->deref_ref
)
273 if (TYPE_CODE (elttype
) != TYPE_CODE_UNDEF
)
275 struct value
*deref_val
=
277 (TYPE_TARGET_TYPE (type
),
278 unpack_pointer (type
, valaddr
+ embedded_offset
));
280 common_val_print (deref_val
, stream
, recurse
+ 1, options
,
284 fputs_filtered ("???", stream
);
288 case TYPE_CODE_UNION
:
289 if (recurse
&& !options
->unionprint
)
291 fprintf_filtered (stream
, "{...}");
295 case TYPE_CODE_STRUCT
:
296 if (options
->vtblprint
&& pascal_object_is_vtbl_ptr_type (type
))
298 /* Print the unmangled name if desired. */
299 /* Print vtable entry - we only get here if NOT using
300 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
301 /* Extract the address, assume that it is unsigned. */
302 print_address_demangle
304 extract_unsigned_integer (valaddr
+ embedded_offset
305 + TYPE_FIELD_BITPOS (type
,
306 VTBL_FNADDR_OFFSET
) / 8,
307 TYPE_LENGTH (TYPE_FIELD_TYPE (type
,
308 VTBL_FNADDR_OFFSET
)),
314 if (is_pascal_string_type (type
, &length_pos
, &length_size
,
315 &string_pos
, &char_type
, NULL
))
317 len
= extract_unsigned_integer (valaddr
+ embedded_offset
318 + length_pos
, length_size
,
320 LA_PRINT_STRING (stream
, char_type
,
321 valaddr
+ embedded_offset
+ string_pos
,
322 len
, NULL
, 0, options
);
325 pascal_object_print_value_fields (type
, valaddr
, embedded_offset
,
326 address
, stream
, recurse
,
327 original_value
, options
,
335 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
336 original_value
, options
, 0, stream
);
339 len
= TYPE_NFIELDS (type
);
340 val
= unpack_long (type
, valaddr
+ embedded_offset
);
341 for (i
= 0; i
< len
; i
++)
344 if (val
== TYPE_FIELD_BITPOS (type
, i
))
351 fputs_filtered (TYPE_FIELD_NAME (type
, i
), stream
);
355 print_longest (stream
, 'd', 0, val
);
359 case TYPE_CODE_FLAGS
:
361 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
362 original_value
, options
, 0, stream
);
364 val_print_type_code_flags (type
, valaddr
+ embedded_offset
, stream
);
370 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
371 original_value
, options
, 0, stream
);
374 /* FIXME, we should consider, at least for ANSI C language, eliminating
375 the distinction made between FUNCs and POINTERs to FUNCs. */
376 fprintf_filtered (stream
, "{");
377 type_print (type
, "", stream
, -1);
378 fprintf_filtered (stream
, "} ");
379 /* Try to print what function it points to, and its address. */
380 print_address_demangle (gdbarch
, address
, stream
, demangle
);
384 if (options
->format
|| options
->output_format
)
386 struct value_print_options opts
= *options
;
388 opts
.format
= (options
->format
? options
->format
389 : options
->output_format
);
390 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
391 original_value
, &opts
, 0, stream
);
395 val
= unpack_long (type
, valaddr
+ embedded_offset
);
397 fputs_filtered ("false", stream
);
399 fputs_filtered ("true", stream
);
402 fputs_filtered ("true (", stream
);
403 fprintf_filtered (stream
, "%ld)", (long int) val
);
408 case TYPE_CODE_RANGE
:
409 /* FIXME: create_range_type does not set the unsigned bit in a
410 range type (I think it probably should copy it from the target
411 type), so we won't print values which are too large to
412 fit in a signed integer correctly. */
413 /* FIXME: Doesn't handle ranges of enums correctly. (Can't just
414 print with the target type, though, because the size of our type
415 and the target type might differ). */
419 if (options
->format
|| options
->output_format
)
421 struct value_print_options opts
= *options
;
423 opts
.format
= (options
->format
? options
->format
424 : options
->output_format
);
425 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
426 original_value
, &opts
, 0, stream
);
430 val_print_type_code_int (type
, valaddr
+ embedded_offset
, stream
);
435 if (options
->format
|| options
->output_format
)
437 struct value_print_options opts
= *options
;
439 opts
.format
= (options
->format
? options
->format
440 : options
->output_format
);
441 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
442 original_value
, &opts
, 0, stream
);
446 val
= unpack_long (type
, valaddr
+ embedded_offset
);
447 if (TYPE_UNSIGNED (type
))
448 fprintf_filtered (stream
, "%u", (unsigned int) val
);
450 fprintf_filtered (stream
, "%d", (int) val
);
451 fputs_filtered (" ", stream
);
452 LA_PRINT_CHAR ((unsigned char) val
, type
, stream
);
459 val_print_scalar_formatted (type
, valaddr
, embedded_offset
,
460 original_value
, options
, 0, stream
);
464 print_floating (valaddr
+ embedded_offset
, type
, stream
);
468 case TYPE_CODE_BITSTRING
:
470 elttype
= TYPE_INDEX_TYPE (type
);
471 CHECK_TYPEDEF (elttype
);
472 if (TYPE_STUB (elttype
))
474 fprintf_filtered (stream
, "<incomplete type>");
480 struct type
*range
= elttype
;
481 LONGEST low_bound
, high_bound
;
483 int is_bitstring
= TYPE_CODE (type
) == TYPE_CODE_BITSTRING
;
487 fputs_filtered ("B'", stream
);
489 fputs_filtered ("[", stream
);
491 i
= get_discrete_bounds (range
, &low_bound
, &high_bound
);
492 if (low_bound
== 0 && high_bound
== -1 && TYPE_LENGTH (type
) > 0)
494 /* If we know the size of the set type, we can figure out the
497 high_bound
= TYPE_LENGTH (type
) * TARGET_CHAR_BIT
- 1;
498 TYPE_HIGH_BOUND (range
) = high_bound
;
503 fputs_filtered ("<error value>", stream
);
507 for (i
= low_bound
; i
<= high_bound
; i
++)
509 int element
= value_bit_index (type
,
510 valaddr
+ embedded_offset
, i
);
515 goto maybe_bad_bstring
;
518 fprintf_filtered (stream
, "%d", element
);
522 fputs_filtered (", ", stream
);
523 print_type_scalar (range
, i
, stream
);
526 if (i
+ 1 <= high_bound
527 && value_bit_index (type
,
528 valaddr
+ embedded_offset
, ++i
))
532 fputs_filtered ("..", stream
);
533 while (i
+ 1 <= high_bound
534 && value_bit_index (type
,
535 valaddr
+ embedded_offset
,
538 print_type_scalar (range
, j
, stream
);
544 fputs_filtered ("'", stream
);
546 fputs_filtered ("]", stream
);
551 fprintf_filtered (stream
, "void");
554 case TYPE_CODE_ERROR
:
555 fprintf_filtered (stream
, "%s", TYPE_ERROR_NAME (type
));
558 case TYPE_CODE_UNDEF
:
559 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
560 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
561 and no complete type for struct foo in that file. */
562 fprintf_filtered (stream
, "<incomplete type>");
566 error (_("Invalid pascal type code %d in symbol table."),
574 pascal_value_print (struct value
*val
, struct ui_file
*stream
,
575 const struct value_print_options
*options
)
577 struct type
*type
= value_type (val
);
578 struct value_print_options opts
= *options
;
582 /* If it is a pointer, indicate what it points to.
584 Print type also if it is a reference.
586 Object pascal: if it is a member pointer, we will take care
587 of that when we print it. */
588 if (TYPE_CODE (type
) == TYPE_CODE_PTR
589 || TYPE_CODE (type
) == TYPE_CODE_REF
)
591 /* Hack: remove (char *) for char strings. Their
592 type is indicated by the quoted string anyway. */
593 if (TYPE_CODE (type
) == TYPE_CODE_PTR
594 && TYPE_NAME (type
) == NULL
595 && TYPE_NAME (TYPE_TARGET_TYPE (type
)) != NULL
596 && strcmp (TYPE_NAME (TYPE_TARGET_TYPE (type
)), "char") == 0)
602 fprintf_filtered (stream
, "(");
603 type_print (type
, "", stream
, -1);
604 fprintf_filtered (stream
, ") ");
607 return common_val_print (val
, stream
, 0, &opts
, current_language
);
612 show_pascal_static_field_print (struct ui_file
*file
, int from_tty
,
613 struct cmd_list_element
*c
, const char *value
)
615 fprintf_filtered (file
, _("Printing of pascal static members is %s.\n"),
619 static struct obstack dont_print_vb_obstack
;
620 static struct obstack dont_print_statmem_obstack
;
622 static void pascal_object_print_static_field (struct value
*,
623 struct ui_file
*, int,
624 const struct value_print_options
*);
626 static void pascal_object_print_value (struct type
*, const gdb_byte
*,
628 CORE_ADDR
, struct ui_file
*, int,
629 const struct value
*,
630 const struct value_print_options
*,
633 /* It was changed to this after 2.4.5. */
634 const char pascal_vtbl_ptr_name
[] =
635 {'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0};
637 /* Return truth value for assertion that TYPE is of the type
638 "pointer to virtual function". */
641 pascal_object_is_vtbl_ptr_type (struct type
*type
)
643 char *typename
= type_name_no_tag (type
);
645 return (typename
!= NULL
646 && strcmp (typename
, pascal_vtbl_ptr_name
) == 0);
649 /* Return truth value for the assertion that TYPE is of the type
650 "pointer to virtual function table". */
653 pascal_object_is_vtbl_member (struct type
*type
)
655 if (TYPE_CODE (type
) == TYPE_CODE_PTR
)
657 type
= TYPE_TARGET_TYPE (type
);
658 if (TYPE_CODE (type
) == TYPE_CODE_ARRAY
)
660 type
= TYPE_TARGET_TYPE (type
);
661 if (TYPE_CODE (type
) == TYPE_CODE_STRUCT
/* If not using
663 || TYPE_CODE (type
) == TYPE_CODE_PTR
) /* If using thunks. */
665 /* Virtual functions tables are full of pointers
666 to virtual functions. */
667 return pascal_object_is_vtbl_ptr_type (type
);
674 /* Mutually recursive subroutines of pascal_object_print_value and
675 c_val_print to print out a structure's fields:
676 pascal_object_print_value_fields and pascal_object_print_value.
678 TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and OPTIONS have the
679 same meanings as in pascal_object_print_value and c_val_print.
681 DONT_PRINT is an array of baseclass types that we
682 should not print, or zero if called from top level. */
685 pascal_object_print_value_fields (struct type
*type
, const gdb_byte
*valaddr
,
687 CORE_ADDR address
, struct ui_file
*stream
,
689 const struct value
*val
,
690 const struct value_print_options
*options
,
691 struct type
**dont_print_vb
,
692 int dont_print_statmem
)
694 int i
, len
, n_baseclasses
;
695 char *last_dont_print
= obstack_next_free (&dont_print_statmem_obstack
);
697 CHECK_TYPEDEF (type
);
699 fprintf_filtered (stream
, "{");
700 len
= TYPE_NFIELDS (type
);
701 n_baseclasses
= TYPE_N_BASECLASSES (type
);
703 /* Print out baseclasses such that we don't print
704 duplicates of virtual baseclasses. */
705 if (n_baseclasses
> 0)
706 pascal_object_print_value (type
, valaddr
, offset
, address
,
707 stream
, recurse
+ 1, val
,
708 options
, dont_print_vb
);
710 if (!len
&& n_baseclasses
== 1)
711 fprintf_filtered (stream
, "<No data fields>");
714 struct obstack tmp_obstack
= dont_print_statmem_obstack
;
717 if (dont_print_statmem
== 0)
719 /* If we're at top level, carve out a completely fresh
720 chunk of the obstack and use that until this particular
721 invocation returns. */
722 obstack_finish (&dont_print_statmem_obstack
);
725 for (i
= n_baseclasses
; i
< len
; i
++)
727 /* If requested, skip printing of static fields. */
728 if (!options
->pascal_static_field_print
729 && field_is_static (&TYPE_FIELD (type
, i
)))
732 fprintf_filtered (stream
, ", ");
733 else if (n_baseclasses
> 0)
737 fprintf_filtered (stream
, "\n");
738 print_spaces_filtered (2 + 2 * recurse
, stream
);
739 fputs_filtered ("members of ", stream
);
740 fputs_filtered (type_name_no_tag (type
), stream
);
741 fputs_filtered (": ", stream
);
748 fprintf_filtered (stream
, "\n");
749 print_spaces_filtered (2 + 2 * recurse
, stream
);
753 wrap_here (n_spaces (2 + 2 * recurse
));
755 if (options
->inspect_it
)
757 if (TYPE_CODE (TYPE_FIELD_TYPE (type
, i
)) == TYPE_CODE_PTR
)
758 fputs_filtered ("\"( ptr \"", stream
);
760 fputs_filtered ("\"( nodef \"", stream
);
761 if (field_is_static (&TYPE_FIELD (type
, i
)))
762 fputs_filtered ("static ", stream
);
763 fprintf_symbol_filtered (stream
, TYPE_FIELD_NAME (type
, i
),
765 DMGL_PARAMS
| DMGL_ANSI
);
766 fputs_filtered ("\" \"", stream
);
767 fprintf_symbol_filtered (stream
, TYPE_FIELD_NAME (type
, i
),
769 DMGL_PARAMS
| DMGL_ANSI
);
770 fputs_filtered ("\") \"", stream
);
774 annotate_field_begin (TYPE_FIELD_TYPE (type
, i
));
776 if (field_is_static (&TYPE_FIELD (type
, i
)))
777 fputs_filtered ("static ", stream
);
778 fprintf_symbol_filtered (stream
, TYPE_FIELD_NAME (type
, i
),
780 DMGL_PARAMS
| DMGL_ANSI
);
781 annotate_field_name_end ();
782 fputs_filtered (" = ", stream
);
783 annotate_field_value ();
786 if (!field_is_static (&TYPE_FIELD (type
, i
))
787 && TYPE_FIELD_PACKED (type
, i
))
791 /* Bitfields require special handling, especially due to byte
793 if (TYPE_FIELD_IGNORE (type
, i
))
795 fputs_filtered ("<optimized out or zero length>", stream
);
797 else if (value_bits_synthetic_pointer (val
,
798 TYPE_FIELD_BITPOS (type
,
800 TYPE_FIELD_BITSIZE (type
,
803 fputs_filtered (_("<synthetic pointer>"), stream
);
805 else if (!value_bits_valid (val
, TYPE_FIELD_BITPOS (type
, i
),
806 TYPE_FIELD_BITSIZE (type
, i
)))
808 val_print_optimized_out (stream
);
812 struct value_print_options opts
= *options
;
814 v
= value_field_bitfield (type
, i
, valaddr
, offset
, val
);
817 common_val_print (v
, stream
, recurse
+ 1, &opts
,
823 if (TYPE_FIELD_IGNORE (type
, i
))
825 fputs_filtered ("<optimized out or zero length>", stream
);
827 else if (field_is_static (&TYPE_FIELD (type
, i
)))
829 /* struct value *v = value_static_field (type, i);
833 v
= value_field_bitfield (type
, i
, valaddr
, offset
, val
);
836 val_print_optimized_out (stream
);
838 pascal_object_print_static_field (v
, stream
, recurse
+ 1,
843 struct value_print_options opts
= *options
;
846 /* val_print (TYPE_FIELD_TYPE (type, i),
847 valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
848 address + TYPE_FIELD_BITPOS (type, i) / 8, 0,
849 stream, format, 0, recurse + 1, pretty); */
850 val_print (TYPE_FIELD_TYPE (type
, i
),
851 valaddr
, offset
+ TYPE_FIELD_BITPOS (type
, i
) / 8,
852 address
, stream
, recurse
+ 1, val
, &opts
,
856 annotate_field_end ();
859 if (dont_print_statmem
== 0)
861 /* Free the space used to deal with the printing
862 of the members from top level. */
863 obstack_free (&dont_print_statmem_obstack
, last_dont_print
);
864 dont_print_statmem_obstack
= tmp_obstack
;
869 fprintf_filtered (stream
, "\n");
870 print_spaces_filtered (2 * recurse
, stream
);
873 fprintf_filtered (stream
, "}");
876 /* Special val_print routine to avoid printing multiple copies of virtual
880 pascal_object_print_value (struct type
*type
, const gdb_byte
*valaddr
,
882 CORE_ADDR address
, struct ui_file
*stream
,
884 const struct value
*val
,
885 const struct value_print_options
*options
,
886 struct type
**dont_print_vb
)
888 struct type
**last_dont_print
889 = (struct type
**) obstack_next_free (&dont_print_vb_obstack
);
890 struct obstack tmp_obstack
= dont_print_vb_obstack
;
891 int i
, n_baseclasses
= TYPE_N_BASECLASSES (type
);
893 if (dont_print_vb
== 0)
895 /* If we're at top level, carve out a completely fresh
896 chunk of the obstack and use that until this particular
897 invocation returns. */
898 /* Bump up the high-water mark. Now alpha is omega. */
899 obstack_finish (&dont_print_vb_obstack
);
902 for (i
= 0; i
< n_baseclasses
; i
++)
905 struct type
*baseclass
= check_typedef (TYPE_BASECLASS (type
, i
));
906 char *basename
= type_name_no_tag (baseclass
);
907 const gdb_byte
*base_valaddr
= NULL
;
909 volatile struct gdb_exception ex
;
912 if (BASETYPE_VIA_VIRTUAL (type
, i
))
914 struct type
**first_dont_print
915 = (struct type
**) obstack_base (&dont_print_vb_obstack
);
917 int j
= (struct type
**) obstack_next_free (&dont_print_vb_obstack
)
921 if (baseclass
== first_dont_print
[j
])
924 obstack_ptr_grow (&dont_print_vb_obstack
, baseclass
);
929 TRY_CATCH (ex
, RETURN_MASK_ERROR
)
931 boffset
= baseclass_offset (type
, i
, valaddr
, offset
, address
, val
);
933 if (ex
.reason
< 0 && ex
.error
== NOT_AVAILABLE_ERROR
)
935 else if (ex
.reason
< 0)
941 /* The virtual base class pointer might have been clobbered by the
942 user program. Make sure that it still points to a valid memory
945 if (boffset
< 0 || boffset
>= TYPE_LENGTH (type
))
947 /* FIXME (alloc): not safe is baseclass is really really big. */
948 gdb_byte
*buf
= alloca (TYPE_LENGTH (baseclass
));
951 if (target_read_memory (address
+ boffset
, buf
,
952 TYPE_LENGTH (baseclass
)) != 0)
954 address
= address
+ boffset
;
959 base_valaddr
= valaddr
;
964 fprintf_filtered (stream
, "\n");
965 print_spaces_filtered (2 * recurse
, stream
);
967 fputs_filtered ("<", stream
);
968 /* Not sure what the best notation is in the case where there is no
971 fputs_filtered (basename
? basename
: "", stream
);
972 fputs_filtered ("> = ", stream
);
975 val_print_unavailable (stream
);
977 val_print_invalid_address (stream
);
979 pascal_object_print_value_fields (baseclass
, base_valaddr
,
980 thisoffset
+ boffset
, address
,
981 stream
, recurse
, val
, options
,
982 (struct type
**) obstack_base (&dont_print_vb_obstack
),
984 fputs_filtered (", ", stream
);
990 if (dont_print_vb
== 0)
992 /* Free the space used to deal with the printing
993 of this type from top level. */
994 obstack_free (&dont_print_vb_obstack
, last_dont_print
);
995 /* Reset watermark so that we can continue protecting
996 ourselves from whatever we were protecting ourselves. */
997 dont_print_vb_obstack
= tmp_obstack
;
1001 /* Print value of a static member.
1002 To avoid infinite recursion when printing a class that contains
1003 a static instance of the class, we keep the addresses of all printed
1004 static member classes in an obstack and refuse to print them more
1007 VAL contains the value to print, STREAM, RECURSE, and OPTIONS
1008 have the same meanings as in c_val_print. */
1011 pascal_object_print_static_field (struct value
*val
,
1012 struct ui_file
*stream
,
1014 const struct value_print_options
*options
)
1016 struct type
*type
= value_type (val
);
1017 struct value_print_options opts
;
1019 if (TYPE_CODE (type
) == TYPE_CODE_STRUCT
)
1021 CORE_ADDR
*first_dont_print
, addr
;
1025 = (CORE_ADDR
*) obstack_base (&dont_print_statmem_obstack
);
1026 i
= (CORE_ADDR
*) obstack_next_free (&dont_print_statmem_obstack
)
1031 if (value_address (val
) == first_dont_print
[i
])
1034 <same as static member of an already seen type>",
1040 addr
= value_address (val
);
1041 obstack_grow (&dont_print_statmem_obstack
, (char *) &addr
,
1042 sizeof (CORE_ADDR
));
1044 CHECK_TYPEDEF (type
);
1045 pascal_object_print_value_fields (type
,
1046 value_contents_for_printing (val
),
1047 value_embedded_offset (val
),
1050 val
, options
, NULL
, 1);
1056 common_val_print (val
, stream
, recurse
, &opts
, current_language
);
1059 /* -Wmissing-prototypes */
1060 extern initialize_file_ftype _initialize_pascal_valprint
;
1063 _initialize_pascal_valprint (void)
1065 add_setshow_boolean_cmd ("pascal_static-members", class_support
,
1066 &user_print_options
.pascal_static_field_print
, _("\
1067 Set printing of pascal static members."), _("\
1068 Show printing of pascal static members."), NULL
,
1070 show_pascal_static_field_print
,
1071 &setprintlist
, &showprintlist
);