1 /* Support for printing Ada values for GDB, the GNU debugger. 2 3 Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993, 1994, 1997, 2001, 2002, 4 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 5 Free Software Foundation, Inc. 6 7 This file is part of GDB. 8 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. 13 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. 18 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/>. */ 21 22 #include "defs.h" 23 #include <ctype.h> 24 #include "gdb_string.h" 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" 35 #include "infcall.h" 36 #include "exceptions.h" 37 #include "objfiles.h" 38 39 static void print_record (struct type *, const gdb_byte *, struct ui_file *, 40 int, 41 const struct value *, 42 const struct value_print_options *); 43 44 static int print_field_values (struct type *, const gdb_byte *, 45 struct ui_file *, int, 46 const struct value *, 47 const struct value_print_options *, 48 int, struct type *, 49 const gdb_byte *); 50 51 static void adjust_type_signedness (struct type *); 52 53 static int 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 *); 57 58 59 /* Make TYPE unsigned if its range of values includes no negatives. */ 60 static void 61 adjust_type_signedness (struct type *type) 62 { 63 if (type != NULL && TYPE_CODE (type) == TYPE_CODE_RANGE 64 && TYPE_LOW_BOUND (type) >= 0) 65 TYPE_UNSIGNED (type) = 1; 66 } 67 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. */ 72 73 static int 74 print_optional_low_bound (struct ui_file *stream, struct type *type, 75 const struct value_print_options *options) 76 { 77 struct type *index_type; 78 LONGEST low_bound; 79 LONGEST high_bound; 80 81 if (options->print_array_indexes) 82 return 0; 83 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) 91 return 0; 92 93 index_type = TYPE_INDEX_TYPE (type); 94 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 105 switch (TYPE_CODE (index_type)) 106 { 107 case TYPE_CODE_BOOL: 108 if (low_bound == 0) 109 return 0; 110 break; 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: 116 index_type = NULL; 117 /* FALL THROUGH */ 118 default: 119 if (low_bound == 1) 120 return 0; 121 break; 122 } 123 124 ada_print_scalar (index_type, low_bound, stream); 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 131 BITOFFSET from VALADDR on STREAM. Formats according to OPTIONS and 132 separates with commas. RECURSE is the recursion (nesting) level. 133 TYPE must have been decoded (as by ada_coerce_to_simple_array). */ 134 135 static void 136 val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, 137 int bitoffset, struct ui_file *stream, 138 int recurse, 139 const struct value *val, 140 const struct value_print_options *options) 141 { 142 unsigned int i; 143 unsigned int things_printed = 0; 144 unsigned len; 145 struct type *elttype, *index_type; 146 unsigned eltlen; 147 unsigned long bitsize = TYPE_FIELD_BITSIZE (type, 0); 148 struct value *mark = value_mark (); 149 LONGEST low = 0; 150 151 elttype = TYPE_TARGET_TYPE (type); 152 eltlen = TYPE_LENGTH (check_typedef (elttype)); 153 index_type = TYPE_INDEX_TYPE (type); 154 155 { 156 LONGEST high; 157 158 if (get_discrete_bounds (index_type, &low, &high) < 0) 159 len = 1; 160 else 161 len = high - low + 1; 162 } 163 164 i = 0; 165 annotate_array_section_begin (i, elttype); 166 167 while (i < len && things_printed < options->print_max) 168 { 169 struct value *v0, *v1; 170 int i0; 171 172 if (i != 0) 173 { 174 if (options->prettyprint_arrays) 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)); 185 maybe_print_array_index (index_type, i + low, stream, options); 186 187 i0 = i; 188 v0 = ada_value_primitive_packed_val (NULL, valaddr, 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; 197 v1 = ada_value_primitive_packed_val (NULL, valaddr, 198 (i * bitsize) / HOST_CHAR_BIT, 199 (i * bitsize) % HOST_CHAR_BIT, 200 bitsize, elttype); 201 if (memcmp (value_contents (v0), value_contents (v1), eltlen) != 0) 202 break; 203 } 204 205 if (i - i0 > options->repeat_count_threshold) 206 { 207 struct value_print_options opts = *options; 208 209 opts.deref_ref = 0; 210 val_print (elttype, value_contents (v0), 0, 0, stream, 211 recurse + 1, val, &opts, current_language); 212 annotate_elt_rep (i - i0); 213 fprintf_filtered (stream, _(" <repeats %u times>"), i - i0); 214 annotate_elt_rep_end (); 215 216 } 217 else 218 { 219 int j; 220 struct value_print_options opts = *options; 221 222 opts.deref_ref = 0; 223 for (j = i0; j < i; j += 1) 224 { 225 if (j > i0) 226 { 227 if (options->prettyprint_arrays) 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)); 237 maybe_print_array_index (index_type, j + low, 238 stream, options); 239 } 240 val_print (elttype, value_contents (v0), 0, 0, stream, 241 recurse + 1, val, &opts, current_language); 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 256 static struct type * 257 printable_val_type (struct type *type, const gdb_byte *valaddr) 258 { 259 return ada_to_fixed_type (ada_aligned_type (type), valaddr, 0, NULL, 1); 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 264 (1 or 2) of the character. */ 265 266 void 267 ada_emit_char (int c, struct type *type, struct ui_file *stream, 268 int quoter, int type_len) 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 == '"') 278 fprintf_filtered (stream, "\"\""); 279 else 280 fprintf_filtered (stream, "%c", c); 281 } 282 else 283 fprintf_filtered (stream, "[\"%0*x\"]", type_len * 2, c); 284 } 285 286 /* Character #I of STRING, given that TYPE_LEN is the size in bytes (1 287 or 2) of a character. */ 288 289 static int 290 char_at (const gdb_byte *string, int i, int type_len, 291 enum bfd_endian byte_order) 292 { 293 if (type_len == 1) 294 return string[i]; 295 else 296 return (int) extract_unsigned_integer (string + 2 * i, 2, byte_order); 297 } 298 299 /* Wrapper around memcpy to make it legal argument to ui_file_put */ 300 static void 301 ui_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. */ 311 static void 312 ada_print_floating (const gdb_byte *valaddr, struct type *type, 313 struct ui_file *stream) 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. */ 329 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) 336 strcpy (s, "Inf"); 337 338 if (s == NULL) 339 { 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 } 351 } 352 353 if (s == NULL && strchr (result, '.') == NULL) 354 { 355 s = strchr (result, 'e'); 356 if (s == NULL) 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 365 void 366 ada_printchar (int c, struct type *type, struct ui_file *stream) 367 { 368 fputs_filtered ("'", stream); 369 ada_emit_char (c, type, stream, '\'', 1); 370 fputs_filtered ("'", stream); 371 } 372 373 /* [From print_type_scalar in typeprint.c]. Print VAL on STREAM in a 374 form appropriate for TYPE, if non-NULL. If TYPE is NULL, print VAL 375 like a default signed integer. */ 376 377 void 378 ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream) 379 { 380 unsigned int i; 381 unsigned len; 382 383 if (!type) 384 { 385 print_longest (stream, 'd', 0, val); 386 return; 387 } 388 389 type = ada_check_typedef (type); 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: 418 LA_PRINT_CHAR ((unsigned char) val, type, stream); 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: 440 case TYPE_CODE_MEMBERPTR: 441 case TYPE_CODE_METHODPTR: 442 case TYPE_CODE_METHOD: 443 case TYPE_CODE_REF: 444 warning (_("internal error: unhandled type in ada_print_scalar")); 445 break; 446 447 default: 448 error (_("Invalid type code in symbol table.")); 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 457 FORCE_ELLIPSES. TYPE_LEN is the length (1 or 2) of the character type. 458 */ 459 460 static void 461 printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string, 462 unsigned int length, int force_ellipses, int type_len, 463 const struct value_print_options *options) 464 { 465 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (elttype)); 466 unsigned int i; 467 unsigned int things_printed = 0; 468 int in_quotes = 0; 469 int need_comma = 0; 470 471 if (length == 0) 472 { 473 fputs_filtered ("\"\"", stream); 474 return; 475 } 476 477 for (i = 0; i < length && things_printed < options->print_max; i += 1) 478 { 479 /* Position of the character we are examining 480 to see whether it is repeated. */ 481 unsigned int rep1; 482 /* Number of repetitions we have detected so far. */ 483 unsigned int reps; 484 485 QUIT; 486 487 if (need_comma) 488 { 489 fputs_filtered (", ", stream); 490 need_comma = 0; 491 } 492 493 rep1 = i + 1; 494 reps = 1; 495 while (rep1 < length 496 && char_at (string, rep1, type_len, byte_order) 497 == char_at (string, i, type_len, byte_order)) 498 { 499 rep1 += 1; 500 reps += 1; 501 } 502 503 if (reps > options->repeat_count_threshold) 504 { 505 if (in_quotes) 506 { 507 if (options->inspect_it) 508 fputs_filtered ("\\\", ", stream); 509 else 510 fputs_filtered ("\", ", stream); 511 in_quotes = 0; 512 } 513 fputs_filtered ("'", stream); 514 ada_emit_char (char_at (string, i, type_len, byte_order), 515 elttype, stream, '\'', type_len); 516 fputs_filtered ("'", stream); 517 fprintf_filtered (stream, _(" <repeats %u times>"), reps); 518 i = rep1 - 1; 519 things_printed += options->repeat_count_threshold; 520 need_comma = 1; 521 } 522 else 523 { 524 if (!in_quotes) 525 { 526 if (options->inspect_it) 527 fputs_filtered ("\\\"", stream); 528 else 529 fputs_filtered ("\"", stream); 530 in_quotes = 1; 531 } 532 ada_emit_char (char_at (string, i, type_len, byte_order), 533 elttype, stream, '"', type_len); 534 things_printed += 1; 535 } 536 } 537 538 /* Terminate the quotes if necessary. */ 539 if (in_quotes) 540 { 541 if (options->inspect_it) 542 fputs_filtered ("\\\"", stream); 543 else 544 fputs_filtered ("\"", stream); 545 } 546 547 if (force_ellipses || i < length) 548 fputs_filtered ("...", stream); 549 } 550 551 void 552 ada_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string, 553 unsigned int length, const char *encoding, int force_ellipses, 554 const struct value_print_options *options) 555 { 556 printstr (stream, type, string, length, force_ellipses, TYPE_LENGTH (type), 557 options); 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 563 OPTIONS. The data at VALADDR is in target byte order. 564 565 If the data is printed as a string, returns the number of string characters 566 printed. 567 568 RECURSE indicates the amount of indentation to supply before 569 continuation lines; this amount is roughly twice the value of RECURSE. */ 570 571 int 572 ada_val_print (struct type *type, const gdb_byte *valaddr0, 573 int embedded_offset, CORE_ADDR address, 574 struct ui_file *stream, int recurse, 575 const struct value *val, 576 const struct value_print_options *options) 577 { 578 volatile struct gdb_exception except; 579 int result = 0; 580 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 } 586 587 if (except.reason < 0) 588 result = 0; 589 590 return result; 591 } 592 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 598 static int 599 ada_val_print_array (struct type *type, const gdb_byte *valaddr, 600 CORE_ADDR address, struct ui_file *stream, int recurse, 601 const struct value *val, 602 const struct value_print_options *options) 603 { 604 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type)); 605 struct type *elttype = TYPE_TARGET_TYPE (type); 606 unsigned int eltlen; 607 unsigned int len; 608 int result = 0; 609 610 if (elttype == NULL) 611 eltlen = 0; 612 else 613 eltlen = TYPE_LENGTH (elttype); 614 if (eltlen == 0) 615 len = 0; 616 else 617 len = TYPE_LENGTH (type) / eltlen; 618 619 /* For an array of chars, print with string syntax. */ 620 if (ada_is_string_type (type) 621 && (options->format == 0 || options->format == 's')) 622 { 623 if (options->prettyprint_arrays) 624 print_spaces_filtered (2 + 2 * recurse, stream); 625 626 /* If requested, look for the first null char and only print 627 elements up to it. */ 628 if (options->stop_print_at_null) 629 { 630 int temp_len; 631 632 /* Look for a NULL char. */ 633 for (temp_len = 0; 634 (temp_len < len 635 && temp_len < options->print_max 636 && char_at (valaddr, temp_len, eltlen, byte_order) != 0); 637 temp_len += 1); 638 len = temp_len; 639 } 640 641 printstr (stream, elttype, valaddr, len, 0, eltlen, options); 642 result = len; 643 } 644 else 645 { 646 fprintf_filtered (stream, "("); 647 print_optional_low_bound (stream, type, options); 648 if (TYPE_FIELD_BITSIZE (type, 0) > 0) 649 val_print_packed_array_elements (type, valaddr, 0, stream, 650 recurse, val, options); 651 else 652 val_print_array_elements (type, valaddr, address, stream, 653 recurse, val, options, 0); 654 fprintf_filtered (stream, ")"); 655 } 656 657 return result; 658 } 659 660 /* See the comment on ada_val_print. This function differs in that it 661 does not catch evaluation errors (leaving that to ada_val_print). */ 662 663 static int 664 ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, 665 int embedded_offset, CORE_ADDR address, 666 struct ui_file *stream, int recurse, 667 const struct value *original_value, 668 const struct value_print_options *options) 669 { 670 unsigned int len; 671 int i; 672 struct type *elttype; 673 LONGEST val; 674 const gdb_byte *valaddr = valaddr0 + embedded_offset; 675 676 type = ada_check_typedef (type); 677 678 if (ada_is_array_descriptor_type (type) 679 || ada_is_constrained_packed_array_type (type)) 680 { 681 int retn; 682 struct value *mark = value_mark (); 683 struct value *val; 684 685 val = value_from_contents_and_address (type, valaddr, address); 686 val = ada_coerce_to_simple_array_ptr (val); 687 if (val == NULL) 688 { 689 fprintf_filtered (stream, "(null)"); 690 retn = 0; 691 } 692 else 693 retn = ada_val_print_1 (value_type (val), value_contents (val), 0, 694 value_address (val), stream, recurse, 695 NULL, options); 696 value_free_to_mark (mark); 697 return retn; 698 } 699 700 valaddr = ada_aligned_value_addr (type, valaddr); 701 embedded_offset -= valaddr - valaddr0 - embedded_offset; 702 type = printable_val_type (type, valaddr); 703 704 switch (TYPE_CODE (type)) 705 { 706 default: 707 return c_val_print (type, valaddr0, embedded_offset, address, stream, 708 recurse, original_value, options); 709 710 case TYPE_CODE_PTR: 711 { 712 int ret = c_val_print (type, valaddr0, embedded_offset, address, 713 stream, recurse, original_value, options); 714 715 if (ada_is_tag_type (type)) 716 { 717 struct value *val = 718 value_from_contents_and_address (type, valaddr, address); 719 const char *name = ada_tag_name (val); 720 721 if (name != NULL) 722 fprintf_filtered (stream, " (%s)", name); 723 return 0; 724 } 725 return ret; 726 } 727 728 case TYPE_CODE_INT: 729 case TYPE_CODE_RANGE: 730 if (ada_is_fixed_point_type (type)) 731 { 732 LONGEST v = unpack_long (type, valaddr); 733 int len = TYPE_LENGTH (type); 734 735 fprintf_filtered (stream, len < 4 ? "%.11g" : "%.17g", 736 (double) ada_fixed_to_float (type, v)); 737 return 0; 738 } 739 else if (TYPE_CODE (type) == TYPE_CODE_RANGE) 740 { 741 struct type *target_type = TYPE_TARGET_TYPE (type); 742 743 if (TYPE_LENGTH (type) != TYPE_LENGTH (target_type)) 744 { 745 /* Obscure case of range type that has different length from 746 its base type. Perform a conversion, or we will get a 747 nonsense value. Actually, we could use the same 748 code regardless of lengths; I'm just avoiding a cast. */ 749 struct value *v = value_cast (target_type, 750 value_from_contents_and_address 751 (type, valaddr, 0)); 752 753 return ada_val_print_1 (target_type, value_contents (v), 0, 0, 754 stream, recurse + 1, NULL, options); 755 } 756 else 757 return ada_val_print_1 (TYPE_TARGET_TYPE (type), 758 valaddr0, embedded_offset, 759 address, stream, recurse, original_value, options); 760 } 761 else 762 { 763 int format = (options->format ? options->format 764 : options->output_format); 765 766 if (format) 767 { 768 struct value_print_options opts = *options; 769 770 opts.format = format; 771 print_scalar_formatted (valaddr, type, &opts, 0, stream); 772 } 773 else if (ada_is_system_address_type (type)) 774 { 775 /* FIXME: We want to print System.Address variables using 776 the same format as for any access type. But for some 777 reason GNAT encodes the System.Address type as an int, 778 so we have to work-around this deficiency by handling 779 System.Address values as a special case. */ 780 781 struct gdbarch *gdbarch = get_type_arch (type); 782 struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; 783 CORE_ADDR addr = extract_typed_address (valaddr, ptr_type); 784 785 fprintf_filtered (stream, "("); 786 type_print (type, "", stream, -1); 787 fprintf_filtered (stream, ") "); 788 fputs_filtered (paddress (gdbarch, addr), stream); 789 } 790 else 791 { 792 val_print_type_code_int (type, valaddr, stream); 793 if (ada_is_character_type (type)) 794 { 795 fputs_filtered (" ", stream); 796 ada_printchar ((unsigned char) unpack_long (type, valaddr), 797 type, stream); 798 } 799 } 800 return 0; 801 } 802 803 case TYPE_CODE_ENUM: 804 if (options->format) 805 { 806 print_scalar_formatted (valaddr, type, options, 0, stream); 807 break; 808 } 809 len = TYPE_NFIELDS (type); 810 val = unpack_long (type, valaddr); 811 for (i = 0; i < len; i++) 812 { 813 QUIT; 814 if (val == TYPE_FIELD_BITPOS (type, i)) 815 { 816 break; 817 } 818 } 819 if (i < len) 820 { 821 const char *name = ada_enum_name (TYPE_FIELD_NAME (type, i)); 822 823 if (name[0] == '\'') 824 fprintf_filtered (stream, "%ld %s", (long) val, name); 825 else 826 fputs_filtered (name, stream); 827 } 828 else 829 { 830 print_longest (stream, 'd', 0, val); 831 } 832 break; 833 834 case TYPE_CODE_FLAGS: 835 if (options->format) 836 print_scalar_formatted (valaddr, type, options, 0, stream); 837 else 838 val_print_type_code_flags (type, valaddr, stream); 839 break; 840 841 case TYPE_CODE_FLT: 842 if (options->format) 843 return c_val_print (type, valaddr0, embedded_offset, address, stream, 844 recurse, original_value, options); 845 else 846 ada_print_floating (valaddr0 + embedded_offset, type, stream); 847 break; 848 849 case TYPE_CODE_UNION: 850 case TYPE_CODE_STRUCT: 851 if (ada_is_bogus_array_descriptor (type)) 852 { 853 fprintf_filtered (stream, "(...?)"); 854 return 0; 855 } 856 else 857 { 858 print_record (type, valaddr, stream, recurse, original_value, 859 options); 860 return 0; 861 } 862 863 case TYPE_CODE_ARRAY: 864 return ada_val_print_array (type, valaddr, address, stream, 865 recurse, original_value, options); 866 867 case TYPE_CODE_REF: 868 /* For references, the debugger is expected to print the value as 869 an address if DEREF_REF is null. But printing an address in place 870 of the object value would be confusing to an Ada programmer. 871 So, for Ada values, we print the actual dereferenced value 872 regardless. */ 873 elttype = check_typedef (TYPE_TARGET_TYPE (type)); 874 875 if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF) 876 { 877 LONGEST deref_val_int = (LONGEST) unpack_pointer (type, valaddr); 878 879 if (deref_val_int != 0) 880 { 881 struct value *deref_val = 882 ada_value_ind (value_from_longest 883 (lookup_pointer_type (elttype), 884 deref_val_int)); 885 886 val_print (value_type (deref_val), 887 value_contents (deref_val), 0, 888 value_address (deref_val), stream, recurse + 1, 889 original_value, options, current_language); 890 } 891 else 892 fputs_filtered ("(null)", stream); 893 } 894 else 895 fputs_filtered ("???", stream); 896 897 break; 898 } 899 gdb_flush (stream); 900 return 0; 901 } 902 903 static int 904 print_variant_part (struct type *type, int field_num, const gdb_byte *valaddr, 905 struct ui_file *stream, int recurse, 906 const struct value *val, 907 const struct value_print_options *options, int comma_needed, 908 struct type *outer_type, const gdb_byte *outer_valaddr) 909 { 910 struct type *var_type = TYPE_FIELD_TYPE (type, field_num); 911 int which = ada_which_variant_applies (var_type, outer_type, outer_valaddr); 912 913 if (which < 0) 914 return 0; 915 else 916 return print_field_values 917 (TYPE_FIELD_TYPE (var_type, which), 918 valaddr + TYPE_FIELD_BITPOS (type, field_num) / HOST_CHAR_BIT 919 + TYPE_FIELD_BITPOS (var_type, which) / HOST_CHAR_BIT, 920 stream, recurse, val, options, 921 comma_needed, outer_type, outer_valaddr); 922 } 923 924 int 925 ada_value_print (struct value *val0, struct ui_file *stream, 926 const struct value_print_options *options) 927 { 928 struct value *val = ada_to_fixed_value (val0); 929 CORE_ADDR address = value_address (val); 930 struct type *type = value_type (val); 931 struct value_print_options opts; 932 933 /* If it is a pointer, indicate what it points to. */ 934 if (TYPE_CODE (type) == TYPE_CODE_PTR) 935 { 936 /* Hack: don't print (char *) for char strings. Their 937 type is indicated by the quoted string anyway. */ 938 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) != sizeof (char) 939 || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_INT 940 || TYPE_UNSIGNED (TYPE_TARGET_TYPE (type))) 941 { 942 fprintf_filtered (stream, "("); 943 type_print (type, "", stream, -1); 944 fprintf_filtered (stream, ") "); 945 } 946 } 947 else if (ada_is_array_descriptor_type (type)) 948 { 949 fprintf_filtered (stream, "("); 950 type_print (type, "", stream, -1); 951 fprintf_filtered (stream, ") "); 952 } 953 else if (ada_is_bogus_array_descriptor (type)) 954 { 955 fprintf_filtered (stream, "("); 956 type_print (type, "", stream, -1); 957 fprintf_filtered (stream, ") (...?)"); 958 return 0; 959 } 960 961 opts = *options; 962 opts.deref_ref = 1; 963 return (val_print (type, value_contents (val), 0, address, 964 stream, 0, val, &opts, current_language)); 965 } 966 967 static void 968 print_record (struct type *type, const gdb_byte *valaddr, 969 struct ui_file *stream, int recurse, 970 const struct value *val, 971 const struct value_print_options *options) 972 { 973 type = ada_check_typedef (type); 974 975 fprintf_filtered (stream, "("); 976 977 if (print_field_values (type, valaddr, stream, recurse, val, options, 978 0, type, valaddr) != 0 && options->pretty) 979 { 980 fprintf_filtered (stream, "\n"); 981 print_spaces_filtered (2 * recurse, stream); 982 } 983 984 fprintf_filtered (stream, ")"); 985 } 986 987 /* Print out fields of value at VALADDR having structure type TYPE. 988 989 TYPE, VALADDR, STREAM, RECURSE, and OPTIONS have the 990 same meanings as in ada_print_value and ada_val_print. 991 992 OUTER_TYPE and OUTER_VALADDR give type and address of enclosing record 993 (used to get discriminant values when printing variant parts). 994 995 COMMA_NEEDED is 1 if fields have been printed at the current recursion 996 level, so that a comma is needed before any field printed by this 997 call. 998 999 Returns 1 if COMMA_NEEDED or any fields were printed. */ 1000 1001 static int 1002 print_field_values (struct type *type, const gdb_byte *valaddr, 1003 struct ui_file *stream, int recurse, 1004 const struct value *val, 1005 const struct value_print_options *options, 1006 int comma_needed, 1007 struct type *outer_type, const gdb_byte *outer_valaddr) 1008 { 1009 int i, len; 1010 1011 len = TYPE_NFIELDS (type); 1012 1013 for (i = 0; i < len; i += 1) 1014 { 1015 if (ada_is_ignored_field (type, i)) 1016 continue; 1017 1018 if (ada_is_wrapper_field (type, i)) 1019 { 1020 comma_needed = 1021 print_field_values (TYPE_FIELD_TYPE (type, i), 1022 valaddr 1023 + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT, 1024 stream, recurse, val, options, 1025 comma_needed, type, valaddr); 1026 continue; 1027 } 1028 else if (ada_is_variant_part (type, i)) 1029 { 1030 comma_needed = 1031 print_variant_part (type, i, valaddr, 1032 stream, recurse, val, options, comma_needed, 1033 outer_type, outer_valaddr); 1034 continue; 1035 } 1036 1037 if (comma_needed) 1038 fprintf_filtered (stream, ", "); 1039 comma_needed = 1; 1040 1041 if (options->pretty) 1042 { 1043 fprintf_filtered (stream, "\n"); 1044 print_spaces_filtered (2 + 2 * recurse, stream); 1045 } 1046 else 1047 { 1048 wrap_here (n_spaces (2 + 2 * recurse)); 1049 } 1050 if (options->inspect_it) 1051 { 1052 if (TYPE_CODE (TYPE_FIELD_TYPE (type, i)) == TYPE_CODE_PTR) 1053 fputs_filtered ("\"( ptr \"", stream); 1054 else 1055 fputs_filtered ("\"( nodef \"", stream); 1056 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i), 1057 language_cplus, DMGL_NO_OPTS); 1058 fputs_filtered ("\" \"", stream); 1059 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i), 1060 language_cplus, DMGL_NO_OPTS); 1061 fputs_filtered ("\") \"", stream); 1062 } 1063 else 1064 { 1065 annotate_field_begin (TYPE_FIELD_TYPE (type, i)); 1066 fprintf_filtered (stream, "%.*s", 1067 ada_name_prefix_len (TYPE_FIELD_NAME (type, i)), 1068 TYPE_FIELD_NAME (type, i)); 1069 annotate_field_name_end (); 1070 fputs_filtered (" => ", stream); 1071 annotate_field_value (); 1072 } 1073 1074 if (TYPE_FIELD_PACKED (type, i)) 1075 { 1076 struct value *v; 1077 1078 /* Bitfields require special handling, especially due to byte 1079 order problems. */ 1080 if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i)) 1081 { 1082 fputs_filtered (_("<optimized out or zero length>"), stream); 1083 } 1084 else 1085 { 1086 int bit_pos = TYPE_FIELD_BITPOS (type, i); 1087 int bit_size = TYPE_FIELD_BITSIZE (type, i); 1088 struct value_print_options opts; 1089 1090 adjust_type_signedness (TYPE_FIELD_TYPE (type, i)); 1091 v = ada_value_primitive_packed_val (NULL, valaddr, 1092 bit_pos / HOST_CHAR_BIT, 1093 bit_pos % HOST_CHAR_BIT, 1094 bit_size, 1095 TYPE_FIELD_TYPE (type, i)); 1096 opts = *options; 1097 opts.deref_ref = 0; 1098 val_print (TYPE_FIELD_TYPE (type, i), value_contents (v), 0, 0, 1099 stream, recurse + 1, v, 1100 &opts, current_language); 1101 } 1102 } 1103 else 1104 { 1105 struct value_print_options opts = *options; 1106 1107 opts.deref_ref = 0; 1108 ada_val_print (TYPE_FIELD_TYPE (type, i), 1109 valaddr + TYPE_FIELD_BITPOS (type, i) / HOST_CHAR_BIT, 1110 0, 0, stream, recurse + 1, val, &opts); 1111 } 1112 annotate_field_end (); 1113 } 1114 1115 return comma_needed; 1116 } 1117