2011-01-07 Michael Snyder <msnyder@vmware.com>
[deliverable/binutils-gdb.git] / gdb / ada-valprint.c
CommitLineData
4c4b4cd2 1/* Support for printing Ada values for GDB, the GNU debugger.
d56612af 2
6aba47ca 3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1997, 2001, 2002,
7b6bb8da 4 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4c38e0a4 5 Free Software Foundation, Inc.
14f9c5c9 6
a9762ec7 7 This file is part of GDB.
14f9c5c9 8
a9762ec7
JB
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14f9c5c9 13
a9762ec7
JB
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
14f9c5c9 18
a9762ec7
JB
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
14f9c5c9 21
14f9c5c9 22#include "defs.h"
12c89474 23#include <ctype.h>
4c4b4cd2 24#include "gdb_string.h"
14f9c5c9
AS
25#include "symtab.h"
26#include "gdbtypes.h"
27#include "expression.h"
28#include "value.h"
29#include "demangle.h"
30#include "valprint.h"
31#include "language.h"
32#include "annotate.h"
33#include "ada-lang.h"
34#include "c-lang.h"
04714b91 35#include "infcall.h"
60250e8b 36#include "exceptions.h"
8ca1c40e 37#include "objfiles.h"
14f9c5c9 38
fc1a4b47 39static void print_record (struct type *, const gdb_byte *, 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 *,
79a45b7d 45 struct ui_file *, int,
0e03807e 46 const struct value *,
79a45b7d
TT
47 const struct value_print_options *,
48 int, struct type *,
fc1a4b47 49 const gdb_byte *);
14f9c5c9 50
d2e4a39e 51static void adjust_type_signedness (struct type *);
14f9c5c9 52
fc1a4b47 53static int ada_val_print_1 (struct type *, const gdb_byte *, int, CORE_ADDR,
79a45b7d 54 struct ui_file *, int,
0e03807e 55 const struct value *,
79a45b7d 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
AS
111 case TYPE_CODE_ENUM:
112 if (low_bound == TYPE_FIELD_BITPOS (index_type, 0))
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,
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;
d2e4a39e 188 v0 = ada_value_primitive_packed_val (NULL, valaddr,
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;
d2e4a39e 197 v1 = ada_value_primitive_packed_val (NULL, valaddr,
14f9c5c9
AS
198 (i * bitsize) / HOST_CHAR_BIT,
199 (i * bitsize) % HOST_CHAR_BIT,
200 bitsize, elttype);
0fd88904 201 if (memcmp (value_contents (v0), value_contents (v1), eltlen) != 0)
14f9c5c9
AS
202 break;
203 }
204
79a45b7d 205 if (i - i0 > options->repeat_count_threshold)
14f9c5c9 206 {
79a45b7d 207 struct value_print_options opts = *options;
5b4ee69b 208
79a45b7d
TT
209 opts.deref_ref = 0;
210 val_print (elttype, value_contents (v0), 0, 0, stream,
0e03807e 211 recurse + 1, val, &opts, current_language);
14f9c5c9 212 annotate_elt_rep (i - i0);
edefbb7c 213 fprintf_filtered (stream, _(" <repeats %u times>"), i - i0);
14f9c5c9
AS
214 annotate_elt_rep_end ();
215
216 }
217 else
218 {
219 int j;
79a45b7d 220 struct value_print_options opts = *options;
5b4ee69b 221
79a45b7d 222 opts.deref_ref = 0;
14f9c5c9
AS
223 for (j = i0; j < i; j += 1)
224 {
d2e4a39e 225 if (j > i0)
14f9c5c9 226 {
79a45b7d 227 if (options->prettyprint_arrays)
14f9c5c9
AS
228 {
229 fprintf_filtered (stream, ",\n");
230 print_spaces_filtered (2 + 2 * recurse, stream);
231 }
232 else
233 {
234 fprintf_filtered (stream, ", ");
235 }
236 wrap_here (n_spaces (2 + 2 * recurse));
e79af960 237 maybe_print_array_index (index_type, j + low,
79a45b7d 238 stream, options);
14f9c5c9 239 }
79a45b7d 240 val_print (elttype, value_contents (v0), 0, 0, stream,
0e03807e 241 recurse + 1, val, &opts, current_language);
14f9c5c9
AS
242 annotate_elt ();
243 }
244 }
245 things_printed += i - i0;
246 }
247 annotate_array_section_end ();
248 if (i < len)
249 {
250 fprintf_filtered (stream, "...");
251 }
252
253 value_free_to_mark (mark);
254}
255
d2e4a39e 256static struct type *
fc1a4b47 257printable_val_type (struct type *type, const gdb_byte *valaddr)
14f9c5c9 258{
1ed6ede0 259 return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL, 1);
14f9c5c9
AS
260}
261
262/* Print the character C on STREAM as part of the contents of a literal
263 string whose delimiter is QUOTER. TYPE_LEN is the length in bytes
4c4b4cd2 264 (1 or 2) of the character. */
14f9c5c9
AS
265
266void
6c7a06a3
TT
267ada_emit_char (int c, struct type *type, struct ui_file *stream,
268 int quoter, int type_len)
14f9c5c9
AS
269{
270 if (type_len != 2)
271 type_len = 1;
272
273 c &= (1 << (type_len * TARGET_CHAR_BIT)) - 1;
274
275 if (isascii (c) && isprint (c))
276 {
277 if (c == quoter && c == '"')
529cad9c 278 fprintf_filtered (stream, "\"\"");
14f9c5c9
AS
279 else
280 fprintf_filtered (stream, "%c", c);
281 }
282 else
d2e4a39e 283 fprintf_filtered (stream, "[\"%0*x\"]", type_len * 2, c);
14f9c5c9
AS
284}
285
286/* Character #I of STRING, given that TYPE_LEN is the size in bytes (1
4c4b4cd2 287 or 2) of a character. */
14f9c5c9
AS
288
289static int
e17a4113
UW
290char_at (const gdb_byte *string, int i, int type_len,
291 enum bfd_endian byte_order)
14f9c5c9
AS
292{
293 if (type_len == 1)
294 return string[i];
d2e4a39e 295 else
e17a4113 296 return (int) extract_unsigned_integer (string + 2 * i, 2, byte_order);
14f9c5c9
AS
297}
298
0963b4bd 299/* Wrapper around memcpy to make it legal argument to ui_file_put. */
4c4b4cd2
PH
300static void
301ui_memcpy (void *dest, const char *buffer, long len)
302{
303 memcpy (dest, buffer, (size_t) len);
304 ((char *) dest)[len] = '\0';
305}
306
307/* Print a floating-point value of type TYPE, pointed to in GDB by
308 VALADDR, on STREAM. Use Ada formatting conventions: there must be
309 a decimal point, and at least one digit before and after the
310 point. We use GNAT format for NaNs and infinities. */
311static void
fc1a4b47 312ada_print_floating (const gdb_byte *valaddr, struct type *type,
a2bd3dcd 313 struct ui_file *stream)
4c4b4cd2
PH
314{
315 char buffer[64];
316 char *s, *result;
317 int len;
318 struct ui_file *tmp_stream = mem_fileopen ();
319 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_stream);
320
321 print_floating (valaddr, type, tmp_stream);
322 ui_file_put (tmp_stream, ui_memcpy, buffer);
323 do_cleanups (cleanups);
324
325 result = buffer;
326 len = strlen (result);
327
328 /* Modify for Ada rules. */
606b8d1a 329
c3e5cd34
PH
330 s = strstr (result, "inf");
331 if (s == NULL)
332 s = strstr (result, "Inf");
333 if (s == NULL)
334 s = strstr (result, "INF");
335 if (s != NULL)
4c4b4cd2 336 strcpy (s, "Inf");
c3e5cd34
PH
337
338 if (s == NULL)
4c4b4cd2 339 {
c3e5cd34
PH
340 s = strstr (result, "nan");
341 if (s == NULL)
342 s = strstr (result, "NaN");
343 if (s == NULL)
344 s = strstr (result, "Nan");
345 if (s != NULL)
346 {
347 s[0] = s[2] = 'N';
348 if (result[0] == '-')
349 result += 1;
350 }
4c4b4cd2 351 }
c3e5cd34
PH
352
353 if (s == NULL && strchr (result, '.') == NULL)
4c4b4cd2 354 {
c3e5cd34
PH
355 s = strchr (result, 'e');
356 if (s == NULL)
4c4b4cd2
PH
357 fprintf_filtered (stream, "%s.0", result);
358 else
359 fprintf_filtered (stream, "%.*s.0%s", (int) (s-result), result, s);
360 return;
361 }
362 fprintf_filtered (stream, "%s", result);
363}
364
14f9c5c9 365void
6c7a06a3 366ada_printchar (int c, struct type *type, struct ui_file *stream)
14f9c5c9
AS
367{
368 fputs_filtered ("'", stream);
6c7a06a3 369 ada_emit_char (c, type, stream, '\'', 1);
14f9c5c9
AS
370 fputs_filtered ("'", stream);
371}
372
373/* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a
7c964f07
UW
374 form appropriate for TYPE, if non-NULL. If TYPE is NULL, print VAL
375 like a default signed integer. */
14f9c5c9
AS
376
377void
ebf56fd3 378ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
14f9c5c9
AS
379{
380 unsigned int i;
381 unsigned len;
382
7c964f07
UW
383 if (!type)
384 {
385 print_longest (stream, 'd', 0, val);
386 return;
387 }
388
61ee279c 389 type = ada_check_typedef (type);
14f9c5c9
AS
390
391 switch (TYPE_CODE (type))
392 {
393
394 case TYPE_CODE_ENUM:
395 len = TYPE_NFIELDS (type);
396 for (i = 0; i < len; i++)
397 {
398 if (TYPE_FIELD_BITPOS (type, i) == val)
399 {
400 break;
401 }
402 }
403 if (i < len)
404 {
405 fputs_filtered (ada_enum_name (TYPE_FIELD_NAME (type, i)), stream);
406 }
407 else
408 {
409 print_longest (stream, 'd', 0, val);
410 }
411 break;
412
413 case TYPE_CODE_INT:
414 print_longest (stream, TYPE_UNSIGNED (type) ? 'u' : 'd', 0, val);
415 break;
416
417 case TYPE_CODE_CHAR:
6c7a06a3 418 LA_PRINT_CHAR ((unsigned char) val, type, stream);
14f9c5c9
AS
419 break;
420
421 case TYPE_CODE_BOOL:
422 fprintf_filtered (stream, val ? "true" : "false");
423 break;
424
425 case TYPE_CODE_RANGE:
426 ada_print_scalar (TYPE_TARGET_TYPE (type), val, stream);
427 return;
428
429 case TYPE_CODE_UNDEF:
430 case TYPE_CODE_PTR:
431 case TYPE_CODE_ARRAY:
432 case TYPE_CODE_STRUCT:
433 case TYPE_CODE_UNION:
434 case TYPE_CODE_FUNC:
435 case TYPE_CODE_FLT:
436 case TYPE_CODE_VOID:
437 case TYPE_CODE_SET:
438 case TYPE_CODE_STRING:
439 case TYPE_CODE_ERROR:
0d5de010
DJ
440 case TYPE_CODE_MEMBERPTR:
441 case TYPE_CODE_METHODPTR:
14f9c5c9
AS
442 case TYPE_CODE_METHOD:
443 case TYPE_CODE_REF:
edefbb7c 444 warning (_("internal error: unhandled type in ada_print_scalar"));
14f9c5c9
AS
445 break;
446
447 default:
edefbb7c 448 error (_("Invalid type code in symbol table."));
14f9c5c9
AS
449 }
450 gdb_flush (stream);
451}
452
453/* Print the character string STRING, printing at most LENGTH characters.
454 Printing stops early if the number hits print_max; repeat counts
455 are printed as appropriate. Print ellipses at the end if we
456 had to stop before printing LENGTH characters, or if
0963b4bd 457 FORCE_ELLIPSES. TYPE_LEN is the length (1 or 2) of the character type. */
14f9c5c9
AS
458
459static void
6c7a06a3 460printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
79a45b7d
TT
461 unsigned int length, int force_ellipses, int type_len,
462 const struct value_print_options *options)
14f9c5c9 463{
e17a4113 464 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (elttype));
14f9c5c9
AS
465 unsigned int i;
466 unsigned int things_printed = 0;
467 int in_quotes = 0;
468 int need_comma = 0;
469
470 if (length == 0)
471 {
472 fputs_filtered ("\"\"", stream);
473 return;
474 }
475
79a45b7d 476 for (i = 0; i < length && things_printed < options->print_max; i += 1)
14f9c5c9
AS
477 {
478 /* Position of the character we are examining
d2e4a39e 479 to see whether it is repeated. */
14f9c5c9
AS
480 unsigned int rep1;
481 /* Number of repetitions we have detected so far. */
482 unsigned int reps;
483
484 QUIT;
485
486 if (need_comma)
487 {
488 fputs_filtered (", ", stream);
489 need_comma = 0;
490 }
491
492 rep1 = i + 1;
493 reps = 1;
c3e5cd34 494 while (rep1 < length
e17a4113
UW
495 && char_at (string, rep1, type_len, byte_order)
496 == char_at (string, i, type_len, byte_order))
14f9c5c9
AS
497 {
498 rep1 += 1;
499 reps += 1;
500 }
501
79a45b7d 502 if (reps > options->repeat_count_threshold)
14f9c5c9
AS
503 {
504 if (in_quotes)
505 {
79a45b7d 506 if (options->inspect_it)
14f9c5c9
AS
507 fputs_filtered ("\\\", ", stream);
508 else
509 fputs_filtered ("\", ", stream);
510 in_quotes = 0;
511 }
512 fputs_filtered ("'", stream);
e17a4113
UW
513 ada_emit_char (char_at (string, i, type_len, byte_order),
514 elttype, stream, '\'', type_len);
14f9c5c9 515 fputs_filtered ("'", stream);
edefbb7c 516 fprintf_filtered (stream, _(" <repeats %u times>"), reps);
14f9c5c9 517 i = rep1 - 1;
79a45b7d 518 things_printed += options->repeat_count_threshold;
14f9c5c9
AS
519 need_comma = 1;
520 }
521 else
522 {
523 if (!in_quotes)
524 {
79a45b7d 525 if (options->inspect_it)
14f9c5c9
AS
526 fputs_filtered ("\\\"", stream);
527 else
528 fputs_filtered ("\"", stream);
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)
539 {
79a45b7d 540 if (options->inspect_it)
14f9c5c9
AS
541 fputs_filtered ("\\\"", stream);
542 else
543 fputs_filtered ("\"", stream);
544 }
545
546 if (force_ellipses || i < length)
547 fputs_filtered ("...", stream);
548}
549
550void
0963b4bd
MS
551ada_printstr (struct ui_file *stream, struct type *type,
552 const gdb_byte *string, unsigned int length,
553 const char *encoding, int force_ellipses,
79a45b7d 554 const struct value_print_options *options)
14f9c5c9 555{
6c7a06a3
TT
556 printstr (stream, type, string, length, force_ellipses, TYPE_LENGTH (type),
557 options);
14f9c5c9
AS
558}
559
560
561/* Print data of type TYPE located at VALADDR (within GDB), which came from
562 the inferior at address ADDRESS, onto stdio stream STREAM according to
79a45b7d 563 OPTIONS. The data at VALADDR is in target byte order.
14f9c5c9
AS
564
565 If the data is printed as a string, returns the number of string characters
566 printed.
567
14f9c5c9 568 RECURSE indicates the amount of indentation to supply before
79a45b7d 569 continuation lines; this amount is roughly twice the value of RECURSE. */
14f9c5c9
AS
570
571int
fc1a4b47 572ada_val_print (struct type *type, const gdb_byte *valaddr0,
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
TT
578 volatile struct gdb_exception except;
579 int result = 0;
14f9c5c9 580
0e03807e
TT
581 TRY_CATCH (except, RETURN_MASK_ALL)
582 {
583 result = ada_val_print_1 (type, valaddr0, embedded_offset, address,
584 stream, recurse, val, options);
585 }
5b4ee69b 586
0e03807e
TT
587 if (except.reason < 0)
588 result = 0;
589
590 return result;
14f9c5c9
AS
591}
592
e936309c
JB
593/* Assuming TYPE is a simple array, print the value of this array located
594 at VALADDR. See ada_val_print for a description of the various
595 parameters of this function; they are identical. The semantics
596 of the return value is also identical to ada_val_print. */
597
598static int
599ada_val_print_array (struct type *type, const gdb_byte *valaddr,
79a45b7d 600 CORE_ADDR address, struct ui_file *stream, int recurse,
0e03807e 601 const struct value *val,
79a45b7d 602 const struct value_print_options *options)
e936309c 603{
e17a4113 604 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
e936309c 605 struct type *elttype = TYPE_TARGET_TYPE (type);
e936309c
JB
606 int result = 0;
607
e936309c 608 /* For an array of chars, print with string syntax. */
79a45b7d
TT
609 if (ada_is_string_type (type)
610 && (options->format == 0 || options->format == 's'))
e936309c 611 {
9addb3b9
JB
612 unsigned int eltlen;
613 unsigned int len;
614
615 if (elttype == NULL)
616 eltlen = 0;
617 else
618 eltlen = TYPE_LENGTH (elttype);
619 if (eltlen == 0)
620 len = 0;
621 else
622 len = TYPE_LENGTH (type) / eltlen;
623
79a45b7d 624 if (options->prettyprint_arrays)
e936309c
JB
625 print_spaces_filtered (2 + 2 * recurse, stream);
626
627 /* If requested, look for the first null char and only print
628 elements up to it. */
79a45b7d 629 if (options->stop_print_at_null)
e936309c
JB
630 {
631 int temp_len;
632
633 /* Look for a NULL char. */
634 for (temp_len = 0;
635 (temp_len < len
79a45b7d 636 && temp_len < options->print_max
e17a4113 637 && char_at (valaddr, temp_len, eltlen, byte_order) != 0);
e936309c
JB
638 temp_len += 1);
639 len = temp_len;
640 }
641
6c7a06a3 642 printstr (stream, elttype, valaddr, len, 0, eltlen, options);
e936309c
JB
643 result = len;
644 }
645 else
646 {
647 fprintf_filtered (stream, "(");
79a45b7d 648 print_optional_low_bound (stream, type, options);
e936309c
JB
649 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
650 val_print_packed_array_elements (type, valaddr, 0, stream,
0e03807e 651 recurse, val, options);
e936309c
JB
652 else
653 val_print_array_elements (type, valaddr, address, stream,
0e03807e 654 recurse, val, options, 0);
e936309c
JB
655 fprintf_filtered (stream, ")");
656 }
657
658 return result;
659}
660
14f9c5c9 661/* See the comment on ada_val_print. This function differs in that it
e936309c 662 does not catch evaluation errors (leaving that to ada_val_print). */
14f9c5c9
AS
663
664static int
fc1a4b47 665ada_val_print_1 (struct type *type, const gdb_byte *valaddr0,
a2bd3dcd 666 int embedded_offset, CORE_ADDR address,
79a45b7d 667 struct ui_file *stream, int recurse,
0e03807e 668 const struct value *original_value,
79a45b7d 669 const struct value_print_options *options)
14f9c5c9
AS
670{
671 unsigned int len;
672 int i;
673 struct type *elttype;
14f9c5c9 674 LONGEST val;
fc1a4b47 675 const gdb_byte *valaddr = valaddr0 + embedded_offset;
14f9c5c9 676
61ee279c 677 type = ada_check_typedef (type);
14f9c5c9 678
ad82864c
JB
679 if (ada_is_array_descriptor_type (type)
680 || ada_is_constrained_packed_array_type (type))
14f9c5c9
AS
681 {
682 int retn;
d2e4a39e
AS
683 struct value *mark = value_mark ();
684 struct value *val;
5b4ee69b 685
14f9c5c9 686 val = value_from_contents_and_address (type, valaddr, address);
720d1a40
JB
687 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF) /* array access type. */
688 val = ada_coerce_to_simple_array_ptr (val);
689 else
690 val = ada_coerce_to_simple_array (val);
14f9c5c9
AS
691 if (val == NULL)
692 {
9e87a409
JB
693 gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF);
694 fprintf_filtered (stream, "0x0");
14f9c5c9
AS
695 retn = 0;
696 }
697 else
0fd88904 698 retn = ada_val_print_1 (value_type (val), value_contents (val), 0,
0e03807e
TT
699 value_address (val), stream, recurse,
700 NULL, options);
14f9c5c9
AS
701 value_free_to_mark (mark);
702 return retn;
703 }
704
705 valaddr = ada_aligned_value_addr (type, valaddr);
706 embedded_offset -= valaddr - valaddr0 - embedded_offset;
707 type = printable_val_type (type, valaddr);
708
709 switch (TYPE_CODE (type))
710 {
711 default:
d2e4a39e 712 return c_val_print (type, valaddr0, embedded_offset, address, stream,
0e03807e 713 recurse, original_value, options);
14f9c5c9 714
4c4b4cd2
PH
715 case TYPE_CODE_PTR:
716 {
717 int ret = c_val_print (type, valaddr0, embedded_offset, address,
0e03807e 718 stream, recurse, original_value, options);
5b4ee69b 719
4c4b4cd2
PH
720 if (ada_is_tag_type (type))
721 {
722 struct value *val =
723 value_from_contents_and_address (type, valaddr, address);
724 const char *name = ada_tag_name (val);
5b4ee69b 725
4c4b4cd2
PH
726 if (name != NULL)
727 fprintf_filtered (stream, " (%s)", name);
728 return 0;
729 }
730 return ret;
731 }
732
14f9c5c9
AS
733 case TYPE_CODE_INT:
734 case TYPE_CODE_RANGE:
735 if (ada_is_fixed_point_type (type))
736 {
737 LONGEST v = unpack_long (type, valaddr);
738 int len = TYPE_LENGTH (type);
739
740 fprintf_filtered (stream, len < 4 ? "%.11g" : "%.17g",
741 (double) ada_fixed_to_float (type, v));
742 return 0;
743 }
14f9c5c9
AS
744 else if (TYPE_CODE (type) == TYPE_CODE_RANGE)
745 {
d2e4a39e 746 struct type *target_type = TYPE_TARGET_TYPE (type);
5b4ee69b 747
14f9c5c9
AS
748 if (TYPE_LENGTH (type) != TYPE_LENGTH (target_type))
749 {
750 /* Obscure case of range type that has different length from
d2e4a39e
AS
751 its base type. Perform a conversion, or we will get a
752 nonsense value. Actually, we could use the same
4c4b4cd2 753 code regardless of lengths; I'm just avoiding a cast. */
d2e4a39e
AS
754 struct value *v = value_cast (target_type,
755 value_from_contents_and_address
756 (type, valaddr, 0));
5b4ee69b 757
0fd88904 758 return ada_val_print_1 (target_type, value_contents (v), 0, 0,
0e03807e 759 stream, recurse + 1, NULL, options);
14f9c5c9
AS
760 }
761 else
d2e4a39e 762 return ada_val_print_1 (TYPE_TARGET_TYPE (type),
14f9c5c9 763 valaddr0, embedded_offset,
0963b4bd
MS
764 address, stream, recurse,
765 original_value, options);
14f9c5c9 766 }
d2e4a39e 767 else
14f9c5c9 768 {
79a45b7d
TT
769 int format = (options->format ? options->format
770 : options->output_format);
5b4ee69b 771
14f9c5c9
AS
772 if (format)
773 {
79a45b7d 774 struct value_print_options opts = *options;
5b4ee69b 775
79a45b7d
TT
776 opts.format = format;
777 print_scalar_formatted (valaddr, type, &opts, 0, stream);
14f9c5c9 778 }
50810684 779 else if (ada_is_system_address_type (type))
4c4b4cd2
PH
780 {
781 /* FIXME: We want to print System.Address variables using
782 the same format as for any access type. But for some
783 reason GNAT encodes the System.Address type as an int,
784 so we have to work-around this deficiency by handling
50810684 785 System.Address values as a special case. */
8ca1c40e 786
50810684 787 struct gdbarch *gdbarch = get_type_arch (type);
8ca1c40e 788 struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
5af949e3 789 CORE_ADDR addr = extract_typed_address (valaddr, ptr_type);
8ca1c40e 790
4c4b4cd2
PH
791 fprintf_filtered (stream, "(");
792 type_print (type, "", stream, -1);
793 fprintf_filtered (stream, ") ");
5af949e3 794 fputs_filtered (paddress (gdbarch, addr), stream);
4c4b4cd2 795 }
14f9c5c9
AS
796 else
797 {
798 val_print_type_code_int (type, valaddr, stream);
799 if (ada_is_character_type (type))
800 {
801 fputs_filtered (" ", stream);
802 ada_printchar ((unsigned char) unpack_long (type, valaddr),
6c7a06a3 803 type, stream);
14f9c5c9
AS
804 }
805 }
806 return 0;
807 }
808
809 case TYPE_CODE_ENUM:
79a45b7d 810 if (options->format)
14f9c5c9 811 {
79a45b7d 812 print_scalar_formatted (valaddr, type, options, 0, stream);
14f9c5c9
AS
813 break;
814 }
815 len = TYPE_NFIELDS (type);
816 val = unpack_long (type, valaddr);
817 for (i = 0; i < len; i++)
818 {
819 QUIT;
820 if (val == TYPE_FIELD_BITPOS (type, i))
821 {
822 break;
823 }
824 }
825 if (i < len)
826 {
d2e4a39e 827 const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i));
5b4ee69b 828
d2e4a39e 829 if (name[0] == '\'')
14f9c5c9
AS
830 fprintf_filtered (stream, "%ld %s", (long) val, name);
831 else
832 fputs_filtered (name, stream);
833 }
834 else
835 {
836 print_longest (stream, 'd', 0, val);
837 }
838 break;
d2e4a39e 839
4f2aea11 840 case TYPE_CODE_FLAGS:
79a45b7d
TT
841 if (options->format)
842 print_scalar_formatted (valaddr, type, options, 0, stream);
4f2aea11
MK
843 else
844 val_print_type_code_flags (type, valaddr, stream);
845 break;
846
4c4b4cd2 847 case TYPE_CODE_FLT:
79a45b7d 848 if (options->format)
4c4b4cd2 849 return c_val_print (type, valaddr0, embedded_offset, address, stream,
0e03807e 850 recurse, original_value, options);
4c4b4cd2
PH
851 else
852 ada_print_floating (valaddr0 + embedded_offset, type, stream);
853 break;
854
14f9c5c9
AS
855 case TYPE_CODE_UNION:
856 case TYPE_CODE_STRUCT:
857 if (ada_is_bogus_array_descriptor (type))
858 {
859 fprintf_filtered (stream, "(...?)");
860 return 0;
d2e4a39e 861 }
14f9c5c9
AS
862 else
863 {
0e03807e
TT
864 print_record (type, valaddr, stream, recurse, original_value,
865 options);
14f9c5c9
AS
866 return 0;
867 }
868
869 case TYPE_CODE_ARRAY:
79a45b7d 870 return ada_val_print_array (type, valaddr, address, stream,
0e03807e 871 recurse, original_value, options);
14f9c5c9
AS
872
873 case TYPE_CODE_REF:
969a1360
JB
874 /* For references, the debugger is expected to print the value as
875 an address if DEREF_REF is null. But printing an address in place
876 of the object value would be confusing to an Ada programmer.
877 So, for Ada values, we print the actual dereferenced value
878 regardless. */
14f9c5c9 879 elttype = check_typedef (TYPE_TARGET_TYPE (type));
969a1360
JB
880
881 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
882 {
d8631d21 883 LONGEST deref_val_int = (LONGEST) unpack_pointer (type, valaddr);
5b4ee69b 884
969a1360
JB
885 if (deref_val_int != 0)
886 {
887 struct value *deref_val =
888 ada_value_ind (value_from_longest
889 (lookup_pointer_type (elttype),
890 deref_val_int));
5b4ee69b 891
969a1360
JB
892 val_print (value_type (deref_val),
893 value_contents (deref_val), 0,
42ae5230 894 value_address (deref_val), stream, recurse + 1,
0e03807e 895 original_value, options, current_language);
969a1360
JB
896 }
897 else
898 fputs_filtered ("(null)", stream);
899 }
900 else
901 fputs_filtered ("???", stream);
902
14f9c5c9
AS
903 break;
904 }
4c4b4cd2 905 gdb_flush (stream);
14f9c5c9
AS
906 return 0;
907}
908
909static int
fc1a4b47 910print_variant_part (struct type *type, int field_num, const gdb_byte *valaddr,
79a45b7d 911 struct ui_file *stream, int recurse,
0e03807e 912 const struct value *val,
0963b4bd
MS
913 const struct value_print_options *options,
914 int comma_needed,
fc1a4b47 915 struct type *outer_type, const gdb_byte *outer_valaddr)
14f9c5c9
AS
916{
917 struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
d2e4a39e 918 int which = ada_which_variant_applies (var_type, outer_type, outer_valaddr);
14f9c5c9
AS
919
920 if (which < 0)
921 return 0;
922 else
d2e4a39e 923 return print_field_values
14f9c5c9
AS
924 (TYPE_FIELD_TYPE (var_type, which),
925 valaddr + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT
926 + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT,
0e03807e 927 stream, recurse, val, options,
14f9c5c9
AS
928 comma_needed, outer_type, outer_valaddr);
929}
930
931int
79a45b7d
TT
932ada_value_print (struct value *val0, struct ui_file *stream,
933 const struct value_print_options *options)
14f9c5c9 934{
0c3acc09
JB
935 struct value *val = ada_to_fixed_value (val0);
936 CORE_ADDR address = value_address (val);
937 struct type *type = value_type (val);
79a45b7d 938 struct value_print_options opts;
14f9c5c9 939
4c4b4cd2
PH
940 /* If it is a pointer, indicate what it points to. */
941 if (TYPE_CODE (type) == TYPE_CODE_PTR)
14f9c5c9 942 {
4c4b4cd2
PH
943 /* Hack: don't print (char *) for char strings. Their
944 type is indicated by the quoted string anyway. */
945 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char)
946 || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT
947 || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
14f9c5c9
AS
948 {
949 fprintf_filtered (stream, "(");
950 type_print (type, "", stream, -1);
951 fprintf_filtered (stream, ") ");
952 }
953 }
4c4b4cd2 954 else if (ada_is_array_descriptor_type (type))
14f9c5c9 955 {
720d1a40
JB
956 /* We do not print the type description unless TYPE is an array
957 access type (this is encoded by the compiler as a typedef to
958 a fat pointer - hence the check against TYPE_CODE_TYPEDEF). */
959 if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
960 {
961 fprintf_filtered (stream, "(");
962 type_print (type, "", stream, -1);
963 fprintf_filtered (stream, ") ");
964 }
14f9c5c9
AS
965 }
966 else if (ada_is_bogus_array_descriptor (type))
967 {
968 fprintf_filtered (stream, "(");
969 type_print (type, "", stream, -1);
970 fprintf_filtered (stream, ") (...?)");
971 return 0;
972 }
4c4b4cd2 973
79a45b7d
TT
974 opts = *options;
975 opts.deref_ref = 1;
0fd88904 976 return (val_print (type, value_contents (val), 0, address,
0e03807e 977 stream, 0, val, &opts, current_language));
14f9c5c9 978}
d2e4a39e 979
14f9c5c9 980static void
fc1a4b47 981print_record (struct type *type, const gdb_byte *valaddr,
79a45b7d 982 struct ui_file *stream, int recurse,
0e03807e 983 const struct value *val,
79a45b7d 984 const struct value_print_options *options)
14f9c5c9 985{
61ee279c 986 type = ada_check_typedef (type);
14f9c5c9
AS
987
988 fprintf_filtered (stream, "(");
989
0e03807e 990 if (print_field_values (type, valaddr, stream, recurse, val, options,
79a45b7d 991 0, type, valaddr) != 0 && options->pretty)
14f9c5c9
AS
992 {
993 fprintf_filtered (stream, "\n");
994 print_spaces_filtered (2 * recurse, stream);
995 }
996
997 fprintf_filtered (stream, ")");
998}
999
1000/* Print out fields of value at VALADDR having structure type TYPE.
4c4b4cd2 1001
79a45b7d 1002 TYPE, VALADDR, STREAM, RECURSE, and OPTIONS have the
4c4b4cd2 1003 same meanings as in ada_print_value and ada_val_print.
14f9c5c9
AS
1004
1005 OUTER_TYPE and OUTER_VALADDR give type and address of enclosing record
1006 (used to get discriminant values when printing variant parts).
1007
4c4b4cd2 1008 COMMA_NEEDED is 1 if fields have been printed at the current recursion
14f9c5c9 1009 level, so that a comma is needed before any field printed by this
4c4b4cd2 1010 call.
14f9c5c9 1011
4c4b4cd2 1012 Returns 1 if COMMA_NEEDED or any fields were printed. */
14f9c5c9
AS
1013
1014static int
fc1a4b47 1015print_field_values (struct type *type, const gdb_byte *valaddr,
79a45b7d 1016 struct ui_file *stream, int recurse,
0e03807e 1017 const struct value *val,
79a45b7d
TT
1018 const struct value_print_options *options,
1019 int comma_needed,
fc1a4b47 1020 struct type *outer_type, const gdb_byte *outer_valaddr)
14f9c5c9
AS
1021{
1022 int i, len;
1023
1024 len = TYPE_NFIELDS (type);
1025
1026 for (i = 0; i < len; i += 1)
1027 {
1028 if (ada_is_ignored_field (type, i))
d2e4a39e 1029 continue;
14f9c5c9
AS
1030
1031 if (ada_is_wrapper_field (type, i))
1032 {
d2e4a39e 1033 comma_needed =
14f9c5c9 1034 print_field_values (TYPE_FIELD_TYPE (type, i),
d2e4a39e 1035 valaddr
14f9c5c9 1036 + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT,
0e03807e 1037 stream, recurse, val, options,
14f9c5c9
AS
1038 comma_needed, type, valaddr);
1039 continue;
1040 }
1041 else if (ada_is_variant_part (type, i))
1042 {
1043 comma_needed =
1044 print_variant_part (type, i, valaddr,
0e03807e 1045 stream, recurse, val, options, comma_needed,
14f9c5c9
AS
1046 outer_type, outer_valaddr);
1047 continue;
1048 }
1049
1050 if (comma_needed)
1051 fprintf_filtered (stream, ", ");
1052 comma_needed = 1;
1053
79a45b7d 1054 if (options->pretty)
14f9c5c9
AS
1055 {
1056 fprintf_filtered (stream, "\n");
1057 print_spaces_filtered (2 + 2 * recurse, stream);
1058 }
d2e4a39e 1059 else
14f9c5c9
AS
1060 {
1061 wrap_here (n_spaces (2 + 2 * recurse));
1062 }
79a45b7d 1063 if (options->inspect_it)
14f9c5c9
AS
1064 {
1065 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR)
1066 fputs_filtered ("\"( ptr \"", stream);
1067 else
1068 fputs_filtered ("\"( nodef \"", stream);
1069 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1070 language_cplus, DMGL_NO_OPTS);
1071 fputs_filtered ("\" \"", stream);
1072 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
1073 language_cplus, DMGL_NO_OPTS);
1074 fputs_filtered ("\") \"", stream);
1075 }
1076 else
1077 {
1078 annotate_field_begin (TYPE_FIELD_TYPE (type, i));
d2e4a39e 1079 fprintf_filtered (stream, "%.*s",
14f9c5c9
AS
1080 ada_name_prefix_len (TYPE_FIELD_NAME (type, i)),
1081 TYPE_FIELD_NAME (type, i));
1082 annotate_field_name_end ();
1083 fputs_filtered (" => ", stream);
1084 annotate_field_value ();
1085 }
1086
1087 if (TYPE_FIELD_PACKED (type, i))
1088 {
d2e4a39e 1089 struct value *v;
14f9c5c9
AS
1090
1091 /* Bitfields require special handling, especially due to byte
1092 order problems. */
b4ba55a1 1093 if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i))
14f9c5c9 1094 {
edefbb7c 1095 fputs_filtered (_("<optimized out or zero length>"), stream);
14f9c5c9
AS
1096 }
1097 else
1098 {
1099 int bit_pos = TYPE_FIELD_BITPOS (type, i);
1100 int bit_size = TYPE_FIELD_BITSIZE (type, i);
79a45b7d 1101 struct value_print_options opts;
d2e4a39e 1102
14f9c5c9
AS
1103 adjust_type_signedness (TYPE_FIELD_TYPE (type, i));
1104 v = ada_value_primitive_packed_val (NULL, valaddr,
1105 bit_pos / HOST_CHAR_BIT,
1106 bit_pos % HOST_CHAR_BIT,
d2e4a39e 1107 bit_size,
14f9c5c9 1108 TYPE_FIELD_TYPE (type, i));
79a45b7d
TT
1109 opts = *options;
1110 opts.deref_ref = 0;
0fd88904 1111 val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), 0, 0,
0e03807e
TT
1112 stream, recurse + 1, v,
1113 &opts, current_language);
14f9c5c9
AS
1114 }
1115 }
1116 else
79a45b7d
TT
1117 {
1118 struct value_print_options opts = *options;
5b4ee69b 1119
79a45b7d
TT
1120 opts.deref_ref = 0;
1121 ada_val_print (TYPE_FIELD_TYPE (type, i),
1122 valaddr + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT,
0e03807e 1123 0, 0, stream, recurse + 1, val, &opts);
79a45b7d 1124 }
14f9c5c9
AS
1125 annotate_field_end ();
1126 }
1127
1128 return comma_needed;
1129}
This page took 0.636208 seconds and 4 git commands to generate.