2010-01-13 Phil Muldoon <pmuldoon@redhat.com>
[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
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   const gdb_byte *valaddr = value_contents (val0);
928   CORE_ADDR address = value_address (val0);
929   struct type *type =
930     ada_to_fixed_type (value_type (val0), valaddr, address, NULL, 1);
931   struct value *val =
932     value_from_contents_and_address (type, valaddr, address);
933   struct value_print_options opts;
934
935   /* If it is a pointer, indicate what it points to.  */
936   if (TYPE_CODE (type) == TYPE_CODE_PTR)
937     {
938       /* Hack:  don't print (char *) for char strings.  Their
939          type is indicated by the quoted string anyway.  */
940       if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char)
941           || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT 
942           || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
943         {
944           fprintf_filtered (stream, "(");
945           type_print (type, "", stream, -1);
946           fprintf_filtered (stream, ") ");
947         }
948     }
949   else if (ada_is_array_descriptor_type (type))
950     {
951       fprintf_filtered (stream, "(");
952       type_print (type, "", stream, -1);
953       fprintf_filtered (stream, ") ");
954     }
955   else if (ada_is_bogus_array_descriptor (type))
956     {
957       fprintf_filtered (stream, "(");
958       type_print (type, "", stream, -1);
959       fprintf_filtered (stream, ") (...?)");
960       return 0;
961     }
962
963   opts = *options;
964   opts.deref_ref = 1;
965   return (val_print (type, value_contents (val), 0, address,
966                      stream, 0, &opts, current_language));
967 }
968
969 static void
970 print_record (struct type *type, const gdb_byte *valaddr,
971               struct ui_file *stream, int recurse,
972               const struct value_print_options *options)
973 {
974   type = ada_check_typedef (type);
975
976   fprintf_filtered (stream, "(");
977
978   if (print_field_values (type, valaddr, stream, recurse, options,
979                           0, type, valaddr) != 0 && options->pretty)
980     {
981       fprintf_filtered (stream, "\n");
982       print_spaces_filtered (2 * recurse, stream);
983     }
984
985   fprintf_filtered (stream, ")");
986 }
987
988 /* Print out fields of value at VALADDR having structure type TYPE.
989
990    TYPE, VALADDR, STREAM, RECURSE, and OPTIONS have the
991    same meanings as in ada_print_value and ada_val_print.
992
993    OUTER_TYPE and OUTER_VALADDR give type and address of enclosing record
994    (used to get discriminant values when printing variant parts).
995
996    COMMA_NEEDED is 1 if fields have been printed at the current recursion
997    level, so that a comma is needed before any field printed by this
998    call.
999
1000    Returns 1 if COMMA_NEEDED or any fields were printed.  */
1001
1002 static int
1003 print_field_values (struct type *type, const gdb_byte *valaddr,
1004                     struct ui_file *stream, int recurse,
1005                     const struct value_print_options *options,
1006                     int comma_needed,
1007                     struct type *outer_type, const gdb_byte *outer_valaddr)
1008 {
1009   int i, len;
1010
1011   len = TYPE_NFIELDS (type);
1012
1013   for (i = 0; i < len; i += 1)
1014     {
1015       if (ada_is_ignored_field (type, i))
1016         continue;
1017
1018       if (ada_is_wrapper_field (type, i))
1019         {
1020           comma_needed =
1021             print_field_values (TYPE_FIELD_TYPE (type, i),
1022                                 valaddr
1023                                 + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT,
1024                                 stream, recurse, options,
1025                                 comma_needed, type, valaddr);
1026           continue;
1027         }
1028       else if (ada_is_variant_part (type, i))
1029         {
1030           comma_needed =
1031             print_variant_part (type, i, valaddr,
1032                                 stream, recurse, options, comma_needed,
1033                                 outer_type, outer_valaddr);
1034           continue;
1035         }
1036
1037       if (comma_needed)
1038         fprintf_filtered (stream, ", ");
1039       comma_needed = 1;
1040
1041       if (options->pretty)
1042         {
1043           fprintf_filtered (stream, "\n");
1044           print_spaces_filtered (2 + 2 * recurse, stream);
1045         }
1046       else
1047         {
1048           wrap_here (n_spaces (2 + 2 * recurse));
1049         }
1050       if (options->inspect_it)
1051         {
1052           if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
1053             fputs_filtered ("\"( ptr \"", stream);
1054           else
1055             fputs_filtered ("\"( nodef \"", stream);
1056           fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1057                                    language_cplus, DMGL_NO_OPTS);
1058           fputs_filtered ("\" \"", stream);
1059           fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1060                                    language_cplus, DMGL_NO_OPTS);
1061           fputs_filtered ("\") \"", stream);
1062         }
1063       else
1064         {
1065           annotate_field_begin (TYPE_FIELD_TYPE (type, i));
1066           fprintf_filtered (stream, "%.*s",
1067                             ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
1068                             TYPE_FIELD_NAME (type, i));
1069           annotate_field_name_end ();
1070           fputs_filtered (" => ", stream);
1071           annotate_field_value ();
1072         }
1073
1074       if (TYPE_FIELD_PACKED (type, i))
1075         {
1076           struct value *v;
1077
1078           /* Bitfields require special handling, especially due to byte
1079              order problems.  */
1080           if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
1081             {
1082               fputs_filtered (_("<optimized out or zero length>"), stream);
1083             }
1084           else
1085             {
1086               int bit_pos = TYPE_FIELD_BITPOS (type, i);
1087               int bit_size = TYPE_FIELD_BITSIZE (type, i);
1088               struct value_print_options opts;
1089
1090               adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
1091               v = ada_value_primitive_packed_val (NULL, valaddr,
1092                                                   bit_pos / HOST_CHAR_BIT,
1093                                                   bit_pos % HOST_CHAR_BIT,
1094                                                   bit_size,
1095                                                   TYPE_FIELD_TYPE (type, i));
1096               opts = *options;
1097               opts.deref_ref = 0;
1098               val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), 0, 0,
1099                          stream, recurse + 1, &opts, current_language);
1100             }
1101         }
1102       else
1103         {
1104           struct value_print_options opts = *options;
1105           opts.deref_ref = 0;
1106           ada_val_print (TYPE_FIELD_TYPE (type, i),
1107                          valaddr + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT,
1108                          0, 0, stream, recurse + 1, &opts);
1109         }
1110       annotate_field_end ();
1111     }
1112
1113   return comma_needed;
1114 }