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