*** empty log message ***
[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 {
b50d69b5
JG
894 if (ada_is_tagged_type (value_type (deref_val), 1))
895 deref_val = ada_tag_value_at_base_address (deref_val);
896
a471c594
JK
897 common_val_print (deref_val, stream, recurse + 1, options,
898 current_language);
899 break;
900 }
901
902 deref_val_int = unpack_pointer (type, valaddr + offset_aligned);
969a1360
JB
903 if (deref_val_int != 0)
904 {
6c88661c 905 deref_val =
490f124f 906 ada_value_ind (value_from_pointer
969a1360
JB
907 (lookup_pointer_type (elttype),
908 deref_val_int));
5b4ee69b 909
b50d69b5
JG
910 if (ada_is_tagged_type (value_type (deref_val), 1))
911 deref_val = ada_tag_value_at_base_address (deref_val);
912
969a1360 913 val_print (value_type (deref_val),
490f124f
PA
914 value_contents_for_printing (deref_val),
915 value_embedded_offset (deref_val),
42ae5230 916 value_address (deref_val), stream, recurse + 1,
a491d753 917 deref_val, options, current_language);
969a1360
JB
918 }
919 else
920 fputs_filtered ("(null)", stream);
921 }
922 else
923 fputs_filtered ("???", stream);
924
14f9c5c9
AS
925 break;
926 }
4c4b4cd2 927 gdb_flush (stream);
14f9c5c9
AS
928}
929
930static int
490f124f
PA
931print_variant_part (struct type *type, int field_num,
932 const gdb_byte *valaddr, int offset,
79a45b7d 933 struct ui_file *stream, int recurse,
0e03807e 934 const struct value *val,
0963b4bd
MS
935 const struct value_print_options *options,
936 int comma_needed,
490f124f 937 struct type *outer_type, int outer_offset)
14f9c5c9
AS
938{
939 struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
490f124f
PA
940 int which = ada_which_variant_applies (var_type, outer_type,
941 valaddr + outer_offset);
14f9c5c9
AS
942
943 if (which < 0)
944 return 0;
945 else
d2e4a39e 946 return print_field_values
14f9c5c9 947 (TYPE_FIELD_TYPE (var_type, which),
490f124f
PA
948 valaddr,
949 offset + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT
14f9c5c9 950 + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT,
0e03807e 951 stream, recurse, val, options,
490f124f 952 comma_needed, outer_type, outer_offset);
14f9c5c9
AS
953}
954
8e069a98 955void
79a45b7d
TT
956ada_value_print (struct value *val0, struct ui_file *stream,
957 const struct value_print_options *options)
14f9c5c9 958{
0c3acc09
JB
959 struct value *val = ada_to_fixed_value (val0);
960 CORE_ADDR address = value_address (val);
f5aa6869 961 struct type *type = ada_check_typedef (value_type (val));
79a45b7d 962 struct value_print_options opts;
14f9c5c9 963
4c4b4cd2
PH
964 /* If it is a pointer, indicate what it points to. */
965 if (TYPE_CODE (type) == TYPE_CODE_PTR)
14f9c5c9 966 {
4c4b4cd2
PH
967 /* Hack: don't print (char *) for char strings. Their
968 type is indicated by the quoted string anyway. */
969 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char)
970 || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT
971 || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
14f9c5c9
AS
972 {
973 fprintf_filtered (stream, "(");
974 type_print (type, "", stream, -1);
975 fprintf_filtered (stream, ") ");
976 }
977 }
4c4b4cd2 978 else if (ada_is_array_descriptor_type (type))
14f9c5c9 979 {
720d1a40
JB
980 /* We do not print the type description unless TYPE is an array
981 access type (this is encoded by the compiler as a typedef to
982 a fat pointer - hence the check against TYPE_CODE_TYPEDEF). */
983 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
984 {
985 fprintf_filtered (stream, "(");
986 type_print (type, "", stream, -1);
987 fprintf_filtered (stream, ") ");
988 }
14f9c5c9
AS
989 }
990 else if (ada_is_bogus_array_descriptor (type))
991 {
992 fprintf_filtered (stream, "(");
993 type_print (type, "", stream, -1);
994 fprintf_filtered (stream, ") (...?)");
8e069a98 995 return;
14f9c5c9 996 }
4c4b4cd2 997
79a45b7d
TT
998 opts = *options;
999 opts.deref_ref = 1;
8e069a98
TT
1000 val_print (type, value_contents_for_printing (val),
1001 value_embedded_offset (val), address,
1002 stream, 0, val, &opts, current_language);
14f9c5c9 1003}
d2e4a39e 1004
14f9c5c9 1005static void
fc1a4b47 1006print_record (struct type *type, const gdb_byte *valaddr,
490f124f 1007 int offset,
79a45b7d 1008 struct ui_file *stream, int recurse,
0e03807e 1009 const struct value *val,
79a45b7d 1010 const struct value_print_options *options)
14f9c5c9 1011{
61ee279c 1012 type = ada_check_typedef (type);
14f9c5c9
AS
1013
1014 fprintf_filtered (stream, "(");
1015
490f124f
PA
1016 if (print_field_values (type, valaddr, offset,
1017 stream, recurse, val, options,
1018 0, type, offset) != 0 && options->pretty)
14f9c5c9
AS
1019 {
1020 fprintf_filtered (stream, "\n");
1021 print_spaces_filtered (2 * recurse, stream);
1022 }
1023
1024 fprintf_filtered (stream, ")");
1025}
1026
32b72a42 1027/* Print out fields of value at VALADDR + OFFSET having structure type TYPE.
4c4b4cd2 1028
32b72a42
PA
1029 TYPE, VALADDR, OFFSET, STREAM, RECURSE, and OPTIONS have the same
1030 meanings as in ada_print_value and ada_val_print.
14f9c5c9 1031
32b72a42
PA
1032 OUTER_TYPE and OUTER_OFFSET give type and address of enclosing
1033 record (used to get discriminant values when printing variant
1034 parts).
14f9c5c9 1035
4c4b4cd2 1036 COMMA_NEEDED is 1 if fields have been printed at the current recursion
14f9c5c9 1037 level, so that a comma is needed before any field printed by this
4c4b4cd2 1038 call.
14f9c5c9 1039
4c4b4cd2 1040 Returns 1 if COMMA_NEEDED or any fields were printed. */
14f9c5c9
AS
1041
1042static int
fc1a4b47 1043print_field_values (struct type *type, const gdb_byte *valaddr,
490f124f 1044 int offset, struct ui_file *stream, int recurse,
0e03807e 1045 const struct value *val,
79a45b7d
TT
1046 const struct value_print_options *options,
1047 int comma_needed,
490f124f 1048 struct type *outer_type, int outer_offset)
14f9c5c9
AS
1049{
1050 int i, len;
1051
1052 len = TYPE_NFIELDS (type);
1053
1054 for (i = 0; i < len; i += 1)
1055 {
1056 if (ada_is_ignored_field (type, i))
d2e4a39e 1057 continue;
14f9c5c9
AS
1058
1059 if (ada_is_wrapper_field (type, i))
1060 {
d2e4a39e 1061 comma_needed =
14f9c5c9 1062 print_field_values (TYPE_FIELD_TYPE (type, i),
490f124f
PA
1063 valaddr,
1064 (offset
1065 + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
0e03807e 1066 stream, recurse, val, options,
490f124f 1067 comma_needed, type, offset);
14f9c5c9
AS
1068 continue;
1069 }
1070 else if (ada_is_variant_part (type, i))
1071 {
1072 comma_needed =
1073 print_variant_part (type, i, valaddr,
490f124f
PA
1074 offset, stream, recurse, val,
1075 options, comma_needed,
1076 outer_type, outer_offset);
14f9c5c9
AS
1077 continue;
1078 }
1079
1080 if (comma_needed)
1081 fprintf_filtered (stream, ", ");
1082 comma_needed = 1;
1083
79a45b7d 1084 if (options->pretty)
14f9c5c9
AS
1085 {
1086 fprintf_filtered (stream, "\n");
1087 print_spaces_filtered (2 + 2 * recurse, stream);
1088 }
d2e4a39e 1089 else
14f9c5c9
AS
1090 {
1091 wrap_here (n_spaces (2 + 2 * recurse));
1092 }
79a45b7d 1093 if (options->inspect_it)
14f9c5c9
AS
1094 {
1095 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
1096 fputs_filtered ("\"( ptr \"", stream);
1097 else
1098 fputs_filtered ("\"( nodef \"", stream);
1099 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1100 language_cplus, DMGL_NO_OPTS);
1101 fputs_filtered ("\" \"", stream);
1102 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1103 language_cplus, DMGL_NO_OPTS);
1104 fputs_filtered ("\") \"", stream);
1105 }
1106 else
1107 {
1108 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
d2e4a39e 1109 fprintf_filtered (stream, "%.*s",
14f9c5c9
AS
1110 ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
1111 TYPE_FIELD_NAME (type, i));
1112 annotate_field_name_end ();
1113 fputs_filtered (" => ", stream);
1114 annotate_field_value ();
1115 }
1116
1117 if (TYPE_FIELD_PACKED (type, i))
1118 {
d2e4a39e 1119 struct value *v;
14f9c5c9
AS
1120
1121 /* Bitfields require special handling, especially due to byte
1122 order problems. */
b4ba55a1 1123 if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
14f9c5c9 1124 {
edefbb7c 1125 fputs_filtered (_("<optimized out or zero length>"), stream);
14f9c5c9
AS
1126 }
1127 else
1128 {
1129 int bit_pos = TYPE_FIELD_BITPOS (type, i);
1130 int bit_size = TYPE_FIELD_BITSIZE (type, i);
79a45b7d 1131 struct value_print_options opts;
d2e4a39e 1132
14f9c5c9 1133 adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
490f124f
PA
1134 v = ada_value_primitive_packed_val
1135 (NULL, valaddr,
1136 offset + bit_pos / HOST_CHAR_BIT,
1137 bit_pos % HOST_CHAR_BIT,
1138 bit_size, TYPE_FIELD_TYPE (type, i));
79a45b7d
TT
1139 opts = *options;
1140 opts.deref_ref = 0;
490f124f
PA
1141 val_print (TYPE_FIELD_TYPE (type, i),
1142 value_contents_for_printing (v),
1143 value_embedded_offset (v), 0,
0e03807e
TT
1144 stream, recurse + 1, v,
1145 &opts, current_language);
14f9c5c9
AS
1146 }
1147 }
1148 else
79a45b7d
TT
1149 {
1150 struct value_print_options opts = *options;
5b4ee69b 1151
79a45b7d
TT
1152 opts.deref_ref = 0;
1153 ada_val_print (TYPE_FIELD_TYPE (type, i),
490f124f
PA
1154 valaddr,
1155 (offset
1156 + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT),
1157 0, stream, recurse + 1, val, &opts);
79a45b7d 1158 }
14f9c5c9
AS
1159 annotate_field_end ();
1160 }
1161
1162 return comma_needed;
1163}
This page took 0.679624 seconds and 4 git commands to generate.