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