gdb/
[external/binutils.git] / gdb / ada-valprint.c
1 /* Support for printing Ada values for GDB, the GNU debugger.
2
3    Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1997, 2001, 2002,
4    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include <ctype.h>
24 #include "gdb_string.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "expression.h"
28 #include "value.h"
29 #include "demangle.h"
30 #include "valprint.h"
31 #include "language.h"
32 #include "annotate.h"
33 #include "ada-lang.h"
34 #include "c-lang.h"
35 #include "infcall.h"
36 #include "exceptions.h"
37 #include "objfiles.h"
38
39 static void print_record (struct type *, const gdb_byte *, int,
40                           struct ui_file *,
41                           int,
42                           const struct value *,
43                           const struct value_print_options *);
44
45 static int print_field_values (struct type *, const gdb_byte *,
46                                int,
47                                struct ui_file *, int,
48                                const struct value *,
49                                const struct value_print_options *,
50                                int, struct type *, int);
51
52 static void adjust_type_signedness (struct type *);
53
54 static int ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR,
55                             struct ui_file *, int,
56                             const struct value *,
57                             const struct value_print_options *);
58 \f
59
60 /* Make TYPE unsigned if its range of values includes no negatives.  */
61 static void
62 adjust_type_signedness (struct type *type)
63 {
64   if (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE
65       && TYPE_LOW_BOUND (type) >= 0)
66     TYPE_UNSIGNED (type) = 1;
67 }
68
69 /* Assuming TYPE is a simple array type, prints its lower bound on STREAM,
70    if non-standard (i.e., other than 1 for numbers, other than lower bound
71    of index type for enumerated type).  Returns 1 if something printed,
72    otherwise 0.  */
73
74 static int
75 print_optional_low_bound (struct ui_file *stream, struct type *type,
76                           const struct value_print_options *options)
77 {
78   struct type *index_type;
79   LONGEST low_bound;
80   LONGEST high_bound;
81
82   if (options->print_array_indexes)
83     return 0;
84
85   if (!get_array_bounds (type, &low_bound, &high_bound))
86     return 0;
87
88   /* If this is an empty array, then don't print the lower bound.
89      That would be confusing, because we would print the lower bound,
90      followed by... nothing!  */
91   if (low_bound > high_bound)
92     return 0;
93
94   index_type = TYPE_INDEX_TYPE (type);
95
96   if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
97     {
98       /* We need to know what the base type is, in order to do the
99          appropriate check below.  Otherwise, if this is a subrange
100          of an enumerated type, where the underlying value of the
101          first element is typically 0, we might test the low bound
102          against the wrong value.  */
103       index_type = TYPE_TARGET_TYPE (index_type);
104     }
105
106   switch (TYPE_CODE (index_type))
107     {
108     case TYPE_CODE_BOOL:
109       if (low_bound == 0)
110         return 0;
111       break;
112     case TYPE_CODE_ENUM:
113       if (low_bound == TYPE_FIELD_BITPOS (index_type, 0))
114         return 0;
115       break;
116     case TYPE_CODE_UNDEF:
117       index_type = NULL;
118       /* FALL THROUGH */
119     default:
120       if (low_bound == 1)
121         return 0;
122       break;
123     }
124
125   ada_print_scalar (index_type, low_bound, stream);
126   fprintf_filtered (stream, " => ");
127   return 1;
128 }
129
130 /*  Version of val_print_array_elements for GNAT-style packed arrays.
131     Prints elements of packed array of type TYPE at bit offset
132     BITOFFSET from VALADDR on STREAM.  Formats according to OPTIONS and
133     separates with commas.  RECURSE is the recursion (nesting) level.
134     TYPE must have been decoded (as by ada_coerce_to_simple_array).  */
135
136 static void
137 val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr,
138                                  int offset,
139                                  int bitoffset, struct ui_file *stream,
140                                  int recurse,
141                                  const struct value *val,
142                                  const struct value_print_options *options)
143 {
144   unsigned int i;
145   unsigned int things_printed = 0;
146   unsigned len;
147   struct type *elttype, *index_type;
148   unsigned eltlen;
149   unsigned long bitsize = TYPE_FIELD_BITSIZE (type, 0);
150   struct value *mark = value_mark ();
151   LONGEST low = 0;
152
153   elttype = TYPE_TARGET_TYPE (type);
154   eltlen = TYPE_LENGTH (check_typedef (elttype));
155   index_type = TYPE_INDEX_TYPE (type);
156
157   {
158     LONGEST high;
159
160     if (get_discrete_bounds (index_type, &low, &high) < 0)
161       len = 1;
162     else
163       len = high - low + 1;
164   }
165
166   i = 0;
167   annotate_array_section_begin (i, elttype);
168
169   while (i < len && things_printed < options->print_max)
170     {
171       struct value *v0, *v1;
172       int i0;
173
174       if (i != 0)
175         {
176           if (options->prettyprint_arrays)
177             {
178               fprintf_filtered (stream, ",\n");
179               print_spaces_filtered (2 + 2 * recurse, stream);
180             }
181           else
182             {
183               fprintf_filtered (stream, ", ");
184             }
185         }
186       wrap_here (n_spaces (2 + 2 * recurse));
187       maybe_print_array_index (index_type, i + low, stream, options);
188
189       i0 = i;
190       v0 = ada_value_primitive_packed_val (NULL, valaddr + offset,
191                                            (i0 * bitsize) / HOST_CHAR_BIT,
192                                            (i0 * bitsize) % HOST_CHAR_BIT,
193                                            bitsize, elttype);
194       while (1)
195         {
196           i += 1;
197           if (i >= len)
198             break;
199           v1 = ada_value_primitive_packed_val (NULL, valaddr + offset,
200                                                (i * bitsize) / HOST_CHAR_BIT,
201                                                (i * bitsize) % HOST_CHAR_BIT,
202                                                bitsize, elttype);
203           if (!value_available_contents_eq (v0, value_embedded_offset (v0),
204                                             v1, value_embedded_offset (v1),
205                                             eltlen))
206             break;
207         }
208
209       if (i - i0 > options->repeat_count_threshold)
210         {
211           struct value_print_options opts = *options;
212
213           opts.deref_ref = 0;
214           val_print (elttype, value_contents_for_printing (v0),
215                      value_embedded_offset (v0), 0, stream,
216                      recurse + 1, v0, &opts, current_language);
217           annotate_elt_rep (i - i0);
218           fprintf_filtered (stream, _(" <repeats %u times>"), i - i0);
219           annotate_elt_rep_end ();
220
221         }
222       else
223         {
224           int j;
225           struct value_print_options opts = *options;
226
227           opts.deref_ref = 0;
228           for (j = i0; j < i; j += 1)
229             {
230               if (j > i0)
231                 {
232                   if (options->prettyprint_arrays)
233                     {
234                       fprintf_filtered (stream, ",\n");
235                       print_spaces_filtered (2 + 2 * recurse, stream);
236                     }
237                   else
238                     {
239                       fprintf_filtered (stream, ", ");
240                     }
241                   wrap_here (n_spaces (2 + 2 * recurse));
242                   maybe_print_array_index (index_type, j + low,
243                                            stream, options);
244                 }
245               val_print (elttype, value_contents_for_printing (v0),
246                          value_embedded_offset (v0), 0, stream,
247                          recurse + 1, v0, &opts, current_language);
248               annotate_elt ();
249             }
250         }
251       things_printed += i - i0;
252     }
253   annotate_array_section_end ();
254   if (i < len)
255     {
256       fprintf_filtered (stream, "...");
257     }
258
259   value_free_to_mark (mark);
260 }
261
262 static struct type *
263 printable_val_type (struct type *type, const gdb_byte *valaddr)
264 {
265   return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL, 1);
266 }
267
268 /* Print the character C on STREAM as part of the contents of a literal
269    string whose delimiter is QUOTER.  TYPE_LEN is the length in bytes
270    of the character.  */
271
272 void
273 ada_emit_char (int c, struct type *type, struct ui_file *stream,
274                int quoter, int type_len)
275 {
276   /* If this character fits in the normal ASCII range, and is
277      a printable character, then print the character as if it was
278      an ASCII character, even if this is a wide character.
279      The UCHAR_MAX check is necessary because the isascii function
280      requires that its argument have a value of an unsigned char,
281      or EOF (EOF is obviously not printable).  */
282   if (c <= UCHAR_MAX && isascii (c) && isprint (c))
283     {
284       if (c == quoter && c == '"')
285         fprintf_filtered (stream, "\"\"");
286       else
287         fprintf_filtered (stream, "%c", c);
288     }
289   else
290     fprintf_filtered (stream, "[\"%0*x\"]", type_len * 2, c);
291 }
292
293 /* Character #I of STRING, given that TYPE_LEN is the size in bytes
294    of a character.  */
295
296 static int
297 char_at (const gdb_byte *string, int i, int type_len,
298          enum bfd_endian byte_order)
299 {
300   if (type_len == 1)
301     return string[i];
302   else
303     return (int) extract_unsigned_integer (string + type_len * i,
304                                            type_len, byte_order);
305 }
306
307 /* Wrapper around memcpy to make it legal argument to ui_file_put.  */
308 static void
309 ui_memcpy (void *dest, const char *buffer, long len)
310 {
311   memcpy (dest, buffer, (size_t) len);
312   ((char *) dest)[len] = '\0';
313 }
314
315 /* Print a floating-point value of type TYPE, pointed to in GDB by
316    VALADDR, on STREAM.  Use Ada formatting conventions: there must be
317    a decimal point, and at least one digit before and after the
318    point.  We use GNAT format for NaNs and infinities.  */
319 static void
320 ada_print_floating (const gdb_byte *valaddr, struct type *type,
321                     struct ui_file *stream)
322 {
323   char buffer[64];
324   char *s, *result;
325   int len;
326   struct ui_file *tmp_stream = mem_fileopen ();
327   struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_stream);
328
329   print_floating (valaddr, type, tmp_stream);
330   ui_file_put (tmp_stream, ui_memcpy, buffer);
331   do_cleanups (cleanups);
332
333   result = buffer;
334   len = strlen (result);
335
336   /* Modify for Ada rules.  */
337
338   s = strstr (result, "inf");
339   if (s == NULL)
340     s = strstr (result, "Inf");
341   if (s == NULL)
342     s = strstr (result, "INF");
343   if (s != NULL)
344     strcpy (s, "Inf");
345
346   if (s == NULL)
347     {
348       s = strstr (result, "nan");
349       if (s == NULL)
350         s = strstr (result, "NaN");
351       if (s == NULL)
352         s = strstr (result, "Nan");
353       if (s != NULL)
354         {
355           s[0] = s[2] = 'N';
356           if (result[0] == '-')
357             result += 1;
358         }
359     }
360
361   if (s == NULL && strchr (result, '.') == NULL)
362     {
363       s = strchr (result, 'e');
364       if (s == NULL)
365         fprintf_filtered (stream, "%s.0", result);
366       else
367         fprintf_filtered (stream, "%.*s.0%s", (int) (s-result), result, s);
368       return;
369     }
370   fprintf_filtered (stream, "%s", result);
371 }
372
373 void
374 ada_printchar (int c, struct type *type, struct ui_file *stream)
375 {
376   fputs_filtered ("'", stream);
377   ada_emit_char (c, type, stream, '\'', TYPE_LENGTH (type));
378   fputs_filtered ("'", stream);
379 }
380
381 /* [From print_type_scalar in typeprint.c].   Print VAL on STREAM in a
382    form appropriate for TYPE, if non-NULL.  If TYPE is NULL, print VAL
383    like a default signed integer.  */
384
385 void
386 ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
387 {
388   unsigned int i;
389   unsigned len;
390
391   if (!type)
392     {
393       print_longest (stream, 'd', 0, val);
394       return;
395     }
396
397   type = ada_check_typedef (type);
398
399   switch (TYPE_CODE (type))
400     {
401
402     case TYPE_CODE_ENUM:
403       len = TYPE_NFIELDS (type);
404       for (i = 0; i < len; i++)
405         {
406           if (TYPE_FIELD_BITPOS (type, i) == val)
407             {
408               break;
409             }
410         }
411       if (i < len)
412         {
413           fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
414         }
415       else
416         {
417           print_longest (stream, 'd', 0, val);
418         }
419       break;
420
421     case TYPE_CODE_INT:
422       print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
423       break;
424
425     case TYPE_CODE_CHAR:
426       LA_PRINT_CHAR (val, type, stream);
427       break;
428
429     case TYPE_CODE_BOOL:
430       fprintf_filtered (stream, val ? "true" : "false");
431       break;
432
433     case TYPE_CODE_RANGE:
434       ada_print_scalar (TYPE_TARGET_TYPE (type), val, stream);
435       return;
436
437     case TYPE_CODE_UNDEF:
438     case TYPE_CODE_PTR:
439     case TYPE_CODE_ARRAY:
440     case TYPE_CODE_STRUCT:
441     case TYPE_CODE_UNION:
442     case TYPE_CODE_FUNC:
443     case TYPE_CODE_FLT:
444     case TYPE_CODE_VOID:
445     case TYPE_CODE_SET:
446     case TYPE_CODE_STRING:
447     case TYPE_CODE_ERROR:
448     case TYPE_CODE_MEMBERPTR:
449     case TYPE_CODE_METHODPTR:
450     case TYPE_CODE_METHOD:
451     case TYPE_CODE_REF:
452       warning (_("internal error: unhandled type in ada_print_scalar"));
453       break;
454
455     default:
456       error (_("Invalid type code in symbol table."));
457     }
458   gdb_flush (stream);
459 }
460
461 /* Print the character string STRING, printing at most LENGTH characters.
462    Printing stops early if the number hits print_max; repeat counts
463    are printed as appropriate.  Print ellipses at the end if we
464    had to stop before printing LENGTH characters, or if FORCE_ELLIPSES.
465    TYPE_LEN is the length (1 or 2) of the character type.  */
466
467 static void
468 printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
469           unsigned int length, int force_ellipses, int type_len,
470           const struct value_print_options *options)
471 {
472   enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (elttype));
473   unsigned int i;
474   unsigned int things_printed = 0;
475   int in_quotes = 0;
476   int need_comma = 0;
477
478   if (length == 0)
479     {
480       fputs_filtered ("\"\"", stream);
481       return;
482     }
483
484   for (i = 0; i < length && things_printed < options->print_max; i += 1)
485     {
486       /* Position of the character we are examining
487          to see whether it is repeated.  */
488       unsigned int rep1;
489       /* Number of repetitions we have detected so far.  */
490       unsigned int reps;
491
492       QUIT;
493
494       if (need_comma)
495         {
496           fputs_filtered (", ", stream);
497           need_comma = 0;
498         }
499
500       rep1 = i + 1;
501       reps = 1;
502       while (rep1 < length
503              && char_at (string, rep1, type_len, byte_order)
504                 == char_at (string, i, type_len, byte_order))
505         {
506           rep1 += 1;
507           reps += 1;
508         }
509
510       if (reps > options->repeat_count_threshold)
511         {
512           if (in_quotes)
513             {
514               if (options->inspect_it)
515                 fputs_filtered ("\\\", ", stream);
516               else
517                 fputs_filtered ("\", ", stream);
518               in_quotes = 0;
519             }
520           fputs_filtered ("'", stream);
521           ada_emit_char (char_at (string, i, type_len, byte_order),
522                          elttype, stream, '\'', type_len);
523           fputs_filtered ("'", stream);
524           fprintf_filtered (stream, _(" <repeats %u times>"), reps);
525           i = rep1 - 1;
526           things_printed += options->repeat_count_threshold;
527           need_comma = 1;
528         }
529       else
530         {
531           if (!in_quotes)
532             {
533               if (options->inspect_it)
534                 fputs_filtered ("\\\"", stream);
535               else
536                 fputs_filtered ("\"", stream);
537               in_quotes = 1;
538             }
539           ada_emit_char (char_at (string, i, type_len, byte_order),
540                          elttype, stream, '"', type_len);
541           things_printed += 1;
542         }
543     }
544
545   /* Terminate the quotes if necessary.  */
546   if (in_quotes)
547     {
548       if (options->inspect_it)
549         fputs_filtered ("\\\"", stream);
550       else
551         fputs_filtered ("\"", stream);
552     }
553
554   if (force_ellipses || i < length)
555     fputs_filtered ("...", stream);
556 }
557
558 void
559 ada_printstr (struct ui_file *stream, struct type *type,
560               const gdb_byte *string, unsigned int length,
561               const char *encoding, int force_ellipses,
562               const struct value_print_options *options)
563 {
564   printstr (stream, type, string, length, force_ellipses, TYPE_LENGTH (type),
565             options);
566 }
567
568
569 /* See val_print for a description of the various parameters of this
570    function; they are identical.  The semantics of the return value is
571    also identical to val_print.  */
572
573 int
574 ada_val_print (struct type *type, const gdb_byte *valaddr,
575                int embedded_offset, CORE_ADDR address,
576                struct ui_file *stream, int recurse,
577                const struct value *val,
578                const struct value_print_options *options)
579 {
580   volatile struct gdb_exception except;
581   int result = 0;
582
583   /* XXX: this catches QUIT/ctrl-c as well.  Isn't that busted?  */
584   TRY_CATCH (except, RETURN_MASK_ALL)
585     {
586       result = ada_val_print_1 (type, valaddr, embedded_offset, address,
587                                 stream, recurse, val, options);
588     }
589
590   if (except.reason < 0)
591     result = 0;
592
593   return result;
594 }
595
596 /* Assuming TYPE is a simple array, print the value of this array located
597    at VALADDR + OFFSET.  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.  */
600
601 static int
602 ada_val_print_array (struct type *type, const gdb_byte *valaddr,
603                      int offset, CORE_ADDR address,
604                      struct ui_file *stream, int recurse,
605                      const struct value *val,
606                      const struct value_print_options *options)
607 {
608   int result = 0;
609
610   /* For an array of chars, print with string syntax.  */
611   if (ada_is_string_type (type)
612       && (options->format == 0 || options->format == 's'))
613     {
614       enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
615       struct type *elttype = TYPE_TARGET_TYPE (type);
616       unsigned int eltlen;
617       unsigned int len;
618
619       /* We know that ELTTYPE cannot possibly be null, because we found
620          that TYPE is a string-like type.  Similarly, the size of ELTTYPE
621          should also be non-null, since it's a character-like type.  */
622       gdb_assert (elttype != NULL);
623       gdb_assert (TYPE_LENGTH (elttype) != 0);
624
625       eltlen = TYPE_LENGTH (elttype);
626       len = TYPE_LENGTH (type) / eltlen;
627
628       if (options->prettyprint_arrays)
629         print_spaces_filtered (2 + 2 * recurse, stream);
630
631       /* If requested, look for the first null char and only print
632          elements up to it.  */
633       if (options->stop_print_at_null)
634         {
635           int temp_len;
636
637           /* Look for a NULL char.  */
638           for (temp_len = 0;
639                (temp_len < len
640                 && temp_len < options->print_max
641                 && char_at (valaddr + offset,
642                             temp_len, eltlen, byte_order) != 0);
643                temp_len += 1);
644           len = temp_len;
645         }
646
647       printstr (stream, elttype, valaddr + offset, len, 0, eltlen, options);
648       result = len;
649     }
650   else
651     {
652       fprintf_filtered (stream, "(");
653       print_optional_low_bound (stream, type, options);
654       if (TYPE_FIELD_BITSIZE (type, 0) > 0)
655         val_print_packed_array_elements (type, valaddr, offset,
656                                          0, stream, recurse, val, options);
657       else
658         val_print_array_elements (type, valaddr, offset, address,
659                                   stream, recurse, val, options, 0);
660       fprintf_filtered (stream, ")");
661     }
662
663   return result;
664 }
665
666 /* See the comment on ada_val_print.  This function differs in that it
667    does not catch evaluation errors (leaving that to ada_val_print).  */
668
669 static int
670 ada_val_print_1 (struct type *type, const gdb_byte *valaddr,
671                  int offset, CORE_ADDR address,
672                  struct ui_file *stream, int recurse,
673                  const struct value *original_value,
674                  const struct value_print_options *options)
675 {
676   unsigned int len;
677   int i;
678   struct type *elttype;
679   LONGEST val;
680   int offset_aligned;
681
682   type = ada_check_typedef (type);
683
684   if (ada_is_array_descriptor_type (type)
685       || (ada_is_constrained_packed_array_type (type)
686           && TYPE_CODE (type) != TYPE_CODE_PTR))
687     {
688       int retn;
689       struct value *mark = value_mark ();
690       struct value *val;
691
692       val = value_from_contents_and_address (type, valaddr + offset, address);
693       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)  /* array access type.  */
694         val = ada_coerce_to_simple_array_ptr (val);
695       else
696         val = ada_coerce_to_simple_array (val);
697       if (val == NULL)
698         {
699           gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF);
700           fprintf_filtered (stream, "0x0");
701           retn = 0;
702         }
703       else
704         retn = ada_val_print_1 (value_type (val),
705                                 value_contents_for_printing (val),
706                                 value_embedded_offset (val),
707                                 value_address (val), stream, recurse,
708                                 val, options);
709       value_free_to_mark (mark);
710       return retn;
711     }
712
713   offset_aligned = offset + ada_aligned_value_addr (type, valaddr) - valaddr;
714   type = printable_val_type (type, valaddr + offset_aligned);
715
716   switch (TYPE_CODE (type))
717     {
718     default:
719       return c_val_print (type, valaddr, offset, address, stream,
720                           recurse, original_value, options);
721
722     case TYPE_CODE_PTR:
723       {
724         int ret = c_val_print (type, valaddr, offset, address,
725                                stream, recurse, original_value, options);
726
727         if (ada_is_tag_type (type))
728           {
729             struct value *val =
730               value_from_contents_and_address (type,
731                                                valaddr + offset_aligned,
732                                                address + offset_aligned);
733             const char *name = ada_tag_name (val);
734
735             if (name != NULL) 
736               fprintf_filtered (stream, " (%s)", name);
737             return 0;
738         }
739         return ret;
740       }
741
742     case TYPE_CODE_INT:
743     case TYPE_CODE_RANGE:
744       if (ada_is_fixed_point_type (type))
745         {
746           LONGEST v = unpack_long (type, valaddr + offset_aligned);
747           int len = TYPE_LENGTH (type);
748
749           fprintf_filtered (stream, len < 4 ? "%.11g" : "%.17g",
750                             (double) ada_fixed_to_float (type, v));
751           return 0;
752         }
753       else if (TYPE_CODE (type) == TYPE_CODE_RANGE)
754         {
755           struct type *target_type = TYPE_TARGET_TYPE (type);
756
757           if (TYPE_LENGTH (type) != TYPE_LENGTH (target_type))
758             {
759               /* Obscure case of range type that has different length from
760                  its base type.  Perform a conversion, or we will get a
761                  nonsense value.  Actually, we could use the same
762                  code regardless of lengths; I'm just avoiding a cast.  */
763               struct value *v1
764                 = value_from_contents_and_address (type, valaddr + offset, 0);
765               struct value *v = value_cast (target_type, v1);
766
767               return ada_val_print_1 (target_type,
768                                       value_contents_for_printing (v),
769                                       value_embedded_offset (v), 0,
770                                       stream, recurse + 1, v, options);
771             }
772           else
773             return ada_val_print_1 (TYPE_TARGET_TYPE (type),
774                                     valaddr, offset,
775                                     address, stream, recurse,
776                                     original_value, options);
777         }
778       else
779         {
780           int format = (options->format ? options->format
781                         : options->output_format);
782
783           if (format)
784             {
785               struct value_print_options opts = *options;
786
787               opts.format = format;
788               val_print_scalar_formatted (type, valaddr, offset_aligned,
789                                           original_value, &opts, 0, stream);
790             }
791           else if (ada_is_system_address_type (type))
792             {
793               /* FIXME: We want to print System.Address variables using
794                  the same format as for any access type.  But for some
795                  reason GNAT encodes the System.Address type as an int,
796                  so we have to work-around this deficiency by handling
797                  System.Address values as a special case.  */
798
799               struct gdbarch *gdbarch = get_type_arch (type);
800               struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
801               CORE_ADDR addr = extract_typed_address (valaddr + offset_aligned,
802                                                       ptr_type);
803
804               fprintf_filtered (stream, "(");
805               type_print (type, "", stream, -1);
806               fprintf_filtered (stream, ") ");
807               fputs_filtered (paddress (gdbarch, addr), stream);
808             }
809           else
810             {
811               val_print_type_code_int (type, valaddr + offset_aligned, stream);
812               if (ada_is_character_type (type))
813                 {
814                   LONGEST c;
815
816                   fputs_filtered (" ", stream);
817                   c = unpack_long (type, valaddr + offset_aligned);
818                   ada_printchar (c, type, stream);
819                 }
820             }
821           return 0;
822         }
823
824     case TYPE_CODE_ENUM:
825       if (options->format)
826         {
827           val_print_scalar_formatted (type, valaddr, offset_aligned,
828                                       original_value, options, 0, stream);
829           break;
830         }
831       len = TYPE_NFIELDS (type);
832       val = unpack_long (type, valaddr + offset_aligned);
833       for (i = 0; i < len; i++)
834         {
835           QUIT;
836           if (val == TYPE_FIELD_BITPOS (type, i))
837             {
838               break;
839             }
840         }
841       if (i < len)
842         {
843           const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
844
845           if (name[0] == '\'')
846             fprintf_filtered (stream, "%ld %s", (long) val, name);
847           else
848             fputs_filtered (name, stream);
849         }
850       else
851         {
852           print_longest (stream, 'd', 0, val);
853         }
854       break;
855
856     case TYPE_CODE_FLAGS:
857       if (options->format)
858         val_print_scalar_formatted (type, valaddr, offset_aligned,
859                                     original_value, options, 0, stream);
860       else
861         val_print_type_code_flags (type, valaddr + offset_aligned, stream);
862       break;
863
864     case TYPE_CODE_FLT:
865       if (options->format)
866         return c_val_print (type, valaddr, offset, address, stream,
867                             recurse, original_value, options);
868       else
869         ada_print_floating (valaddr + offset, type, stream);
870       break;
871
872     case TYPE_CODE_UNION:
873     case TYPE_CODE_STRUCT:
874       if (ada_is_bogus_array_descriptor (type))
875         {
876           fprintf_filtered (stream, "(...?)");
877           return 0;
878         }
879       else
880         {
881           print_record (type, valaddr, offset_aligned,
882                         stream, recurse, original_value, options);
883           return 0;
884         }
885
886     case TYPE_CODE_ARRAY:
887       return ada_val_print_array (type, valaddr, offset_aligned,
888                                   address, stream, recurse, original_value,
889                                   options);
890
891     case TYPE_CODE_REF:
892       /* For references, the debugger is expected to print the value as
893          an address if DEREF_REF is null.  But printing an address in place
894          of the object value would be confusing to an Ada programmer.
895          So, for Ada values, we print the actual dereferenced value
896          regardless.  */
897       elttype = check_typedef (TYPE_TARGET_TYPE (type));
898       
899       if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
900         {
901           CORE_ADDR deref_val_int;
902           struct value *deref_val;
903
904           deref_val = coerce_ref_if_computed (original_value);
905           if (deref_val)
906             {
907               common_val_print (deref_val, stream, recurse + 1, options,
908                                 current_language);
909               break;
910             }
911
912           deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
913           if (deref_val_int != 0)
914             {
915               struct value *deref_val =
916                 ada_value_ind (value_from_pointer
917                                (lookup_pointer_type (elttype),
918                                 deref_val_int));
919
920               val_print (value_type (deref_val),
921                          value_contents_for_printing (deref_val),
922                          value_embedded_offset (deref_val),
923                          value_address (deref_val), stream, recurse + 1,
924                          deref_val, options, current_language);
925             }
926           else
927             fputs_filtered ("(null)", stream);
928         }
929       else
930         fputs_filtered ("???", stream);
931
932       break;
933     }
934   gdb_flush (stream);
935   return 0;
936 }
937
938 static int
939 print_variant_part (struct type *type, int field_num,
940                     const gdb_byte *valaddr, int offset,
941                     struct ui_file *stream, int recurse,
942                     const struct value *val,
943                     const struct value_print_options *options,
944                     int comma_needed,
945                     struct type *outer_type, int outer_offset)
946 {
947   struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
948   int which = ada_which_variant_applies (var_type, outer_type,
949                                          valaddr + outer_offset);
950
951   if (which < 0)
952     return 0;
953   else
954     return print_field_values
955       (TYPE_FIELD_TYPE (var_type, which),
956        valaddr,
957        offset + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT
958        + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT,
959        stream, recurse, val, options,
960        comma_needed, outer_type, outer_offset);
961 }
962
963 int
964 ada_value_print (struct value *val0, struct ui_file *stream,
965                  const struct value_print_options *options)
966 {
967   struct value *val = ada_to_fixed_value (val0);
968   CORE_ADDR address = value_address (val);
969   struct type *type = ada_check_typedef (value_type (val));
970   struct value_print_options opts;
971
972   /* If it is a pointer, indicate what it points to.  */
973   if (TYPE_CODE (type) == TYPE_CODE_PTR)
974     {
975       /* Hack:  don't print (char *) for char strings.  Their
976          type is indicated by the quoted string anyway.  */
977       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char)
978           || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT 
979           || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
980         {
981           fprintf_filtered (stream, "(");
982           type_print (type, "", stream, -1);
983           fprintf_filtered (stream, ") ");
984         }
985     }
986   else if (ada_is_array_descriptor_type (type))
987     {
988       /* We do not print the type description unless TYPE is an array
989          access type (this is encoded by the compiler as a typedef to
990          a fat pointer - hence the check against TYPE_CODE_TYPEDEF).  */
991       if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
992         {
993           fprintf_filtered (stream, "(");
994           type_print (type, "", stream, -1);
995           fprintf_filtered (stream, ") ");
996         }
997     }
998   else if (ada_is_bogus_array_descriptor (type))
999     {
1000       fprintf_filtered (stream, "(");
1001       type_print (type, "", stream, -1);
1002       fprintf_filtered (stream, ") (...?)");
1003       return 0;
1004     }
1005
1006   opts = *options;
1007   opts.deref_ref = 1;
1008   return (val_print (type, value_contents_for_printing (val),
1009                      value_embedded_offset (val), address,
1010                      stream, 0, val, &opts, current_language));
1011 }
1012
1013 static void
1014 print_record (struct type *type, const gdb_byte *valaddr,
1015               int offset,
1016               struct ui_file *stream, int recurse,
1017               const struct value *val,
1018               const struct value_print_options *options)
1019 {
1020   type = ada_check_typedef (type);
1021
1022   fprintf_filtered (stream, "(");
1023
1024   if (print_field_values (type, valaddr, offset,
1025                           stream, recurse, val, options,
1026                           0, type, offset) != 0 && options->pretty)
1027     {
1028       fprintf_filtered (stream, "\n");
1029       print_spaces_filtered (2 * recurse, stream);
1030     }
1031
1032   fprintf_filtered (stream, ")");
1033 }
1034
1035 /* Print out fields of value at VALADDR + OFFSET having structure type TYPE.
1036
1037    TYPE, VALADDR, OFFSET, STREAM, RECURSE, and OPTIONS have the same
1038    meanings as in ada_print_value and ada_val_print.
1039
1040    OUTER_TYPE and OUTER_OFFSET give type and address of enclosing
1041    record (used to get discriminant values when printing variant
1042    parts).
1043
1044    COMMA_NEEDED is 1 if fields have been printed at the current recursion
1045    level, so that a comma is needed before any field printed by this
1046    call.
1047
1048    Returns 1 if COMMA_NEEDED or any fields were printed.  */
1049
1050 static int
1051 print_field_values (struct type *type, const gdb_byte *valaddr,
1052                     int offset, struct ui_file *stream, int recurse,
1053                     const struct value *val,
1054                     const struct value_print_options *options,
1055                     int comma_needed,
1056                     struct type *outer_type, int outer_offset)
1057 {
1058   int i, len;
1059
1060   len = TYPE_NFIELDS (type);
1061
1062   for (i = 0; i < len; i += 1)
1063     {
1064       if (ada_is_ignored_field (type, i))
1065         continue;
1066
1067       if (ada_is_wrapper_field (type, i))
1068         {
1069           comma_needed =
1070             print_field_values (TYPE_FIELD_TYPE (type, i),
1071                                 valaddr,
1072                                 (offset
1073                                  + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
1074                                 stream, recurse, val, options,
1075                                 comma_needed, type, offset);
1076           continue;
1077         }
1078       else if (ada_is_variant_part (type, i))
1079         {
1080           comma_needed =
1081             print_variant_part (type, i, valaddr,
1082                                 offset, stream, recurse, val,
1083                                 options, comma_needed,
1084                                 outer_type, outer_offset);
1085           continue;
1086         }
1087
1088       if (comma_needed)
1089         fprintf_filtered (stream, ", ");
1090       comma_needed = 1;
1091
1092       if (options->pretty)
1093         {
1094           fprintf_filtered (stream, "\n");
1095           print_spaces_filtered (2 + 2 * recurse, stream);
1096         }
1097       else
1098         {
1099           wrap_here (n_spaces (2 + 2 * recurse));
1100         }
1101       if (options->inspect_it)
1102         {
1103           if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
1104             fputs_filtered ("\"( ptr \"", stream);
1105           else
1106             fputs_filtered ("\"( nodef \"", stream);
1107           fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1108                                    language_cplus, DMGL_NO_OPTS);
1109           fputs_filtered ("\" \"", stream);
1110           fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1111                                    language_cplus, DMGL_NO_OPTS);
1112           fputs_filtered ("\") \"", stream);
1113         }
1114       else
1115         {
1116           annotate_field_begin (TYPE_FIELD_TYPE (type, i));
1117           fprintf_filtered (stream, "%.*s",
1118                             ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
1119                             TYPE_FIELD_NAME (type, i));
1120           annotate_field_name_end ();
1121           fputs_filtered (" => ", stream);
1122           annotate_field_value ();
1123         }
1124
1125       if (TYPE_FIELD_PACKED (type, i))
1126         {
1127           struct value *v;
1128
1129           /* Bitfields require special handling, especially due to byte
1130              order problems.  */
1131           if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
1132             {
1133               fputs_filtered (_("<optimized out or zero length>"), stream);
1134             }
1135           else
1136             {
1137               int bit_pos = TYPE_FIELD_BITPOS (type, i);
1138               int bit_size = TYPE_FIELD_BITSIZE (type, i);
1139               struct value_print_options opts;
1140
1141               adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
1142               v = ada_value_primitive_packed_val
1143                     (NULL, valaddr,
1144                      offset + bit_pos / HOST_CHAR_BIT,
1145                      bit_pos % HOST_CHAR_BIT,
1146                      bit_size, TYPE_FIELD_TYPE (type, i));
1147               opts = *options;
1148               opts.deref_ref = 0;
1149               val_print (TYPE_FIELD_TYPE (type, i),
1150                          value_contents_for_printing (v),
1151                          value_embedded_offset (v), 0,
1152                          stream, recurse + 1, v,
1153                          &opts, current_language);
1154             }
1155         }
1156       else
1157         {
1158           struct value_print_options opts = *options;
1159
1160           opts.deref_ref = 0;
1161           ada_val_print (TYPE_FIELD_TYPE (type, i),
1162                          valaddr,
1163                          (offset
1164                           + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
1165                          0, stream, recurse + 1, val, &opts);
1166         }
1167       annotate_field_end ();
1168     }
1169
1170   return comma_needed;
1171 }