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