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