1 /* Support for printing Pascal values for GDB, the GNU debugger.
3 Copyright (C) 2000-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
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
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 /* This file is derived from c-valprint.c */
22 #include "extract-store-integer.h"
23 #include "gdbsupport/gdb_obstack.h"
26 #include "expression.h"
29 #include "cli/cli-cmds.h"
33 #include "typeprint.h"
39 #include "cp-support.h"
41 #include "gdbsupport/byte-vector.h"
42 #include "cli/cli-style.h"
45 static void pascal_object_print_value_fields (struct value
*, struct ui_file
*,
47 const struct value_print_options
*,
50 /* Decorations for Pascal. */
52 static const struct generic_val_print_decorations p_decorations
=
67 pascal_language::value_print_inner (struct value
*val
,
68 struct ui_file
*stream
, int recurse
,
69 const struct value_print_options
*options
) const
72 struct type
*type
= check_typedef (val
->type ());
73 struct gdbarch
*gdbarch
= type
->arch ();
74 enum bfd_endian byte_order
= type_byte_order (type
);
75 unsigned int i
= 0; /* Number of characters printed */
79 int length_pos
, length_size
, string_pos
;
80 struct type
*char_type
;
83 const gdb_byte
*valaddr
= val
->contents_for_printing ().data ();
85 switch (type
->code ())
89 LONGEST low_bound
, high_bound
;
91 if (get_array_bounds (type
, &low_bound
, &high_bound
))
93 len
= high_bound
- low_bound
+ 1;
94 elttype
= check_typedef (type
->target_type ());
95 eltlen
= elttype
->length ();
96 /* If 's' format is used, try to print out as string.
97 If no format is given, print as string if element type
98 is of TYPE_CODE_CHAR and element size is 1,2 or 4. */
99 if (options
->format
== 's'
100 || ((eltlen
== 1 || eltlen
== 2 || eltlen
== 4)
101 && elttype
->code () == TYPE_CODE_CHAR
102 && options
->format
== 0))
104 /* If requested, look for the first null char and only print
105 elements up to it. */
106 if (options
->stop_print_at_null
)
108 unsigned int print_max_chars
109 = get_print_max_chars (options
);
110 unsigned int temp_len
;
112 /* Look for a NULL char. */
114 (extract_unsigned_integer
115 (valaddr
+ temp_len
* eltlen
, eltlen
, byte_order
)
117 && temp_len
< print_max_chars
);
122 printstr (stream
, type
->target_type (), valaddr
, len
,
128 gdb_printf (stream
, "{");
129 /* If this is a virtual function table, print the 0th
130 entry specially, and the rest of the members normally. */
131 if (pascal_object_is_vtbl_ptr_type (elttype
))
134 gdb_printf (stream
, "%d vtable entries", len
- 1);
140 value_print_array_elements (val
, stream
, recurse
, options
, i
);
141 gdb_printf (stream
, "}");
145 /* Array of unspecified length: treat like pointer to first elt. */
146 addr
= val
->address ();
148 goto print_unpacked_pointer
;
151 if (options
->format
&& options
->format
!= 's')
153 value_print_scalar_formatted (val
, options
, 0, stream
);
156 if (options
->vtblprint
&& pascal_object_is_vtbl_ptr_type (type
))
158 /* Print the unmangled name if desired. */
159 /* Print vtable entry - we only get here if we ARE using
160 -fvtable_thunks. (Otherwise, look under TYPE_CODE_STRUCT.) */
161 /* Extract the address, assume that it is unsigned. */
162 addr
= extract_unsigned_integer (valaddr
,
163 type
->length (), byte_order
);
164 print_address_demangle (options
, gdbarch
, addr
, stream
, demangle
);
167 check_typedef (type
->target_type ());
169 addr
= unpack_pointer (type
, valaddr
);
170 print_unpacked_pointer
:
171 elttype
= check_typedef (type
->target_type ());
173 if (elttype
->code () == TYPE_CODE_FUNC
)
175 /* Try to print what function it points to. */
176 print_address_demangle (options
, gdbarch
, addr
, stream
, demangle
);
180 if (options
->addressprint
&& options
->format
!= 's')
182 gdb_puts (paddress (gdbarch
, addr
), stream
);
186 /* For a pointer to char or unsigned char, also print the string
187 pointed to, unless pointer is null. */
188 if (((elttype
->length () == 1
189 && (elttype
->code () == TYPE_CODE_INT
190 || elttype
->code () == TYPE_CODE_CHAR
))
191 || ((elttype
->length () == 2 || elttype
->length () == 4)
192 && elttype
->code () == TYPE_CODE_CHAR
))
193 && (options
->format
== 0 || options
->format
== 's')
197 gdb_puts (" ", stream
);
198 /* No wide string yet. */
199 i
= val_print_string (elttype
, NULL
, addr
, -1, stream
, options
);
201 /* Also for pointers to pascal strings. */
202 /* Note: this is Free Pascal specific:
203 as GDB does not recognize stabs pascal strings
204 Pascal strings are mapped to records
205 with lowercase names PM. */
206 if (pascal_is_string_type (elttype
, &length_pos
, &length_size
,
207 &string_pos
, &char_type
, NULL
) > 0
210 ULONGEST string_length
;
214 gdb_puts (" ", stream
);
215 buffer
= (gdb_byte
*) xmalloc (length_size
);
216 read_memory (addr
+ length_pos
, buffer
, length_size
);
217 string_length
= extract_unsigned_integer (buffer
, length_size
,
220 i
= val_print_string (char_type
, NULL
,
221 addr
+ string_pos
, string_length
,
224 else if (pascal_object_is_vtbl_member (type
))
226 /* Print vtbl's nicely. */
227 CORE_ADDR vt_address
= unpack_pointer (type
, valaddr
);
228 struct bound_minimal_symbol msymbol
=
229 lookup_minimal_symbol_by_pc (vt_address
);
231 /* If 'symbol_print' is set, we did the work above. */
232 if (!options
->symbol_print
233 && (msymbol
.minsym
!= NULL
)
234 && (vt_address
== msymbol
.value_address ()))
237 gdb_puts (" ", stream
);
238 gdb_puts ("<", stream
);
239 gdb_puts (msymbol
.minsym
->print_name (), stream
);
240 gdb_puts (">", stream
);
243 if (vt_address
&& options
->vtblprint
)
245 struct value
*vt_val
;
246 struct symbol
*wsym
= NULL
;
250 gdb_puts (" ", stream
);
252 if (msymbol
.minsym
!= NULL
)
254 const char *search_name
= msymbol
.minsym
->search_name ();
255 wsym
= lookup_symbol_search_name (search_name
, NULL
,
261 wtype
= wsym
->type ();
265 wtype
= type
->target_type ();
267 vt_val
= value_at (wtype
, vt_address
);
268 common_val_print (vt_val
, stream
, recurse
+ 1, options
,
270 if (options
->prettyformat
)
272 gdb_printf (stream
, "\n");
273 print_spaces (2 + 2 * recurse
, stream
);
282 case TYPE_CODE_FLAGS
:
284 case TYPE_CODE_RANGE
:
288 case TYPE_CODE_ERROR
:
289 case TYPE_CODE_UNDEF
:
292 generic_value_print (val
, stream
, recurse
, options
, &p_decorations
);
295 case TYPE_CODE_UNION
:
296 if (recurse
&& !options
->unionprint
)
298 gdb_printf (stream
, "{...}");
302 case TYPE_CODE_STRUCT
:
303 if (options
->vtblprint
&& pascal_object_is_vtbl_ptr_type (type
))
305 /* Print the unmangled name if desired. */
306 /* Print vtable entry - we only get here if NOT using
307 -fvtable_thunks. (Otherwise, look under TYPE_CODE_PTR.) */
308 /* Extract the address, assume that it is unsigned. */
309 print_address_demangle
311 extract_unsigned_integer
312 (valaddr
+ type
->field (VTBL_FNADDR_OFFSET
).loc_bitpos () / 8,
313 type
->field (VTBL_FNADDR_OFFSET
).type ()->length (),
319 if (pascal_is_string_type (type
, &length_pos
, &length_size
,
320 &string_pos
, &char_type
, NULL
) > 0)
322 len
= extract_unsigned_integer (valaddr
+ length_pos
,
323 length_size
, byte_order
);
324 printstr (stream
, char_type
, valaddr
+ string_pos
, len
,
328 pascal_object_print_value_fields (val
, stream
, recurse
,
334 elttype
= type
->index_type ();
335 elttype
= check_typedef (elttype
);
336 if (elttype
->is_stub ())
338 fprintf_styled (stream
, metadata_style
.style (), "<incomplete type>");
343 struct type
*range
= elttype
;
344 LONGEST low_bound
, high_bound
;
347 gdb_puts ("[", stream
);
349 int bound_info
= (get_discrete_bounds (range
, &low_bound
, &high_bound
)
351 if (low_bound
== 0 && high_bound
== -1 && type
->length () > 0)
353 /* If we know the size of the set type, we can figure out the
356 high_bound
= type
->length () * TARGET_CHAR_BIT
- 1;
357 range
->bounds ()->high
.set_const_val (high_bound
);
362 fputs_styled ("<error value>", metadata_style
.style (), stream
);
366 for (i
= low_bound
; i
<= high_bound
; i
++)
368 int element
= value_bit_index (type
, valaddr
, i
);
373 goto maybe_bad_bstring
;
378 gdb_puts (", ", stream
);
379 print_type_scalar (range
, i
, stream
);
382 if (i
+ 1 <= high_bound
383 && value_bit_index (type
, valaddr
, ++i
))
387 gdb_puts ("..", stream
);
388 while (i
+ 1 <= high_bound
389 && value_bit_index (type
, valaddr
, ++i
))
391 print_type_scalar (range
, j
, stream
);
396 gdb_puts ("]", stream
);
401 error (_("Invalid pascal type code %d in symbol table."),
408 pascal_language::value_print (struct value
*val
, struct ui_file
*stream
,
409 const struct value_print_options
*options
) const
411 struct type
*type
= val
->type ();
412 struct value_print_options opts
= *options
;
414 opts
.deref_ref
= true;
416 /* If it is a pointer, indicate what it points to.
418 Print type also if it is a reference.
420 Object pascal: if it is a member pointer, we will take care
421 of that when we print it. */
422 if (type
->code () == TYPE_CODE_PTR
423 || type
->code () == TYPE_CODE_REF
)
425 /* Hack: remove (char *) for char strings. Their
426 type is indicated by the quoted string anyway. */
427 if (type
->code () == TYPE_CODE_PTR
428 && type
->name () == NULL
429 && type
->target_type ()->name () != NULL
430 && strcmp (type
->target_type ()->name (), "char") == 0)
436 gdb_printf (stream
, "(");
437 type_print (type
, "", stream
, -1);
438 gdb_printf (stream
, ") ");
441 common_val_print (val
, stream
, 0, &opts
, current_language
);
446 show_pascal_static_field_print (struct ui_file
*file
, int from_tty
,
447 struct cmd_list_element
*c
, const char *value
)
449 gdb_printf (file
, _("Printing of pascal static members is %s.\n"),
453 static struct obstack dont_print_vb_obstack
;
454 static struct obstack dont_print_statmem_obstack
;
456 static void pascal_object_print_static_field (struct value
*,
457 struct ui_file
*, int,
458 const struct value_print_options
*);
460 static void pascal_object_print_value (struct value
*, struct ui_file
*, int,
461 const struct value_print_options
*,
464 /* It was changed to this after 2.4.5. */
465 const char pascal_vtbl_ptr_name
[] =
466 {'_', '_', 'v', 't', 'b', 'l', '_', 'p', 't', 'r', '_', 't', 'y', 'p', 'e', 0};
468 /* Return truth value for assertion that TYPE is of the type
469 "pointer to virtual function". */
472 pascal_object_is_vtbl_ptr_type (struct type
*type
)
474 const char *type_name
= type
->name ();
476 return (type_name
!= NULL
477 && strcmp (type_name
, pascal_vtbl_ptr_name
) == 0);
480 /* Return truth value for the assertion that TYPE is of the type
481 "pointer to virtual function table". */
484 pascal_object_is_vtbl_member (struct type
*type
)
486 if (type
->code () == TYPE_CODE_PTR
)
488 type
= type
->target_type ();
489 if (type
->code () == TYPE_CODE_ARRAY
)
491 type
= type
->target_type ();
492 if (type
->code () == TYPE_CODE_STRUCT
/* If not using
494 || type
->code () == TYPE_CODE_PTR
) /* If using thunks. */
496 /* Virtual functions tables are full of pointers
497 to virtual functions. */
498 return pascal_object_is_vtbl_ptr_type (type
);
505 /* Helper function for print pascal objects.
507 VAL, STREAM, RECURSE, and OPTIONS have the same meanings as in
508 pascal_object_print_value and c_value_print.
510 DONT_PRINT is an array of baseclass types that we
511 should not print, or zero if called from top level. */
514 pascal_object_print_value_fields (struct value
*val
, struct ui_file
*stream
,
516 const struct value_print_options
*options
,
517 struct type
**dont_print_vb
,
518 int dont_print_statmem
)
520 int i
, len
, n_baseclasses
;
521 char *last_dont_print
522 = (char *) obstack_next_free (&dont_print_statmem_obstack
);
524 struct type
*type
= check_typedef (val
->type ());
526 gdb_printf (stream
, "{");
527 len
= type
->num_fields ();
528 n_baseclasses
= TYPE_N_BASECLASSES (type
);
530 /* Print out baseclasses such that we don't print
531 duplicates of virtual baseclasses. */
532 if (n_baseclasses
> 0)
533 pascal_object_print_value (val
, stream
, recurse
+ 1,
534 options
, dont_print_vb
);
536 if (!len
&& n_baseclasses
== 1)
537 fprintf_styled (stream
, metadata_style
.style (), "<No data fields>");
540 struct obstack tmp_obstack
= dont_print_statmem_obstack
;
542 const gdb_byte
*valaddr
= val
->contents_for_printing ().data ();
544 if (dont_print_statmem
== 0)
546 /* If we're at top level, carve out a completely fresh
547 chunk of the obstack and use that until this particular
548 invocation returns. */
549 obstack_finish (&dont_print_statmem_obstack
);
552 for (i
= n_baseclasses
; i
< len
; i
++)
554 /* If requested, skip printing of static fields. */
555 if (!options
->pascal_static_field_print
556 && type
->field (i
).is_static ())
559 gdb_printf (stream
, ", ");
560 else if (n_baseclasses
> 0)
562 if (options
->prettyformat
)
564 gdb_printf (stream
, "\n");
565 print_spaces (2 + 2 * recurse
, stream
);
566 gdb_puts ("members of ", stream
);
567 gdb_puts (type
->name (), stream
);
568 gdb_puts (": ", stream
);
573 if (options
->prettyformat
)
575 gdb_printf (stream
, "\n");
576 print_spaces (2 + 2 * recurse
, stream
);
580 stream
->wrap_here (2 + 2 * recurse
);
583 annotate_field_begin (type
->field (i
).type ());
585 if (type
->field (i
).is_static ())
587 gdb_puts ("static ", stream
);
588 fprintf_symbol (stream
,
589 type
->field (i
).name (),
590 current_language
->la_language
,
591 DMGL_PARAMS
| DMGL_ANSI
);
594 fputs_styled (type
->field (i
).name (),
595 variable_name_style
.style (), stream
);
596 annotate_field_name_end ();
597 gdb_puts (" = ", stream
);
598 annotate_field_value ();
600 if (!type
->field (i
).is_static ()
601 && type
->field (i
).is_packed ())
605 /* Bitfields require special handling, especially due to byte
607 if (type
->field (i
).is_ignored ())
609 fputs_styled ("<optimized out or zero length>",
610 metadata_style
.style (), stream
);
612 else if (val
->bits_synthetic_pointer
613 (type
->field (i
).loc_bitpos (),
614 type
->field (i
).bitsize ()))
616 fputs_styled (_("<synthetic pointer>"),
617 metadata_style
.style (), stream
);
621 struct value_print_options opts
= *options
;
623 v
= value_field_bitfield (type
, i
, valaddr
, 0, val
);
625 opts
.deref_ref
= false;
626 common_val_print (v
, stream
, recurse
+ 1, &opts
,
632 if (type
->field (i
).is_ignored ())
634 fputs_styled ("<optimized out or zero length>",
635 metadata_style
.style (), stream
);
637 else if (type
->field (i
).is_static ())
639 /* struct value *v = value_static_field (type, i);
643 v
= value_field_bitfield (type
, i
, valaddr
, 0, val
);
646 val_print_optimized_out (NULL
, stream
);
648 pascal_object_print_static_field (v
, stream
, recurse
+ 1,
653 struct value_print_options opts
= *options
;
655 opts
.deref_ref
= false;
657 struct value
*v
= val
->primitive_field (0, i
,
659 common_val_print (v
, stream
, recurse
+ 1, &opts
,
663 annotate_field_end ();
666 if (dont_print_statmem
== 0)
668 /* Free the space used to deal with the printing
669 of the members from top level. */
670 obstack_free (&dont_print_statmem_obstack
, last_dont_print
);
671 dont_print_statmem_obstack
= tmp_obstack
;
674 if (options
->prettyformat
)
676 gdb_printf (stream
, "\n");
677 print_spaces (2 * recurse
, stream
);
680 gdb_printf (stream
, "}");
683 /* Special val_print routine to avoid printing multiple copies of virtual
687 pascal_object_print_value (struct value
*val
, struct ui_file
*stream
,
689 const struct value_print_options
*options
,
690 struct type
**dont_print_vb
)
692 struct type
**last_dont_print
693 = (struct type
**) obstack_next_free (&dont_print_vb_obstack
);
694 struct obstack tmp_obstack
= dont_print_vb_obstack
;
695 struct type
*type
= check_typedef (val
->type ());
696 int i
, n_baseclasses
= TYPE_N_BASECLASSES (type
);
698 if (dont_print_vb
== 0)
700 /* If we're at top level, carve out a completely fresh
701 chunk of the obstack and use that until this particular
702 invocation returns. */
703 /* Bump up the high-water mark. Now alpha is omega. */
704 obstack_finish (&dont_print_vb_obstack
);
707 for (i
= 0; i
< n_baseclasses
; i
++)
710 struct type
*baseclass
= check_typedef (TYPE_BASECLASS (type
, i
));
711 const char *basename
= baseclass
->name ();
714 if (BASETYPE_VIA_VIRTUAL (type
, i
))
716 struct type
**first_dont_print
717 = (struct type
**) obstack_base (&dont_print_vb_obstack
);
719 int j
= (struct type
**) obstack_next_free (&dont_print_vb_obstack
)
723 if (baseclass
== first_dont_print
[j
])
726 obstack_ptr_grow (&dont_print_vb_obstack
, baseclass
);
729 struct value
*base_value
;
732 base_value
= val
->primitive_field (0, i
, type
);
734 catch (const gdb_exception_error
&ex
)
736 base_value
= nullptr;
737 if (ex
.error
== NOT_AVAILABLE_ERROR
)
745 /* The virtual base class pointer might have been clobbered by the
746 user program. Make sure that it still points to a valid memory
749 if (boffset
< 0 || boffset
>= type
->length ())
751 CORE_ADDR address
= val
->address ();
752 gdb::byte_vector
buf (baseclass
->length ());
754 if (target_read_memory (address
+ boffset
, buf
.data (),
755 baseclass
->length ()) != 0)
757 base_value
= value_from_contents_and_address (baseclass
,
760 baseclass
= base_value
->type ();
765 if (options
->prettyformat
)
767 gdb_printf (stream
, "\n");
768 print_spaces (2 * recurse
, stream
);
770 gdb_puts ("<", stream
);
771 /* Not sure what the best notation is in the case where there is no
774 gdb_puts (basename
? basename
: "", stream
);
775 gdb_puts ("> = ", stream
);
778 val_print_unavailable (stream
);
780 val_print_invalid_address (stream
);
782 pascal_object_print_value_fields
783 (base_value
, stream
, recurse
, options
,
784 (struct type
**) obstack_base (&dont_print_vb_obstack
),
786 gdb_puts (", ", stream
);
792 if (dont_print_vb
== 0)
794 /* Free the space used to deal with the printing
795 of this type from top level. */
796 obstack_free (&dont_print_vb_obstack
, last_dont_print
);
797 /* Reset watermark so that we can continue protecting
798 ourselves from whatever we were protecting ourselves. */
799 dont_print_vb_obstack
= tmp_obstack
;
803 /* Print value of a static member.
804 To avoid infinite recursion when printing a class that contains
805 a static instance of the class, we keep the addresses of all printed
806 static member classes in an obstack and refuse to print them more
809 VAL contains the value to print, STREAM, RECURSE, and OPTIONS
810 have the same meanings as in c_val_print. */
813 pascal_object_print_static_field (struct value
*val
,
814 struct ui_file
*stream
,
816 const struct value_print_options
*options
)
818 struct type
*type
= val
->type ();
819 struct value_print_options opts
;
821 if (val
->entirely_optimized_out ())
823 val_print_optimized_out (val
, stream
);
827 if (type
->code () == TYPE_CODE_STRUCT
)
829 CORE_ADDR
*first_dont_print
, addr
;
833 = (CORE_ADDR
*) obstack_base (&dont_print_statmem_obstack
);
834 i
= (CORE_ADDR
*) obstack_next_free (&dont_print_statmem_obstack
)
839 if (val
->address () == first_dont_print
[i
])
842 <same as static member of an already seen type>"),
843 metadata_style
.style (), stream
);
848 addr
= val
->address ();
849 obstack_grow (&dont_print_statmem_obstack
, (char *) &addr
,
852 type
= check_typedef (type
);
853 pascal_object_print_value_fields (val
, stream
, recurse
,
859 opts
.deref_ref
= false;
860 common_val_print (val
, stream
, recurse
, &opts
, current_language
);
863 void _initialize_pascal_valprint ();
865 _initialize_pascal_valprint ()
867 add_setshow_boolean_cmd ("pascal_static-members", class_support
,
868 &user_print_options
.pascal_static_field_print
, _("\
869 Set printing of pascal static members."), _("\
870 Show printing of pascal static members."), NULL
,
872 show_pascal_static_field_print
,
873 &setprintlist
, &showprintlist
);