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