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