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