1 /* Support for printing Ada values for GDB, the GNU debugger.
3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1997, 2001, 2002,
4 2003, 2004, 2005, 2006, 2007, 2008, 2009 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/>. */
23 #include "gdb_string.h"
26 #include "expression.h"
35 #include "exceptions.h"
38 /* Encapsulates arguments to ada_val_print. */
39 struct ada_val_print_args
42 const gdb_byte
*valaddr0
;
45 struct ui_file
*stream
;
47 const struct value_print_options
*options
;
50 static void print_record (struct type
*, const gdb_byte
*, struct ui_file
*,
51 int, const struct value_print_options
*);
53 static int print_field_values (struct type
*, const gdb_byte
*,
54 struct ui_file
*, int,
55 const struct value_print_options
*,
59 static void adjust_type_signedness (struct type
*);
61 static int ada_val_print_stub (void *args0
);
63 static int ada_val_print_1 (struct type
*, const gdb_byte
*, int, CORE_ADDR
,
64 struct ui_file
*, int,
65 const struct value_print_options
*);
68 /* Make TYPE unsigned if its range of values includes no negatives. */
70 adjust_type_signedness (struct type
*type
)
72 if (type
!= NULL
&& TYPE_CODE (type
) == TYPE_CODE_RANGE
73 && TYPE_LOW_BOUND (type
) >= 0)
74 TYPE_UNSIGNED (type
) = 1;
77 /* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
78 if non-standard (i.e., other than 1 for numbers, other than lower bound
79 of index type for enumerated type). Returns 1 if something printed,
83 print_optional_low_bound (struct ui_file
*stream
, struct type
*type
,
84 const struct value_print_options
*options
)
86 struct type
*index_type
;
90 if (options
->print_array_indexes
)
93 if (!get_array_bounds (type
, &low_bound
, &high_bound
))
96 /* If this is an empty array, then don't print the lower bound.
97 That would be confusing, because we would print the lower bound,
98 followed by... nothing! */
99 if (low_bound
> high_bound
)
102 index_type
= TYPE_INDEX_TYPE (type
);
104 if (TYPE_CODE (index_type
) == TYPE_CODE_RANGE
)
106 /* We need to know what the base type is, in order to do the
107 appropriate check below. Otherwise, if this is a subrange
108 of an enumerated type, where the underlying value of the
109 first element is typically 0, we might test the low bound
110 against the wrong value. */
111 index_type
= TYPE_TARGET_TYPE (index_type
);
114 switch (TYPE_CODE (index_type
))
121 if (low_bound
== TYPE_FIELD_BITPOS (index_type
, 0))
124 case TYPE_CODE_UNDEF
:
125 index_type
= builtin_type_int32
;
133 ada_print_scalar (index_type
, (LONGEST
) low_bound
, stream
);
134 fprintf_filtered (stream
, " => ");
138 /* Version of val_print_array_elements for GNAT-style packed arrays.
139 Prints elements of packed array of type TYPE at bit offset
140 BITOFFSET from VALADDR on STREAM. Formats according to OPTIONS and
141 separates with commas. RECURSE is the recursion (nesting) level.
142 TYPE must have been decoded (as by ada_coerce_to_simple_array). */
145 val_print_packed_array_elements (struct type
*type
, const gdb_byte
*valaddr
,
146 int bitoffset
, struct ui_file
*stream
,
148 const struct value_print_options
*options
)
151 unsigned int things_printed
= 0;
153 struct type
*elttype
, *index_type
;
155 unsigned long bitsize
= TYPE_FIELD_BITSIZE (type
, 0);
156 struct value
*mark
= value_mark ();
159 elttype
= TYPE_TARGET_TYPE (type
);
160 eltlen
= TYPE_LENGTH (check_typedef (elttype
));
161 index_type
= TYPE_INDEX_TYPE (type
);
165 if (get_discrete_bounds (index_type
, &low
, &high
) < 0)
168 len
= high
- low
+ 1;
172 annotate_array_section_begin (i
, elttype
);
174 while (i
< len
&& things_printed
< options
->print_max
)
176 struct value
*v0
, *v1
;
181 if (options
->prettyprint_arrays
)
183 fprintf_filtered (stream
, ",\n");
184 print_spaces_filtered (2 + 2 * recurse
, stream
);
188 fprintf_filtered (stream
, ", ");
191 wrap_here (n_spaces (2 + 2 * recurse
));
192 maybe_print_array_index (index_type
, i
+ low
, stream
, options
);
195 v0
= ada_value_primitive_packed_val (NULL
, valaddr
,
196 (i0
* bitsize
) / HOST_CHAR_BIT
,
197 (i0
* bitsize
) % HOST_CHAR_BIT
,
204 v1
= ada_value_primitive_packed_val (NULL
, valaddr
,
205 (i
* bitsize
) / HOST_CHAR_BIT
,
206 (i
* bitsize
) % HOST_CHAR_BIT
,
208 if (memcmp (value_contents (v0
), value_contents (v1
), eltlen
) != 0)
212 if (i
- i0
> options
->repeat_count_threshold
)
214 struct value_print_options opts
= *options
;
216 val_print (elttype
, value_contents (v0
), 0, 0, stream
,
217 recurse
+ 1, &opts
, current_language
);
218 annotate_elt_rep (i
- i0
);
219 fprintf_filtered (stream
, _(" <repeats %u times>"), i
- i0
);
220 annotate_elt_rep_end ();
226 struct value_print_options opts
= *options
;
228 for (j
= i0
; j
< i
; j
+= 1)
232 if (options
->prettyprint_arrays
)
234 fprintf_filtered (stream
, ",\n");
235 print_spaces_filtered (2 + 2 * recurse
, stream
);
239 fprintf_filtered (stream
, ", ");
241 wrap_here (n_spaces (2 + 2 * recurse
));
242 maybe_print_array_index (index_type
, j
+ low
,
245 val_print (elttype
, value_contents (v0
), 0, 0, stream
,
246 recurse
+ 1, &opts
, current_language
);
250 things_printed
+= i
- i0
;
252 annotate_array_section_end ();
255 fprintf_filtered (stream
, "...");
258 value_free_to_mark (mark
);
262 printable_val_type (struct type
*type
, const gdb_byte
*valaddr
)
264 return ada_to_fixed_type (ada_aligned_type (type
), valaddr
, 0, NULL
, 1);
267 /* Print the character C on STREAM as part of the contents of a literal
268 string whose delimiter is QUOTER. TYPE_LEN is the length in bytes
269 (1 or 2) of the character. */
272 ada_emit_char (int c
, struct type
*type
, struct ui_file
*stream
,
273 int quoter
, int type_len
)
278 c
&= (1 << (type_len
* TARGET_CHAR_BIT
)) - 1;
280 if (isascii (c
) && isprint (c
))
282 if (c
== quoter
&& c
== '"')
283 fprintf_filtered (stream
, "\"\"");
285 fprintf_filtered (stream
, "%c", c
);
288 fprintf_filtered (stream
, "[\"%0*x\"]", type_len
* 2, c
);
291 /* Character #I of STRING, given that TYPE_LEN is the size in bytes (1
292 or 2) of a character. */
295 char_at (const gdb_byte
*string
, int i
, int type_len
)
300 return (int) extract_unsigned_integer (string
+ 2 * i
, 2);
303 /* Wrapper around memcpy to make it legal argument to ui_file_put */
305 ui_memcpy (void *dest
, const char *buffer
, long len
)
307 memcpy (dest
, buffer
, (size_t) len
);
308 ((char *) dest
)[len
] = '\0';
311 /* Print a floating-point value of type TYPE, pointed to in GDB by
312 VALADDR, on STREAM. Use Ada formatting conventions: there must be
313 a decimal point, and at least one digit before and after the
314 point. We use GNAT format for NaNs and infinities. */
316 ada_print_floating (const gdb_byte
*valaddr
, struct type
*type
,
317 struct ui_file
*stream
)
322 struct ui_file
*tmp_stream
= mem_fileopen ();
323 struct cleanup
*cleanups
= make_cleanup_ui_file_delete (tmp_stream
);
325 print_floating (valaddr
, type
, tmp_stream
);
326 ui_file_put (tmp_stream
, ui_memcpy
, buffer
);
327 do_cleanups (cleanups
);
330 len
= strlen (result
);
332 /* Modify for Ada rules. */
334 s
= strstr (result
, "inf");
336 s
= strstr (result
, "Inf");
338 s
= strstr (result
, "INF");
344 s
= strstr (result
, "nan");
346 s
= strstr (result
, "NaN");
348 s
= strstr (result
, "Nan");
352 if (result
[0] == '-')
357 if (s
== NULL
&& strchr (result
, '.') == NULL
)
359 s
= strchr (result
, 'e');
361 fprintf_filtered (stream
, "%s.0", result
);
363 fprintf_filtered (stream
, "%.*s.0%s", (int) (s
-result
), result
, s
);
366 fprintf_filtered (stream
, "%s", result
);
370 ada_printchar (int c
, struct type
*type
, struct ui_file
*stream
)
372 fputs_filtered ("'", stream
);
373 ada_emit_char (c
, type
, stream
, '\'', 1);
374 fputs_filtered ("'", stream
);
377 /* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a
378 form appropriate for TYPE. */
381 ada_print_scalar (struct type
*type
, LONGEST val
, struct ui_file
*stream
)
386 type
= ada_check_typedef (type
);
388 switch (TYPE_CODE (type
))
392 len
= TYPE_NFIELDS (type
);
393 for (i
= 0; i
< len
; i
++)
395 if (TYPE_FIELD_BITPOS (type
, i
) == val
)
402 fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type
, i
)), stream
);
406 print_longest (stream
, 'd', 0, val
);
411 print_longest (stream
, TYPE_UNSIGNED (type
) ? 'u' : 'd', 0, val
);
415 LA_PRINT_CHAR ((unsigned char) val
, type
, stream
);
419 fprintf_filtered (stream
, val
? "true" : "false");
422 case TYPE_CODE_RANGE
:
423 ada_print_scalar (TYPE_TARGET_TYPE (type
), val
, stream
);
426 case TYPE_CODE_UNDEF
:
428 case TYPE_CODE_ARRAY
:
429 case TYPE_CODE_STRUCT
:
430 case TYPE_CODE_UNION
:
435 case TYPE_CODE_STRING
:
436 case TYPE_CODE_ERROR
:
437 case TYPE_CODE_MEMBERPTR
:
438 case TYPE_CODE_METHODPTR
:
439 case TYPE_CODE_METHOD
:
441 warning (_("internal error: unhandled type in ada_print_scalar"));
445 error (_("Invalid type code in symbol table."));
450 /* Print the character string STRING, printing at most LENGTH characters.
451 Printing stops early if the number hits print_max; repeat counts
452 are printed as appropriate. Print ellipses at the end if we
453 had to stop before printing LENGTH characters, or if
454 FORCE_ELLIPSES. TYPE_LEN is the length (1 or 2) of the character type.
458 printstr (struct ui_file
*stream
, struct type
*elttype
, const gdb_byte
*string
,
459 unsigned int length
, int force_ellipses
, int type_len
,
460 const struct value_print_options
*options
)
463 unsigned int things_printed
= 0;
469 fputs_filtered ("\"\"", stream
);
473 for (i
= 0; i
< length
&& things_printed
< options
->print_max
; i
+= 1)
475 /* Position of the character we are examining
476 to see whether it is repeated. */
478 /* Number of repetitions we have detected so far. */
485 fputs_filtered (", ", stream
);
492 && char_at (string
, rep1
, type_len
) == char_at (string
, i
,
499 if (reps
> options
->repeat_count_threshold
)
503 if (options
->inspect_it
)
504 fputs_filtered ("\\\", ", stream
);
506 fputs_filtered ("\", ", stream
);
509 fputs_filtered ("'", stream
);
510 ada_emit_char (char_at (string
, i
, type_len
), elttype
, stream
, '\'',
512 fputs_filtered ("'", stream
);
513 fprintf_filtered (stream
, _(" <repeats %u times>"), reps
);
515 things_printed
+= options
->repeat_count_threshold
;
522 if (options
->inspect_it
)
523 fputs_filtered ("\\\"", stream
);
525 fputs_filtered ("\"", stream
);
528 ada_emit_char (char_at (string
, i
, type_len
), elttype
, stream
, '"',
534 /* Terminate the quotes if necessary. */
537 if (options
->inspect_it
)
538 fputs_filtered ("\\\"", stream
);
540 fputs_filtered ("\"", stream
);
543 if (force_ellipses
|| i
< length
)
544 fputs_filtered ("...", stream
);
548 ada_printstr (struct ui_file
*stream
, struct type
*type
, const gdb_byte
*string
,
549 unsigned int length
, int force_ellipses
,
550 const struct value_print_options
*options
)
552 printstr (stream
, type
, string
, length
, force_ellipses
, TYPE_LENGTH (type
),
557 /* Print data of type TYPE located at VALADDR (within GDB), which came from
558 the inferior at address ADDRESS, onto stdio stream STREAM according to
559 OPTIONS. The data at VALADDR is in target byte order.
561 If the data is printed as a string, returns the number of string characters
564 RECURSE indicates the amount of indentation to supply before
565 continuation lines; this amount is roughly twice the value of RECURSE. */
568 ada_val_print (struct type
*type
, const gdb_byte
*valaddr0
,
569 int embedded_offset
, CORE_ADDR address
,
570 struct ui_file
*stream
, int recurse
,
571 const struct value_print_options
*options
)
573 struct ada_val_print_args args
;
575 args
.valaddr0
= valaddr0
;
576 args
.embedded_offset
= embedded_offset
;
577 args
.address
= address
;
578 args
.stream
= stream
;
579 args
.recurse
= recurse
;
580 args
.options
= options
;
582 return catch_errors (ada_val_print_stub
, &args
, NULL
, RETURN_MASK_ALL
);
585 /* Helper for ada_val_print; used as argument to catch_errors to
586 unmarshal the arguments to ada_val_print_1, which does the work. */
588 ada_val_print_stub (void *args0
)
590 struct ada_val_print_args
*argsp
= (struct ada_val_print_args
*) args0
;
591 return ada_val_print_1 (argsp
->type
, argsp
->valaddr0
,
592 argsp
->embedded_offset
, argsp
->address
,
593 argsp
->stream
, argsp
->recurse
, argsp
->options
);
596 /* Assuming TYPE is a simple array, print the value of this array located
597 at VALADDR. See ada_val_print for a description of the various
598 parameters of this function; they are identical. The semantics
599 of the return value is also identical to ada_val_print. */
602 ada_val_print_array (struct type
*type
, const gdb_byte
*valaddr
,
603 CORE_ADDR address
, struct ui_file
*stream
, int recurse
,
604 const struct value_print_options
*options
)
606 struct type
*elttype
= TYPE_TARGET_TYPE (type
);
614 eltlen
= TYPE_LENGTH (elttype
);
618 len
= TYPE_LENGTH (type
) / eltlen
;
620 /* For an array of chars, print with string syntax. */
621 if (ada_is_string_type (type
)
622 && (options
->format
== 0 || options
->format
== 's'))
624 if (options
->prettyprint_arrays
)
625 print_spaces_filtered (2 + 2 * recurse
, stream
);
627 /* If requested, look for the first null char and only print
628 elements up to it. */
629 if (options
->stop_print_at_null
)
633 /* Look for a NULL char. */
636 && temp_len
< options
->print_max
637 && char_at (valaddr
, temp_len
, eltlen
) != 0);
642 printstr (stream
, elttype
, valaddr
, len
, 0, eltlen
, options
);
647 fprintf_filtered (stream
, "(");
648 print_optional_low_bound (stream
, type
, options
);
649 if (TYPE_FIELD_BITSIZE (type
, 0) > 0)
650 val_print_packed_array_elements (type
, valaddr
, 0, stream
,
653 val_print_array_elements (type
, valaddr
, address
, stream
,
654 recurse
, options
, 0);
655 fprintf_filtered (stream
, ")");
661 /* See the comment on ada_val_print. This function differs in that it
662 does not catch evaluation errors (leaving that to ada_val_print). */
665 ada_val_print_1 (struct type
*type
, const gdb_byte
*valaddr0
,
666 int embedded_offset
, CORE_ADDR address
,
667 struct ui_file
*stream
, int recurse
,
668 const struct value_print_options
*options
)
672 struct type
*elttype
;
675 const gdb_byte
*valaddr
= valaddr0
+ embedded_offset
;
677 type
= ada_check_typedef (type
);
679 if (ada_is_array_descriptor_type (type
) || ada_is_packed_array_type (type
))
682 struct value
*mark
= value_mark ();
684 val
= value_from_contents_and_address (type
, valaddr
, address
);
685 val
= ada_coerce_to_simple_array_ptr (val
);
688 fprintf_filtered (stream
, "(null)");
692 retn
= ada_val_print_1 (value_type (val
), value_contents (val
), 0,
693 VALUE_ADDRESS (val
), stream
, recurse
, options
);
694 value_free_to_mark (mark
);
698 valaddr
= ada_aligned_value_addr (type
, valaddr
);
699 embedded_offset
-= valaddr
- valaddr0
- embedded_offset
;
700 type
= printable_val_type (type
, valaddr
);
702 switch (TYPE_CODE (type
))
705 return c_val_print (type
, valaddr0
, embedded_offset
, address
, stream
,
710 int ret
= c_val_print (type
, valaddr0
, embedded_offset
, address
,
711 stream
, recurse
, options
);
712 if (ada_is_tag_type (type
))
715 value_from_contents_and_address (type
, valaddr
, address
);
716 const char *name
= ada_tag_name (val
);
718 fprintf_filtered (stream
, " (%s)", name
);
725 case TYPE_CODE_RANGE
:
726 if (ada_is_fixed_point_type (type
))
728 LONGEST v
= unpack_long (type
, valaddr
);
729 int len
= TYPE_LENGTH (type
);
731 fprintf_filtered (stream
, len
< 4 ? "%.11g" : "%.17g",
732 (double) ada_fixed_to_float (type
, v
));
735 else if (ada_is_vax_floating_type (type
))
738 value_from_contents_and_address (type
, valaddr
, address
);
739 struct value
*func
= ada_vax_float_print_function (type
);
742 static struct type
*parray_of_char
= NULL
;
743 struct value
*printable_val
;
745 if (parray_of_char
== NULL
)
749 (NULL
, builtin_type_true_char
,
750 create_range_type (NULL
, builtin_type_int32
, 0, 32)), NULL
);
753 value_ind (value_cast (parray_of_char
,
754 call_function_by_hand (func
, 1,
757 fprintf_filtered (stream
, "%s", value_contents (printable_val
));
760 /* No special printing function. Do as best we can. */
762 else if (TYPE_CODE (type
) == TYPE_CODE_RANGE
)
764 struct type
*target_type
= TYPE_TARGET_TYPE (type
);
765 if (TYPE_LENGTH (type
) != TYPE_LENGTH (target_type
))
767 /* Obscure case of range type that has different length from
768 its base type. Perform a conversion, or we will get a
769 nonsense value. Actually, we could use the same
770 code regardless of lengths; I'm just avoiding a cast. */
771 struct value
*v
= value_cast (target_type
,
772 value_from_contents_and_address
774 return ada_val_print_1 (target_type
, value_contents (v
), 0, 0,
775 stream
, recurse
+ 1, options
);
778 return ada_val_print_1 (TYPE_TARGET_TYPE (type
),
779 valaddr0
, embedded_offset
,
780 address
, stream
, recurse
, options
);
784 int format
= (options
->format
? options
->format
785 : options
->output_format
);
788 struct value_print_options opts
= *options
;
789 opts
.format
= format
;
790 print_scalar_formatted (valaddr
, type
, &opts
, 0, stream
);
792 else if (ada_is_system_address_type (type
)
793 && TYPE_OBJFILE (type
) != NULL
)
795 /* FIXME: We want to print System.Address variables using
796 the same format as for any access type. But for some
797 reason GNAT encodes the System.Address type as an int,
798 so we have to work-around this deficiency by handling
799 System.Address values as a special case.
801 We do this only for System.Address types defined in an
802 objfile. For the built-in version of System.Address we
803 have installed the proper type to begin with. */
805 struct gdbarch
*gdbarch
= get_objfile_arch (TYPE_OBJFILE (type
));
806 struct type
*ptr_type
= builtin_type (gdbarch
)->builtin_data_ptr
;
808 fprintf_filtered (stream
, "(");
809 type_print (type
, "", stream
, -1);
810 fprintf_filtered (stream
, ") ");
811 fputs_filtered (paddress (extract_typed_address
812 (valaddr
, ptr_type
)),
817 val_print_type_code_int (type
, valaddr
, stream
);
818 if (ada_is_character_type (type
))
820 fputs_filtered (" ", stream
);
821 ada_printchar ((unsigned char) unpack_long (type
, valaddr
),
831 print_scalar_formatted (valaddr
, type
, options
, 0, stream
);
834 len
= TYPE_NFIELDS (type
);
835 val
= unpack_long (type
, valaddr
);
836 for (i
= 0; i
< len
; i
++)
839 if (val
== TYPE_FIELD_BITPOS (type
, i
))
846 const char *name
= ada_enum_name (TYPE_FIELD_NAME (type
, i
));
848 fprintf_filtered (stream
, "%ld %s", (long) val
, name
);
850 fputs_filtered (name
, stream
);
854 print_longest (stream
, 'd', 0, val
);
858 case TYPE_CODE_FLAGS
:
860 print_scalar_formatted (valaddr
, type
, options
, 0, stream
);
862 val_print_type_code_flags (type
, valaddr
, stream
);
867 return c_val_print (type
, valaddr0
, embedded_offset
, address
, stream
,
870 ada_print_floating (valaddr0
+ embedded_offset
, type
, stream
);
873 case TYPE_CODE_UNION
:
874 case TYPE_CODE_STRUCT
:
875 if (ada_is_bogus_array_descriptor (type
))
877 fprintf_filtered (stream
, "(...?)");
882 print_record (type
, valaddr
, stream
, recurse
, options
);
886 case TYPE_CODE_ARRAY
:
887 return ada_val_print_array (type
, valaddr
, address
, stream
,
891 /* For references, the debugger is expected to print the value as
892 an address if DEREF_REF is null. But printing an address in place
893 of the object value would be confusing to an Ada programmer.
894 So, for Ada values, we print the actual dereferenced value
896 elttype
= check_typedef (TYPE_TARGET_TYPE (type
));
898 if (TYPE_CODE (elttype
) != TYPE_CODE_UNDEF
)
900 LONGEST deref_val_int
= (LONGEST
) unpack_pointer (type
, valaddr
);
901 if (deref_val_int
!= 0)
903 struct value
*deref_val
=
904 ada_value_ind (value_from_longest
905 (lookup_pointer_type (elttype
),
907 val_print (value_type (deref_val
),
908 value_contents (deref_val
), 0,
909 VALUE_ADDRESS (deref_val
), stream
, recurse
+ 1,
910 options
, current_language
);
913 fputs_filtered ("(null)", stream
);
916 fputs_filtered ("???", stream
);
925 print_variant_part (struct type
*type
, int field_num
, const gdb_byte
*valaddr
,
926 struct ui_file
*stream
, int recurse
,
927 const struct value_print_options
*options
, int comma_needed
,
928 struct type
*outer_type
, const gdb_byte
*outer_valaddr
)
930 struct type
*var_type
= TYPE_FIELD_TYPE (type
, field_num
);
931 int which
= ada_which_variant_applies (var_type
, outer_type
, outer_valaddr
);
936 return print_field_values
937 (TYPE_FIELD_TYPE (var_type
, which
),
938 valaddr
+ TYPE_FIELD_BITPOS (type
, field_num
) / HOST_CHAR_BIT
939 + TYPE_FIELD_BITPOS (var_type
, which
) / HOST_CHAR_BIT
,
940 stream
, recurse
, options
,
941 comma_needed
, outer_type
, outer_valaddr
);
945 ada_value_print (struct value
*val0
, struct ui_file
*stream
,
946 const struct value_print_options
*options
)
948 const gdb_byte
*valaddr
= value_contents (val0
);
949 CORE_ADDR address
= VALUE_ADDRESS (val0
) + value_offset (val0
);
951 ada_to_fixed_type (value_type (val0
), valaddr
, address
, NULL
, 1);
953 value_from_contents_and_address (type
, valaddr
, address
);
954 struct value_print_options opts
;
956 /* If it is a pointer, indicate what it points to. */
957 if (TYPE_CODE (type
) == TYPE_CODE_PTR
)
959 /* Hack: don't print (char *) for char strings. Their
960 type is indicated by the quoted string anyway. */
961 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type
)) != sizeof (char)
962 || TYPE_CODE (TYPE_TARGET_TYPE (type
)) != TYPE_CODE_INT
963 || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type
)))
965 fprintf_filtered (stream
, "(");
966 type_print (type
, "", stream
, -1);
967 fprintf_filtered (stream
, ") ");
970 else if (ada_is_array_descriptor_type (type
))
972 fprintf_filtered (stream
, "(");
973 type_print (type
, "", stream
, -1);
974 fprintf_filtered (stream
, ") ");
976 else if (ada_is_bogus_array_descriptor (type
))
978 fprintf_filtered (stream
, "(");
979 type_print (type
, "", stream
, -1);
980 fprintf_filtered (stream
, ") (...?)");
986 return (val_print (type
, value_contents (val
), 0, address
,
987 stream
, 0, &opts
, current_language
));
991 print_record (struct type
*type
, const gdb_byte
*valaddr
,
992 struct ui_file
*stream
, int recurse
,
993 const struct value_print_options
*options
)
995 type
= ada_check_typedef (type
);
997 fprintf_filtered (stream
, "(");
999 if (print_field_values (type
, valaddr
, stream
, recurse
, options
,
1000 0, type
, valaddr
) != 0 && options
->pretty
)
1002 fprintf_filtered (stream
, "\n");
1003 print_spaces_filtered (2 * recurse
, stream
);
1006 fprintf_filtered (stream
, ")");
1009 /* Print out fields of value at VALADDR having structure type TYPE.
1011 TYPE, VALADDR, STREAM, RECURSE, and OPTIONS have the
1012 same meanings as in ada_print_value and ada_val_print.
1014 OUTER_TYPE and OUTER_VALADDR give type and address of enclosing record
1015 (used to get discriminant values when printing variant parts).
1017 COMMA_NEEDED is 1 if fields have been printed at the current recursion
1018 level, so that a comma is needed before any field printed by this
1021 Returns 1 if COMMA_NEEDED or any fields were printed. */
1024 print_field_values (struct type
*type
, const gdb_byte
*valaddr
,
1025 struct ui_file
*stream
, int recurse
,
1026 const struct value_print_options
*options
,
1028 struct type
*outer_type
, const gdb_byte
*outer_valaddr
)
1032 len
= TYPE_NFIELDS (type
);
1034 for (i
= 0; i
< len
; i
+= 1)
1036 if (ada_is_ignored_field (type
, i
))
1039 if (ada_is_wrapper_field (type
, i
))
1042 print_field_values (TYPE_FIELD_TYPE (type
, i
),
1044 + TYPE_FIELD_BITPOS (type
, i
) / HOST_CHAR_BIT
,
1045 stream
, recurse
, options
,
1046 comma_needed
, type
, valaddr
);
1049 else if (ada_is_variant_part (type
, i
))
1052 print_variant_part (type
, i
, valaddr
,
1053 stream
, recurse
, options
, comma_needed
,
1054 outer_type
, outer_valaddr
);
1059 fprintf_filtered (stream
, ", ");
1062 if (options
->pretty
)
1064 fprintf_filtered (stream
, "\n");
1065 print_spaces_filtered (2 + 2 * recurse
, stream
);
1069 wrap_here (n_spaces (2 + 2 * recurse
));
1071 if (options
->inspect_it
)
1073 if (TYPE_CODE (TYPE_FIELD_TYPE (type
, i
)) == TYPE_CODE_PTR
)
1074 fputs_filtered ("\"( ptr \"", stream
);
1076 fputs_filtered ("\"( nodef \"", stream
);
1077 fprintf_symbol_filtered (stream
, TYPE_FIELD_NAME (type
, i
),
1078 language_cplus
, DMGL_NO_OPTS
);
1079 fputs_filtered ("\" \"", stream
);
1080 fprintf_symbol_filtered (stream
, TYPE_FIELD_NAME (type
, i
),
1081 language_cplus
, DMGL_NO_OPTS
);
1082 fputs_filtered ("\") \"", stream
);
1086 annotate_field_begin (TYPE_FIELD_TYPE (type
, i
));
1087 fprintf_filtered (stream
, "%.*s",
1088 ada_name_prefix_len (TYPE_FIELD_NAME (type
, i
)),
1089 TYPE_FIELD_NAME (type
, i
));
1090 annotate_field_name_end ();
1091 fputs_filtered (" => ", stream
);
1092 annotate_field_value ();
1095 if (TYPE_FIELD_PACKED (type
, i
))
1099 /* Bitfields require special handling, especially due to byte
1101 if (TYPE_CPLUS_SPECIFIC (type
) != NULL
1102 && TYPE_FIELD_IGNORE (type
, i
))
1104 fputs_filtered (_("<optimized out or zero length>"), stream
);
1108 int bit_pos
= TYPE_FIELD_BITPOS (type
, i
);
1109 int bit_size
= TYPE_FIELD_BITSIZE (type
, i
);
1110 struct value_print_options opts
;
1112 adjust_type_signedness (TYPE_FIELD_TYPE (type
, i
));
1113 v
= ada_value_primitive_packed_val (NULL
, valaddr
,
1114 bit_pos
/ HOST_CHAR_BIT
,
1115 bit_pos
% HOST_CHAR_BIT
,
1117 TYPE_FIELD_TYPE (type
, i
));
1120 val_print (TYPE_FIELD_TYPE (type
, i
), value_contents (v
), 0, 0,
1121 stream
, recurse
+ 1, &opts
, current_language
);
1126 struct value_print_options opts
= *options
;
1128 ada_val_print (TYPE_FIELD_TYPE (type
, i
),
1129 valaddr
+ TYPE_FIELD_BITPOS (type
, i
) / HOST_CHAR_BIT
,
1130 0, 0, stream
, recurse
+ 1, &opts
);
1132 annotate_field_end ();
1135 return comma_needed
;