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