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