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