1 /* Support for printing Ada values for GDB, the GNU debugger.
3 Copyright (C) 1986-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/>. */
21 #include "event-top.h"
22 #include "extract-store-integer.h"
24 #include "expression.h"
30 #include "target-float.h"
31 #include "cli/cli-style.h"
34 static int print_field_values (struct value
*, struct value
*,
35 struct ui_file
*, int,
36 const struct value_print_options
*,
37 int, const struct language_defn
*);
41 /* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
42 if non-standard (i.e., other than 1 for numbers, other than lower bound
43 of index type for enumerated type). Returns 1 if something printed,
47 print_optional_low_bound (struct ui_file
*stream
, struct type
*type
,
48 const struct value_print_options
*options
)
50 struct type
*index_type
;
54 if (options
->print_array_indexes
)
57 if (!get_array_bounds (type
, &low_bound
, &high_bound
))
60 /* If this is an empty array, then don't print the lower bound.
61 That would be confusing, because we would print the lower bound,
62 followed by... nothing! */
63 if (low_bound
> high_bound
)
66 index_type
= type
->index_type ();
68 while (index_type
->code () == TYPE_CODE_RANGE
)
70 /* We need to know what the base type is, in order to do the
71 appropriate check below. Otherwise, if this is a subrange
72 of an enumerated type, where the underlying value of the
73 first element is typically 0, we might test the low bound
74 against the wrong value. */
75 index_type
= index_type
->target_type ();
78 /* Don't print the lower bound if it's the default one. */
79 switch (index_type
->code ())
89 low_bound
= index_type
->field (low_bound
).loc_enumval ();
100 ada_print_scalar (index_type
, low_bound
, stream
);
101 gdb_printf (stream
, " => ");
105 /* Version of val_print_array_elements for GNAT-style packed arrays.
106 Prints elements of packed array of type TYPE from VALADDR on
107 STREAM. Formats according to OPTIONS and separates with commas.
108 RECURSE is the recursion (nesting) level. TYPE must have been
109 decoded (as by ada_coerce_to_simple_array). */
112 val_print_packed_array_elements (struct type
*type
, const gdb_byte
*valaddr
,
113 int offset
, struct ui_file
*stream
,
115 const struct value_print_options
*options
)
118 unsigned int things_printed
= 0;
120 struct type
*elttype
, *index_type
;
121 unsigned long bitsize
= type
->field (0).bitsize ();
124 scoped_value_mark mark
;
126 elttype
= type
->target_type ();
127 index_type
= type
->index_type ();
132 if (!get_discrete_bounds (index_type
, &low
, &high
))
136 /* The array length should normally be HIGH_POS - LOW_POS + 1.
137 But in Ada we allow LOW_POS to be greater than HIGH_POS for
138 empty arrays. In that situation, the array length is just zero,
143 len
= high
- low
+ 1;
146 if (index_type
->code () == TYPE_CODE_RANGE
)
147 index_type
= index_type
->target_type ();
150 annotate_array_section_begin (i
, elttype
);
152 while (i
< len
&& things_printed
< options
->print_max
)
154 /* Both this outer loop and the inner loop that checks for
155 duplicates may allocate many values. To avoid using too much
156 memory, both spots release values as they work. */
157 scoped_value_mark outer_free_values
;
159 struct value
*v0
, *v1
;
164 if (options
->prettyformat_arrays
)
166 gdb_printf (stream
, ",\n");
167 print_spaces (2 + 2 * recurse
, stream
);
171 gdb_printf (stream
, ", ");
174 else if (options
->prettyformat_arrays
)
176 gdb_printf (stream
, "\n");
177 print_spaces (2 + 2 * recurse
, stream
);
179 stream
->wrap_here (2 + 2 * recurse
);
180 maybe_print_array_index (index_type
, i
+ low
, stream
, options
);
183 v0
= ada_value_primitive_packed_val (NULL
, valaddr
+ offset
,
184 (i0
* bitsize
) / HOST_CHAR_BIT
,
185 (i0
* bitsize
) % HOST_CHAR_BIT
,
189 /* Make sure to free any values in the inner loop. */
190 scoped_value_mark free_values
;
195 v1
= ada_value_primitive_packed_val (NULL
, valaddr
+ offset
,
196 (i
* bitsize
) / HOST_CHAR_BIT
,
197 (i
* bitsize
) % HOST_CHAR_BIT
,
199 if (check_typedef (v0
->type ())->length ()
200 != check_typedef (v1
->type ())->length ())
202 if (!v0
->contents_eq (v0
->embedded_offset (),
203 v1
, v1
->embedded_offset (),
204 check_typedef (v0
->type ())->length ()))
208 if (i
- i0
> options
->repeat_count_threshold
)
210 struct value_print_options opts
= *options
;
212 opts
.deref_ref
= false;
213 common_val_print (v0
, stream
, recurse
+ 1, &opts
, current_language
);
214 annotate_elt_rep (i
- i0
);
215 gdb_printf (stream
, _(" %p[<repeats %u times>%p]"),
216 metadata_style
.style ().ptr (), i
- i0
, nullptr);
217 annotate_elt_rep_end ();
223 struct value_print_options opts
= *options
;
225 opts
.deref_ref
= false;
226 for (j
= i0
; j
< i
; j
+= 1)
230 if (options
->prettyformat_arrays
)
232 gdb_printf (stream
, ",\n");
233 print_spaces (2 + 2 * recurse
, stream
);
237 gdb_printf (stream
, ", ");
239 stream
->wrap_here (2 + 2 * recurse
);
240 maybe_print_array_index (index_type
, j
+ low
,
243 common_val_print (v0
, stream
, recurse
+ 1, &opts
,
248 things_printed
+= i
- i0
;
250 annotate_array_section_end ();
253 gdb_printf (stream
, "...");
257 /* Print the character C on STREAM as part of the contents of a literal
258 string whose delimiter is QUOTER. TYPE_LEN is the length in bytes
262 ada_emit_char (int c
, struct type
*type
, struct ui_file
*stream
,
263 int quoter
, int type_len
)
265 /* If this character fits in the normal ASCII range, and is
266 a printable character, then print the character as if it was
267 an ASCII character, even if this is a wide character.
268 The UCHAR_MAX check is necessary because the isascii function
269 requires that its argument have a value of an unsigned char,
270 or EOF (EOF is obviously not printable). */
271 if (c
<= UCHAR_MAX
&& isascii (c
) && isprint (c
))
273 if (c
== quoter
&& c
== '"')
274 gdb_printf (stream
, "\"\"");
276 gdb_printf (stream
, "%c", c
);
280 /* Follow GNAT's lead here and only use 6 digits for
281 wide_wide_character. */
282 gdb_printf (stream
, "[\"%0*x\"]", std::min (6, type_len
* 2), c
);
286 /* Character #I of STRING, given that TYPE_LEN is the size in bytes
290 char_at (const gdb_byte
*string
, int i
, int type_len
,
291 enum bfd_endian byte_order
)
296 return (int) extract_unsigned_integer (string
+ type_len
* i
,
297 type_len
, byte_order
);
300 /* Print a floating-point value of type TYPE, pointed to in GDB by
301 VALADDR, on STREAM. Use Ada formatting conventions: there must be
302 a decimal point, and at least one digit before and after the
303 point. We use the GNAT format for NaNs and infinities. */
306 ada_print_floating (const gdb_byte
*valaddr
, struct type
*type
,
307 struct ui_file
*stream
)
309 string_file tmp_stream
;
311 print_floating (valaddr
, type
, &tmp_stream
);
313 std::string s
= tmp_stream
.release ();
314 size_t skip_count
= 0;
316 /* Don't try to modify a result representing an error. */
319 gdb_puts (s
.c_str (), stream
);
323 /* Modify for Ada rules. */
325 size_t pos
= s
.find ("inf");
326 if (pos
== std::string::npos
)
327 pos
= s
.find ("Inf");
328 if (pos
== std::string::npos
)
329 pos
= s
.find ("INF");
330 if (pos
!= std::string::npos
)
331 s
.replace (pos
, 3, "Inf");
333 if (pos
== std::string::npos
)
335 pos
= s
.find ("nan");
336 if (pos
== std::string::npos
)
337 pos
= s
.find ("NaN");
338 if (pos
== std::string::npos
)
339 pos
= s
.find ("Nan");
340 if (pos
!= std::string::npos
)
342 s
[pos
] = s
[pos
+ 2] = 'N';
348 if (pos
== std::string::npos
349 && s
.find ('.') == std::string::npos
)
352 if (pos
== std::string::npos
)
353 gdb_printf (stream
, "%s.0", s
.c_str ());
355 gdb_printf (stream
, "%.*s.0%s", (int) pos
, s
.c_str (), &s
[pos
]);
358 gdb_printf (stream
, "%s", &s
[skip_count
]);
362 ada_printchar (int c
, struct type
*type
, struct ui_file
*stream
)
364 gdb_puts ("'", stream
);
365 ada_emit_char (c
, type
, stream
, '\'', type
->length ());
366 gdb_puts ("'", stream
);
369 /* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a
370 form appropriate for TYPE, if non-NULL. If TYPE is NULL, print VAL
371 like a default signed integer. */
374 ada_print_scalar (struct type
*type
, LONGEST val
, struct ui_file
*stream
)
378 print_longest (stream
, 'd', 0, val
);
382 type
= ada_check_typedef (type
);
384 switch (type
->code ())
389 std::optional
<LONGEST
> posn
= discrete_position (type
, val
);
390 if (posn
.has_value ())
391 fputs_styled (ada_enum_name (type
->field (*posn
).name ()),
392 variable_name_style
.style (), stream
);
394 print_longest (stream
, 'd', 0, val
);
399 print_longest (stream
, type
->is_unsigned () ? 'u' : 'd', 0, val
);
403 current_language
->printchar (val
, type
, stream
);
407 gdb_printf (stream
, val
? "true" : "false");
410 case TYPE_CODE_RANGE
:
411 ada_print_scalar (type
->target_type (), val
, stream
);
414 case TYPE_CODE_UNDEF
:
416 case TYPE_CODE_ARRAY
:
417 case TYPE_CODE_STRUCT
:
418 case TYPE_CODE_UNION
:
423 case TYPE_CODE_STRING
:
424 case TYPE_CODE_ERROR
:
425 case TYPE_CODE_MEMBERPTR
:
426 case TYPE_CODE_METHODPTR
:
427 case TYPE_CODE_METHOD
:
429 warning (_("internal error: unhandled type in ada_print_scalar"));
433 error (_("Invalid type code in symbol table."));
437 /* Print the character string STRING, printing at most LENGTH characters.
438 Printing stops early if the number hits print_max; repeat counts
439 are printed as appropriate. Print ellipses at the end if we
440 had to stop before printing LENGTH characters, or if FORCE_ELLIPSES.
441 TYPE_LEN is the length (1 or 2) of the character type. */
444 printstr (struct ui_file
*stream
, struct type
*elttype
, const gdb_byte
*string
,
445 unsigned int length
, int force_ellipses
, int type_len
,
446 const struct value_print_options
*options
)
448 enum bfd_endian byte_order
= type_byte_order (elttype
);
450 unsigned int things_printed
= 0;
456 gdb_puts ("\"\"", stream
);
460 unsigned int print_max_chars
= get_print_max_chars (options
);
461 for (i
= 0; i
< length
&& things_printed
< print_max_chars
; i
+= 1)
463 /* Position of the character we are examining
464 to see whether it is repeated. */
466 /* Number of repetitions we have detected so far. */
473 gdb_puts (", ", stream
);
480 && char_at (string
, rep1
, type_len
, byte_order
)
481 == char_at (string
, i
, type_len
, byte_order
))
487 if (reps
> options
->repeat_count_threshold
)
491 gdb_puts ("\", ", stream
);
494 gdb_puts ("'", stream
);
495 ada_emit_char (char_at (string
, i
, type_len
, byte_order
),
496 elttype
, stream
, '\'', type_len
);
497 gdb_puts ("'", stream
);
498 gdb_printf (stream
, _(" %p[<repeats %u times>%p]"),
499 metadata_style
.style ().ptr (), reps
, nullptr);
501 things_printed
+= options
->repeat_count_threshold
;
508 gdb_puts ("\"", stream
);
511 ada_emit_char (char_at (string
, i
, type_len
, byte_order
),
512 elttype
, stream
, '"', type_len
);
517 /* Terminate the quotes if necessary. */
519 gdb_puts ("\"", stream
);
521 if (force_ellipses
|| i
< length
)
522 gdb_puts ("...", stream
);
526 ada_printstr (struct ui_file
*stream
, struct type
*type
,
527 const gdb_byte
*string
, unsigned int length
,
528 const char *encoding
, int force_ellipses
,
529 const struct value_print_options
*options
)
531 printstr (stream
, type
, string
, length
, force_ellipses
, type
->length (),
536 print_variant_part (struct value
*value
, int field_num
,
537 struct value
*outer_value
,
538 struct ui_file
*stream
, int recurse
,
539 const struct value_print_options
*options
,
541 const struct language_defn
*language
)
543 struct type
*type
= value
->type ();
544 struct type
*var_type
= type
->field (field_num
).type ();
545 int which
= ada_which_variant_applies (var_type
, outer_value
);
550 struct value
*variant_field
= value_field (value
, field_num
);
551 struct value
*active_component
= value_field (variant_field
, which
);
552 return print_field_values (active_component
, outer_value
, stream
, recurse
,
553 options
, comma_needed
, language
);
556 /* Print out fields of VALUE.
558 STREAM, RECURSE, and OPTIONS have the same meanings as in
559 ada_print_value and ada_value_print.
561 OUTER_VALUE gives the enclosing record (used to get discriminant
562 values when printing variant parts).
564 COMMA_NEEDED is 1 if fields have been printed at the current recursion
565 level, so that a comma is needed before any field printed by this
568 Returns 1 if COMMA_NEEDED or any fields were printed. */
571 print_field_values (struct value
*value
, struct value
*outer_value
,
572 struct ui_file
*stream
, int recurse
,
573 const struct value_print_options
*options
,
575 const struct language_defn
*language
)
579 struct type
*type
= value
->type ();
580 len
= type
->num_fields ();
582 for (i
= 0; i
< len
; i
+= 1)
584 if (ada_is_ignored_field (type
, i
))
587 if (ada_is_wrapper_field (type
, i
))
589 struct value
*field_val
= ada_value_primitive_field (value
, 0,
592 print_field_values (field_val
, field_val
,
593 stream
, recurse
, options
,
594 comma_needed
, language
);
597 else if (ada_is_variant_part (type
, i
))
600 print_variant_part (value
, i
, outer_value
, stream
, recurse
,
601 options
, comma_needed
, language
);
606 gdb_printf (stream
, ", ");
609 if (options
->prettyformat
)
611 gdb_printf (stream
, "\n");
612 print_spaces (2 + 2 * recurse
, stream
);
616 stream
->wrap_here (2 + 2 * recurse
);
619 annotate_field_begin (type
->field (i
).type ());
620 gdb_printf (stream
, "%.*s",
621 ada_name_prefix_len (type
->field (i
).name ()),
622 type
->field (i
).name ());
623 annotate_field_name_end ();
624 gdb_puts (" => ", stream
);
625 annotate_field_value ();
627 if (type
->field (i
).is_packed ())
629 /* Bitfields require special handling, especially due to byte
631 if (type
->field (i
).is_ignored ())
633 fputs_styled (_("<optimized out or zero length>"),
634 metadata_style
.style (), stream
);
639 int bit_pos
= type
->field (i
).loc_bitpos ();
640 int bit_size
= type
->field (i
).bitsize ();
641 struct value_print_options opts
;
643 v
= ada_value_primitive_packed_val
645 bit_pos
/ HOST_CHAR_BIT
,
646 bit_pos
% HOST_CHAR_BIT
,
647 bit_size
, type
->field (i
).type ());
649 opts
.deref_ref
= false;
650 common_val_print (v
, stream
, recurse
+ 1, &opts
, language
);
655 struct value_print_options opts
= *options
;
657 opts
.deref_ref
= false;
659 struct value
*v
= value_field (value
, i
);
660 common_val_print (v
, stream
, recurse
+ 1, &opts
, language
);
662 annotate_field_end ();
668 /* Implement Ada val_print'ing for the case where TYPE is
669 a TYPE_CODE_ARRAY of characters. */
672 ada_val_print_string (struct type
*type
, const gdb_byte
*valaddr
,
674 struct ui_file
*stream
, int recurse
,
675 const struct value_print_options
*options
)
677 enum bfd_endian byte_order
= type_byte_order (type
);
678 struct type
*elttype
= type
->target_type ();
682 /* We know that ELTTYPE cannot possibly be null, because we assume
683 that we're called only when TYPE is a string-like type.
684 Similarly, the size of ELTTYPE should also be non-null, since
685 it's a character-like type. */
686 gdb_assert (elttype
!= NULL
);
687 gdb_assert (elttype
->length () != 0);
689 eltlen
= elttype
->length ();
690 len
= type
->length () / eltlen
;
692 /* If requested, look for the first null char and only print
693 elements up to it. */
694 if (options
->stop_print_at_null
)
696 unsigned int print_max_chars
= get_print_max_chars (options
);
699 /* Look for a NULL char. */
702 && temp_len
< print_max_chars
703 && char_at (valaddr
+ offset_aligned
,
704 temp_len
, eltlen
, byte_order
) != 0);
709 printstr (stream
, elttype
, valaddr
+ offset_aligned
, len
, 0,
713 /* Implement Ada value_print'ing for the case where TYPE is a
717 ada_value_print_ptr (struct value
*val
,
718 struct ui_file
*stream
, int recurse
,
719 const struct value_print_options
*options
)
722 && val
->type ()->target_type ()->code () == TYPE_CODE_INT
723 && val
->type ()->target_type ()->length () == 0)
725 gdb_puts ("null", stream
);
729 common_val_print (val
, stream
, recurse
, options
, language_def (language_c
));
731 struct type
*type
= ada_check_typedef (val
->type ());
732 if (ada_is_tag_type (type
))
734 gdb::unique_xmalloc_ptr
<char> name
= ada_tag_name (val
);
737 gdb_printf (stream
, " (%s)", name
.get ());
741 /* Implement Ada val_print'ing for the case where TYPE is
742 a TYPE_CODE_INT or TYPE_CODE_RANGE. */
745 ada_value_print_num (struct value
*val
, struct ui_file
*stream
, int recurse
,
746 const struct value_print_options
*options
)
748 struct type
*type
= ada_check_typedef (val
->type ());
749 const gdb_byte
*valaddr
= val
->contents_for_printing ().data ();
751 if (type
->code () == TYPE_CODE_RANGE
752 && (type
->target_type ()->code () == TYPE_CODE_ENUM
753 || type
->target_type ()->code () == TYPE_CODE_BOOL
754 || type
->target_type ()->code () == TYPE_CODE_CHAR
))
756 /* For enum-valued ranges, we want to recurse, because we'll end
757 up printing the constant's name rather than its numeric
758 value. Character and fixed-point types are also printed
759 differently, so recurse for those as well. */
760 struct type
*target_type
= type
->target_type ();
761 val
= value_cast (target_type
, val
);
762 common_val_print (val
, stream
, recurse
+ 1, options
,
763 language_def (language_ada
));
768 int format
= (options
->format
? options
->format
769 : options
->output_format
);
773 struct value_print_options opts
= *options
;
775 opts
.format
= format
;
776 value_print_scalar_formatted (val
, &opts
, 0, stream
);
778 else if (ada_is_system_address_type (type
))
780 /* FIXME: We want to print System.Address variables using
781 the same format as for any access type. But for some
782 reason GNAT encodes the System.Address type as an int,
783 so we have to work-around this deficiency by handling
784 System.Address values as a special case. */
786 struct gdbarch
*gdbarch
= type
->arch ();
787 struct type
*ptr_type
= builtin_type (gdbarch
)->builtin_data_ptr
;
788 CORE_ADDR addr
= extract_typed_address (valaddr
, ptr_type
);
790 gdb_printf (stream
, "(");
791 type_print (type
, "", stream
, -1);
792 gdb_printf (stream
, ") ");
793 gdb_puts (paddress (gdbarch
, addr
), stream
);
797 value_print_scalar_formatted (val
, options
, 0, stream
);
798 if (ada_is_character_type (type
))
802 gdb_puts (" ", stream
);
803 c
= unpack_long (type
, valaddr
);
804 ada_printchar (c
, type
, stream
);
811 /* Implement Ada val_print'ing for the case where TYPE is
815 ada_val_print_enum (struct value
*value
, struct ui_file
*stream
, int recurse
,
816 const struct value_print_options
*options
)
822 value_print_scalar_formatted (value
, options
, 0, stream
);
826 struct type
*type
= ada_check_typedef (value
->type ());
827 const gdb_byte
*valaddr
= value
->contents_for_printing ().data ();
828 int offset_aligned
= ada_aligned_value_addr (type
, valaddr
) - valaddr
;
830 val
= unpack_long (type
, valaddr
+ offset_aligned
);
831 std::optional
<LONGEST
> posn
= discrete_position (type
, val
);
832 if (posn
.has_value ())
834 const char *name
= ada_enum_name (type
->field (*posn
).name ());
837 gdb_printf (stream
, "%ld %ps", (long) val
,
838 styled_string (variable_name_style
.style (),
841 fputs_styled (name
, variable_name_style
.style (), stream
);
844 print_longest (stream
, 'd', 0, val
);
847 /* Implement Ada val_print'ing for the case where the type is
848 TYPE_CODE_STRUCT or TYPE_CODE_UNION. */
851 ada_val_print_struct_union (struct value
*value
,
852 struct ui_file
*stream
,
854 const struct value_print_options
*options
)
856 gdb_printf (stream
, "(");
858 if (print_field_values (value
, value
, stream
, recurse
, options
,
859 0, language_def (language_ada
)) != 0
860 && options
->prettyformat
)
862 gdb_printf (stream
, "\n");
863 print_spaces (2 * recurse
, stream
);
866 gdb_printf (stream
, ")");
869 /* Implement Ada value_print'ing for the case where TYPE is a
873 ada_value_print_array (struct value
*val
, struct ui_file
*stream
, int recurse
,
874 const struct value_print_options
*options
)
876 struct type
*type
= ada_check_typedef (val
->type ());
878 /* For an array of characters, print with string syntax. */
879 if (ada_is_string_type (type
)
880 && (options
->format
== 0 || options
->format
== 's'))
882 const gdb_byte
*valaddr
= val
->contents_for_printing ().data ();
883 int offset_aligned
= ada_aligned_value_addr (type
, valaddr
) - valaddr
;
885 ada_val_print_string (type
, valaddr
, offset_aligned
, stream
, recurse
,
890 gdb_printf (stream
, "(");
891 print_optional_low_bound (stream
, type
, options
);
893 if (val
->entirely_optimized_out ())
894 val_print_optimized_out (val
, stream
);
895 else if (type
->field (0).bitsize () > 0)
897 const gdb_byte
*valaddr
= val
->contents_for_printing ().data ();
898 int offset_aligned
= ada_aligned_value_addr (type
, valaddr
) - valaddr
;
899 val_print_packed_array_elements (type
, valaddr
, offset_aligned
,
900 stream
, recurse
, options
);
903 value_print_array_elements (val
, stream
, recurse
, options
, 0);
904 gdb_printf (stream
, ")");
907 /* Implement Ada val_print'ing for the case where TYPE is
911 ada_val_print_ref (struct type
*type
, const gdb_byte
*valaddr
,
912 int offset
, int offset_aligned
, CORE_ADDR address
,
913 struct ui_file
*stream
, int recurse
,
914 struct value
*original_value
,
915 const struct value_print_options
*options
)
917 /* For references, the debugger is expected to print the value as
918 an address if DEREF_REF is null. But printing an address in place
919 of the object value would be confusing to an Ada programmer.
920 So, for Ada values, we print the actual dereferenced value
922 struct type
*elttype
= check_typedef (type
->target_type ());
923 struct value
*deref_val
;
924 CORE_ADDR deref_val_int
;
926 if (elttype
->code () == TYPE_CODE_UNDEF
)
928 fputs_styled ("<ref to undefined type>", metadata_style
.style (),
933 deref_val
= coerce_ref_if_computed (original_value
);
936 if (ada_is_tagged_type (deref_val
->type (), 1))
937 deref_val
= ada_tag_value_at_base_address (deref_val
);
939 common_val_print (deref_val
, stream
, recurse
+ 1, options
,
940 language_def (language_ada
));
944 deref_val_int
= unpack_pointer (type
, valaddr
+ offset_aligned
);
945 if (deref_val_int
== 0)
947 gdb_puts ("(null)", stream
);
952 = ada_value_ind (value_from_pointer (lookup_pointer_type (elttype
),
954 if (ada_is_tagged_type (deref_val
->type (), 1))
955 deref_val
= ada_tag_value_at_base_address (deref_val
);
957 if (deref_val
->lazy ())
958 deref_val
->fetch_lazy ();
960 common_val_print (deref_val
, stream
, recurse
+ 1,
961 options
, language_def (language_ada
));
964 /* See the comment on ada_value_print. This function differs in that
965 it does not catch evaluation errors (leaving that to its
969 ada_value_print_inner (struct value
*val
, struct ui_file
*stream
, int recurse
,
970 const struct value_print_options
*options
)
972 struct type
*type
= ada_check_typedef (val
->type ());
974 if (ada_is_array_descriptor_type (type
)
975 || (ada_is_constrained_packed_array_type (type
)
976 && type
->code () != TYPE_CODE_PTR
))
978 /* If this is a reference, coerce it now. This helps taking
979 care of the case where ADDRESS is meaningless because
980 original_value was not an lval. */
981 val
= coerce_ref (val
);
982 val
= ada_get_decoded_value (val
);
985 gdb_assert (type
->code () == TYPE_CODE_TYPEDEF
);
986 gdb_printf (stream
, "0x0");
991 val
= ada_to_fixed_value (val
);
994 struct type
*saved_type
= type
;
996 const gdb_byte
*valaddr
= val
->contents_for_printing ().data ();
997 CORE_ADDR address
= val
->address ();
998 gdb::array_view
<const gdb_byte
> view
999 = gdb::make_array_view (valaddr
, type
->length ());
1000 type
= ada_check_typedef (resolve_dynamic_type (type
, view
, address
));
1001 if (type
!= saved_type
)
1004 val
->deprecated_set_type (type
);
1007 if (is_fixed_point_type (type
))
1008 type
= type
->fixed_point_type_base_type ();
1010 switch (type
->code ())
1013 common_val_print (val
, stream
, recurse
, options
,
1014 language_def (language_c
));
1018 ada_value_print_ptr (val
, stream
, recurse
, options
);
1022 case TYPE_CODE_RANGE
:
1023 ada_value_print_num (val
, stream
, recurse
, options
);
1026 case TYPE_CODE_ENUM
:
1027 ada_val_print_enum (val
, stream
, recurse
, options
);
1031 if (options
->format
)
1033 common_val_print (val
, stream
, recurse
, options
,
1034 language_def (language_c
));
1038 ada_print_floating (valaddr
, type
, stream
);
1041 case TYPE_CODE_UNION
:
1042 case TYPE_CODE_STRUCT
:
1043 ada_val_print_struct_union (val
, stream
, recurse
, options
);
1046 case TYPE_CODE_ARRAY
:
1047 ada_value_print_array (val
, stream
, recurse
, options
);
1051 ada_val_print_ref (type
, valaddr
, 0, 0,
1052 address
, stream
, recurse
, val
,
1059 ada_value_print (struct value
*val0
, struct ui_file
*stream
,
1060 const struct value_print_options
*options
)
1062 struct value
*val
= ada_to_fixed_value (val0
);
1063 struct type
*type
= ada_check_typedef (val
->type ());
1064 struct value_print_options opts
;
1066 /* If it is a pointer, indicate what it points to; but not for
1067 "void *" pointers. */
1068 if (type
->code () == TYPE_CODE_PTR
1069 && !(type
->target_type ()->code () == TYPE_CODE_INT
1070 && type
->target_type ()->length () == 0))
1072 /* Hack: don't print (char *) for char strings. Their
1073 type is indicated by the quoted string anyway. */
1074 if (type
->target_type ()->length () != sizeof (char)
1075 || type
->target_type ()->code () != TYPE_CODE_INT
1076 || type
->target_type ()->is_unsigned ())
1078 gdb_printf (stream
, "(");
1079 type_print (type
, "", stream
, -1);
1080 gdb_printf (stream
, ") ");
1083 else if (ada_is_array_descriptor_type (type
))
1085 /* We do not print the type description unless TYPE is an array
1086 access type (this is encoded by the compiler as a typedef to
1087 a fat pointer - hence the check against TYPE_CODE_TYPEDEF). */
1088 if (type
->code () == TYPE_CODE_TYPEDEF
)
1090 gdb_printf (stream
, "(");
1091 type_print (type
, "", stream
, -1);
1092 gdb_printf (stream
, ") ");
1097 opts
.deref_ref
= true;
1098 common_val_print (val
, stream
, 0, &opts
, current_language
);