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 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"
37 /* Encapsulates arguments to ada_val_print. */
38 struct ada_val_print_args
41 const gdb_byte *valaddr0;
44 struct ui_file *stream;
48 enum val_prettyprint pretty;
51 static void print_record (struct type *, const gdb_byte *, struct ui_file *,
52 int, int, enum val_prettyprint);
54 static int print_field_values (struct type *, const gdb_byte *,
55 struct ui_file *, int, int,
56 enum val_prettyprint, int, struct type *,
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, int, int,
65 enum val_prettyprint);
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)
85 struct type *index_type;
89 if (print_array_indexes_p ())
92 if (!get_array_bounds (type, &low_bound, &high_bound))
95 /* If this is an empty array, then don't print the lower bound.
96 That would be confusing, because we would print the lower bound,
97 followed by... nothing! */
98 if (low_bound > high_bound)
101 index_type = TYPE_INDEX_TYPE (type);
103 if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
105 /* We need to know what the base type is, in order to do the
106 appropriate check below. Otherwise, if this is a subrange
107 of an enumerated type, where the underlying value of the
108 first element is typically 0, we might test the low bound
109 against the wrong value. */
110 index_type = TYPE_TARGET_TYPE (index_type);
113 switch (TYPE_CODE (index_type))
120 if (low_bound == TYPE_FIELD_BITPOS (index_type, 0))
123 case TYPE_CODE_UNDEF:
124 index_type = builtin_type_long;
132 ada_print_scalar (index_type, (LONGEST) low_bound, stream);
133 fprintf_filtered (stream, " => ");
137 /* Version of val_print_array_elements for GNAT-style packed arrays.
138 Prints elements of packed array of type TYPE at bit offset
139 BITOFFSET from VALADDR on STREAM. Formats according to FORMAT and
140 separates with commas. RECURSE is the recursion (nesting) level.
141 If PRETTY, uses "prettier" format. TYPE must have been decoded (as
142 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,
147 int format, int recurse,
148 enum val_prettyprint pretty)
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 (TYPE_FIELD_TYPE (type, 0), &low, &high) < 0)
168 len = high - low + 1;
172 annotate_array_section_begin (i, elttype);
174 while (i < len && things_printed < print_max)
176 struct value *v0, *v1;
181 if (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, format, pretty);
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 > repeat_count_threshold)
214 val_print (elttype, value_contents (v0), 0, 0, stream, format,
215 0, recurse + 1, pretty, current_language);
216 annotate_elt_rep (i - i0);
217 fprintf_filtered (stream, _(" <repeats %u times>"), i - i0);
218 annotate_elt_rep_end ();
224 for (j = i0; j < i; j += 1)
228 if (prettyprint_arrays)
230 fprintf_filtered (stream, ",\n");
231 print_spaces_filtered (2 + 2 * recurse, stream);
235 fprintf_filtered (stream, ", ");
237 wrap_here (n_spaces (2 + 2 * recurse));
238 maybe_print_array_index (index_type, j + low,
239 stream, format, pretty);
241 val_print (elttype, value_contents (v0), 0, 0, stream, format,
242 0, recurse + 1, pretty, current_language);
246 things_printed += i - i0;
248 annotate_array_section_end ();
251 fprintf_filtered (stream, "...");
254 value_free_to_mark (mark);
258 printable_val_type (struct type *type, const gdb_byte *valaddr)
260 return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL, 1);
263 /* Print the character C on STREAM as part of the contents of a literal
264 string whose delimiter is QUOTER. TYPE_LEN is the length in bytes
265 (1 or 2) of the character. */
268 ada_emit_char (int c, struct ui_file *stream, int quoter, int type_len)
273 c &= (1 << (type_len * TARGET_CHAR_BIT)) - 1;
275 if (isascii (c) && isprint (c))
277 if (c == quoter && c == '"')
278 fprintf_filtered (stream, "\"\"");
280 fprintf_filtered (stream, "%c", c);
283 fprintf_filtered (stream, "[\"%0*x\"]", type_len * 2, c);
286 /* Character #I of STRING, given that TYPE_LEN is the size in bytes (1
287 or 2) of a character. */
290 char_at (const gdb_byte *string, int i, int type_len)
295 return (int) extract_unsigned_integer (string + 2 * i, 2);
298 /* Wrapper around memcpy to make it legal argument to ui_file_put */
300 ui_memcpy (void *dest, const char *buffer, long len)
302 memcpy (dest, buffer, (size_t) len);
303 ((char *) dest)[len] = '\0';
306 /* Print a floating-point value of type TYPE, pointed to in GDB by
307 VALADDR, on STREAM. Use Ada formatting conventions: there must be
308 a decimal point, and at least one digit before and after the
309 point. We use GNAT format for NaNs and infinities. */
311 ada_print_floating (const gdb_byte *valaddr, struct type *type,
312 struct ui_file *stream)
317 struct ui_file *tmp_stream = mem_fileopen ();
318 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_stream);
320 print_floating (valaddr, type, tmp_stream);
321 ui_file_put (tmp_stream, ui_memcpy, buffer);
322 do_cleanups (cleanups);
325 len = strlen (result);
327 /* Modify for Ada rules. */
329 s = strstr (result, "inf");
331 s = strstr (result, "Inf");
333 s = strstr (result, "INF");
339 s = strstr (result, "nan");
341 s = strstr (result, "NaN");
343 s = strstr (result, "Nan");
347 if (result[0] == '-')
352 if (s == NULL && strchr (result, '.') == NULL)
354 s = strchr (result, 'e');
356 fprintf_filtered (stream, "%s.0", result);
358 fprintf_filtered (stream, "%.*s.0%s", (int) (s-result), result, s);
361 fprintf_filtered (stream, "%s", result);
365 ada_printchar (int c, struct ui_file *stream)
367 fputs_filtered ("'", stream);
368 ada_emit_char (c, stream, '\'', 1);
369 fputs_filtered ("'", stream);
372 /* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a
373 form appropriate for TYPE. */
376 ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
381 type = ada_check_typedef (type);
383 switch (TYPE_CODE (type))
387 len = TYPE_NFIELDS (type);
388 for (i = 0; i < len; i++)
390 if (TYPE_FIELD_BITPOS (type, i) == val)
397 fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
401 print_longest (stream, 'd', 0, val);
406 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
410 LA_PRINT_CHAR ((unsigned char) val, stream);
414 fprintf_filtered (stream, val ? "true" : "false");
417 case TYPE_CODE_RANGE:
418 ada_print_scalar (TYPE_TARGET_TYPE (type), val, stream);
421 case TYPE_CODE_UNDEF:
423 case TYPE_CODE_ARRAY:
424 case TYPE_CODE_STRUCT:
425 case TYPE_CODE_UNION:
430 case TYPE_CODE_STRING:
431 case TYPE_CODE_ERROR:
432 case TYPE_CODE_MEMBERPTR:
433 case TYPE_CODE_METHODPTR:
434 case TYPE_CODE_METHOD:
436 warning (_("internal error: unhandled type in ada_print_scalar"));
440 error (_("Invalid type code in symbol table."));
445 /* Print the character string STRING, printing at most LENGTH characters.
446 Printing stops early if the number hits print_max; repeat counts
447 are printed as appropriate. Print ellipses at the end if we
448 had to stop before printing LENGTH characters, or if
449 FORCE_ELLIPSES. TYPE_LEN is the length (1 or 2) of the character type.
453 printstr (struct ui_file *stream, const gdb_byte *string,
454 unsigned int length, int force_ellipses, int type_len)
457 unsigned int things_printed = 0;
463 fputs_filtered ("\"\"", stream);
467 for (i = 0; i < length && things_printed < print_max; i += 1)
469 /* Position of the character we are examining
470 to see whether it is repeated. */
472 /* Number of repetitions we have detected so far. */
479 fputs_filtered (", ", stream);
486 && char_at (string, rep1, type_len) == char_at (string, i,
493 if (reps > repeat_count_threshold)
498 fputs_filtered ("\\\", ", stream);
500 fputs_filtered ("\", ", stream);
503 fputs_filtered ("'", stream);
504 ada_emit_char (char_at (string, i, type_len), stream, '\'',
506 fputs_filtered ("'", stream);
507 fprintf_filtered (stream, _(" <repeats %u times>"), reps);
509 things_printed += repeat_count_threshold;
517 fputs_filtered ("\\\"", stream);
519 fputs_filtered ("\"", stream);
522 ada_emit_char (char_at (string, i, type_len), stream, '"',
528 /* Terminate the quotes if necessary. */
532 fputs_filtered ("\\\"", stream);
534 fputs_filtered ("\"", stream);
537 if (force_ellipses || i < length)
538 fputs_filtered ("...", stream);
542 ada_printstr (struct ui_file *stream, const gdb_byte *string,
543 unsigned int length, int width, int force_ellipses)
545 printstr (stream, string, length, force_ellipses, width);
549 /* Print data of type TYPE located at VALADDR (within GDB), which came from
550 the inferior at address ADDRESS, onto stdio stream STREAM according to
551 FORMAT (a letter as for the printf % codes or 0 for natural format).
552 The data at VALADDR is in target byte order.
554 If the data is printed as a string, returns the number of string characters
557 If DEREF_REF is nonzero, then dereference references, otherwise just print
560 RECURSE indicates the amount of indentation to supply before
561 continuation lines; this amount is roughly twice the value of RECURSE.
563 When PRETTY is non-zero, prints record fields on separate lines.
564 (For some reason, the current version of gdb instead uses a global
565 variable---prettyprint_arrays--- to causes a similar effect on
569 ada_val_print (struct type *type, const gdb_byte *valaddr0,
570 int embedded_offset, CORE_ADDR address,
571 struct ui_file *stream, int format, int deref_ref,
572 int recurse, enum val_prettyprint pretty)
574 struct ada_val_print_args args;
576 args.valaddr0 = valaddr0;
577 args.embedded_offset = embedded_offset;
578 args.address = address;
579 args.stream = stream;
580 args.format = format;
581 args.deref_ref = deref_ref;
582 args.recurse = recurse;
583 args.pretty = pretty;
585 return catch_errors (ada_val_print_stub, &args, NULL, RETURN_MASK_ALL);
588 /* Helper for ada_val_print; used as argument to catch_errors to
589 unmarshal the arguments to ada_val_print_1, which does the work. */
591 ada_val_print_stub (void *args0)
593 struct ada_val_print_args *argsp = (struct ada_val_print_args *) args0;
594 return ada_val_print_1 (argsp->type, argsp->valaddr0,
595 argsp->embedded_offset, argsp->address,
596 argsp->stream, argsp->format, argsp->deref_ref,
597 argsp->recurse, argsp->pretty);
600 /* Assuming TYPE is a simple array, print the value of this array located
601 at VALADDR. See ada_val_print for a description of the various
602 parameters of this function; they are identical. The semantics
603 of the return value is also identical to ada_val_print. */
606 ada_val_print_array (struct type *type, const gdb_byte *valaddr,
607 CORE_ADDR address, struct ui_file *stream, int format,
608 int deref_ref, int recurse, enum val_prettyprint pretty)
610 struct type *elttype = TYPE_TARGET_TYPE (type);
618 eltlen = TYPE_LENGTH (elttype);
622 len = TYPE_LENGTH (type) / eltlen;
624 /* For an array of chars, print with string syntax. */
625 if (ada_is_string_type (type) && (format == 0 || format == 's'))
627 if (prettyprint_arrays)
628 print_spaces_filtered (2 + 2 * recurse, stream);
630 /* If requested, look for the first null char and only print
631 elements up to it. */
632 if (stop_print_at_null)
636 /* Look for a NULL char. */
639 && temp_len < print_max
640 && char_at (valaddr, temp_len, eltlen) != 0);
645 printstr (stream, valaddr, len, 0, eltlen);
650 fprintf_filtered (stream, "(");
651 print_optional_low_bound (stream, type);
652 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
653 val_print_packed_array_elements (type, valaddr, 0, stream,
654 format, recurse, pretty);
656 val_print_array_elements (type, valaddr, address, stream,
657 format, deref_ref, recurse,
659 fprintf_filtered (stream, ")");
665 /* See the comment on ada_val_print. This function differs in that it
666 does not catch evaluation errors (leaving that to ada_val_print). */
669 ada_val_print_1 (struct type *type, const gdb_byte *valaddr0,
670 int embedded_offset, CORE_ADDR address,
671 struct ui_file *stream, int format,
672 int deref_ref, int recurse, enum val_prettyprint pretty)
676 struct type *elttype;
679 const gdb_byte *valaddr = valaddr0 + embedded_offset;
681 type = ada_check_typedef (type);
683 if (ada_is_array_descriptor_type (type) || ada_is_packed_array_type (type))
686 struct value *mark = value_mark ();
688 val = value_from_contents_and_address (type, valaddr, address);
689 val = ada_coerce_to_simple_array_ptr (val);
692 fprintf_filtered (stream, "(null)");
696 retn = ada_val_print_1 (value_type (val), value_contents (val), 0,
697 VALUE_ADDRESS (val), stream, format,
698 deref_ref, recurse, pretty);
699 value_free_to_mark (mark);
703 valaddr = ada_aligned_value_addr (type, valaddr);
704 embedded_offset -= valaddr - valaddr0 - embedded_offset;
705 type = printable_val_type (type, valaddr);
707 switch (TYPE_CODE (type))
710 return c_val_print (type, valaddr0, embedded_offset, address, stream,
711 format, deref_ref, recurse, pretty);
715 int ret = c_val_print (type, valaddr0, embedded_offset, address,
716 stream, format, deref_ref, recurse, pretty);
717 if (ada_is_tag_type (type))
720 value_from_contents_and_address (type, valaddr, address);
721 const char *name = ada_tag_name (val);
723 fprintf_filtered (stream, " (%s)", name);
730 case TYPE_CODE_RANGE:
731 if (ada_is_fixed_point_type (type))
733 LONGEST v = unpack_long (type, valaddr);
734 int len = TYPE_LENGTH (type);
736 fprintf_filtered (stream, len < 4 ? "%.11g" : "%.17g",
737 (double) ada_fixed_to_float (type, v));
740 else if (ada_is_vax_floating_type (type))
743 value_from_contents_and_address (type, valaddr, address);
744 struct value *func = ada_vax_float_print_function (type);
747 static struct type *parray_of_char = NULL;
748 struct value *printable_val;
750 if (parray_of_char == NULL)
754 (NULL, builtin_type_char,
755 create_range_type (NULL, builtin_type_int, 0, 32)), NULL);
758 value_ind (value_cast (parray_of_char,
759 call_function_by_hand (func, 1,
762 fprintf_filtered (stream, "%s", value_contents (printable_val));
765 /* No special printing function. Do as best we can. */
767 else if (TYPE_CODE (type) == TYPE_CODE_RANGE)
769 struct type *target_type = TYPE_TARGET_TYPE (type);
770 if (TYPE_LENGTH (type) != TYPE_LENGTH (target_type))
772 /* Obscure case of range type that has different length from
773 its base type. Perform a conversion, or we will get a
774 nonsense value. Actually, we could use the same
775 code regardless of lengths; I'm just avoiding a cast. */
776 struct value *v = value_cast (target_type,
777 value_from_contents_and_address
779 return ada_val_print_1 (target_type, value_contents (v), 0, 0,
780 stream, format, 0, recurse + 1, pretty);
783 return ada_val_print_1 (TYPE_TARGET_TYPE (type),
784 valaddr0, embedded_offset,
785 address, stream, format, deref_ref,
790 format = format ? format : output_format;
793 print_scalar_formatted (valaddr, type, format, 0, stream);
795 else if (ada_is_system_address_type (type))
797 /* FIXME: We want to print System.Address variables using
798 the same format as for any access type. But for some
799 reason GNAT encodes the System.Address type as an int,
800 so we have to work-around this deficiency by handling
801 System.Address values as a special case. */
802 fprintf_filtered (stream, "(");
803 type_print (type, "", stream, -1);
804 fprintf_filtered (stream, ") ");
805 fputs_filtered (paddress (extract_typed_address
806 (valaddr, builtin_type_void_data_ptr)),
811 val_print_type_code_int (type, valaddr, stream);
812 if (ada_is_character_type (type))
814 fputs_filtered (" ", stream);
815 ada_printchar ((unsigned char) unpack_long (type, valaddr),
825 print_scalar_formatted (valaddr, type, format, 0, stream);
828 len = TYPE_NFIELDS (type);
829 val = unpack_long (type, valaddr);
830 for (i = 0; i < len; i++)
833 if (val == TYPE_FIELD_BITPOS (type, i))
840 const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
842 fprintf_filtered (stream, "%ld %s", (long) val, name);
844 fputs_filtered (name, stream);
848 print_longest (stream, 'd', 0, val);
852 case TYPE_CODE_FLAGS:
854 print_scalar_formatted (valaddr, type, format, 0, stream);
856 val_print_type_code_flags (type, valaddr, stream);
861 return c_val_print (type, valaddr0, embedded_offset, address, stream,
862 format, deref_ref, recurse, pretty);
864 ada_print_floating (valaddr0 + embedded_offset, type, stream);
867 case TYPE_CODE_UNION:
868 case TYPE_CODE_STRUCT:
869 if (ada_is_bogus_array_descriptor (type))
871 fprintf_filtered (stream, "(...?)");
876 print_record (type, valaddr, stream, format, recurse, pretty);
880 case TYPE_CODE_ARRAY:
881 return ada_val_print_array (type, valaddr, address, stream, format,
882 deref_ref, recurse, pretty);
885 /* For references, the debugger is expected to print the value as
886 an address if DEREF_REF is null. But printing an address in place
887 of the object value would be confusing to an Ada programmer.
888 So, for Ada values, we print the actual dereferenced value
890 elttype = check_typedef (TYPE_TARGET_TYPE (type));
892 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
894 LONGEST deref_val_int = (LONGEST) unpack_pointer (type, valaddr);
895 if (deref_val_int != 0)
897 struct value *deref_val =
898 ada_value_ind (value_from_longest
899 (lookup_pointer_type (elttype),
901 val_print (value_type (deref_val),
902 value_contents (deref_val), 0,
903 VALUE_ADDRESS (deref_val), stream, format,
904 deref_ref, recurse + 1, pretty, current_language);
907 fputs_filtered ("(null)", stream);
910 fputs_filtered ("???", stream);
919 print_variant_part (struct type *type, int field_num, const gdb_byte *valaddr,
920 struct ui_file *stream, int format, int recurse,
921 enum val_prettyprint pretty, int comma_needed,
922 struct type *outer_type, const gdb_byte *outer_valaddr)
924 struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
925 int which = ada_which_variant_applies (var_type, outer_type, outer_valaddr);
930 return print_field_values
931 (TYPE_FIELD_TYPE (var_type, which),
932 valaddr + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT
933 + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT,
934 stream, format, recurse, pretty,
935 comma_needed, outer_type, outer_valaddr);
939 ada_value_print (struct value *val0, struct ui_file *stream, int format,
940 enum val_prettyprint pretty)
942 const gdb_byte *valaddr = value_contents (val0);
943 CORE_ADDR address = VALUE_ADDRESS (val0) + value_offset (val0);
945 ada_to_fixed_type (value_type (val0), valaddr, address, NULL, 1);
947 value_from_contents_and_address (type, valaddr, address);
949 /* If it is a pointer, indicate what it points to. */
950 if (TYPE_CODE (type) == TYPE_CODE_PTR)
952 /* Hack: don't print (char *) for char strings. Their
953 type is indicated by the quoted string anyway. */
954 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char)
955 || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT
956 || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
958 fprintf_filtered (stream, "(");
959 type_print (type, "", stream, -1);
960 fprintf_filtered (stream, ") ");
963 else if (ada_is_array_descriptor_type (type))
965 fprintf_filtered (stream, "(");
966 type_print (type, "", stream, -1);
967 fprintf_filtered (stream, ") ");
969 else if (ada_is_bogus_array_descriptor (type))
971 fprintf_filtered (stream, "(");
972 type_print (type, "", stream, -1);
973 fprintf_filtered (stream, ") (...?)");
977 return (val_print (type, value_contents (val), 0, address,
978 stream, format, 1, 0, pretty, current_language));
982 print_record (struct type *type, const gdb_byte *valaddr,
983 struct ui_file *stream, int format, int recurse,
984 enum val_prettyprint pretty)
986 type = ada_check_typedef (type);
988 fprintf_filtered (stream, "(");
990 if (print_field_values (type, valaddr, stream, format, recurse, pretty,
991 0, type, valaddr) != 0 && pretty)
993 fprintf_filtered (stream, "\n");
994 print_spaces_filtered (2 * recurse, stream);
997 fprintf_filtered (stream, ")");
1000 /* Print out fields of value at VALADDR having structure type TYPE.
1002 TYPE, VALADDR, STREAM, FORMAT, RECURSE, and PRETTY have the
1003 same meanings as in ada_print_value and ada_val_print.
1005 OUTER_TYPE and OUTER_VALADDR give type and address of enclosing record
1006 (used to get discriminant values when printing variant parts).
1008 COMMA_NEEDED is 1 if fields have been printed at the current recursion
1009 level, so that a comma is needed before any field printed by this
1012 Returns 1 if COMMA_NEEDED or any fields were printed. */
1015 print_field_values (struct type *type, const gdb_byte *valaddr,
1016 struct ui_file *stream, int format, int recurse,
1017 enum val_prettyprint pretty, int comma_needed,
1018 struct type *outer_type, const gdb_byte *outer_valaddr)
1022 len = TYPE_NFIELDS (type);
1024 for (i = 0; i < len; i += 1)
1026 if (ada_is_ignored_field (type, i))
1029 if (ada_is_wrapper_field (type, i))
1032 print_field_values (TYPE_FIELD_TYPE (type, i),
1034 + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT,
1035 stream, format, recurse, pretty,
1036 comma_needed, type, valaddr);
1039 else if (ada_is_variant_part (type, i))
1042 print_variant_part (type, i, valaddr,
1043 stream, format, recurse, pretty, comma_needed,
1044 outer_type, outer_valaddr);
1049 fprintf_filtered (stream, ", ");
1054 fprintf_filtered (stream, "\n");
1055 print_spaces_filtered (2 + 2 * recurse, stream);
1059 wrap_here (n_spaces (2 + 2 * recurse));
1063 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
1064 fputs_filtered ("\"( ptr \"", stream);
1066 fputs_filtered ("\"( nodef \"", stream);
1067 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1068 language_cplus, DMGL_NO_OPTS);
1069 fputs_filtered ("\" \"", stream);
1070 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1071 language_cplus, DMGL_NO_OPTS);
1072 fputs_filtered ("\") \"", stream);
1076 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
1077 fprintf_filtered (stream, "%.*s",
1078 ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
1079 TYPE_FIELD_NAME (type, i));
1080 annotate_field_name_end ();
1081 fputs_filtered (" => ", stream);
1082 annotate_field_value ();
1085 if (TYPE_FIELD_PACKED (type, i))
1089 /* Bitfields require special handling, especially due to byte
1091 if (TYPE_CPLUS_SPECIFIC (type) != NULL
1092 && TYPE_FIELD_IGNORE (type, i))
1094 fputs_filtered (_("<optimized out or zero length>"), stream);
1098 int bit_pos = TYPE_FIELD_BITPOS (type, i);
1099 int bit_size = TYPE_FIELD_BITSIZE (type, i);
1101 adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
1102 v = ada_value_primitive_packed_val (NULL, valaddr,
1103 bit_pos / HOST_CHAR_BIT,
1104 bit_pos % HOST_CHAR_BIT,
1106 TYPE_FIELD_TYPE (type, i));
1107 val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), 0, 0,
1108 stream, format, 0, recurse + 1, pretty,
1113 ada_val_print (TYPE_FIELD_TYPE (type, i),
1114 valaddr + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT,
1115 0, 0, stream, format, 0, recurse + 1, pretty);
1116 annotate_field_end ();
1119 return comma_needed;