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