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