1 /* Target description support for GDB. 2 3 Copyright (C) 2006-2015 Free Software Foundation, Inc. 4 5 Contributed by CodeSourcery. 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 "arch-utils.h" 24 #include "gdbcmd.h" 25 #include "gdbtypes.h" 26 #include "reggroups.h" 27 #include "target.h" 28 #include "target-descriptions.h" 29 #include "vec.h" 30 #include "xml-support.h" 31 #include "xml-tdesc.h" 32 #include "osabi.h" 33 34 #include "gdb_obstack.h" 35 #include "hashtab.h" 36 #include "inferior.h" 37 38 /* Types. */ 39 40 typedef struct property 41 { 42 char *key; 43 char *value; 44 } property_s; 45 DEF_VEC_O(property_s); 46 47 /* An individual register from a target description. */ 48 49 typedef struct tdesc_reg 50 { 51 /* The name of this register. In standard features, it may be 52 recognized by the architecture support code, or it may be purely 53 for the user. */ 54 char *name; 55 56 /* The register number used by this target to refer to this 57 register. This is used for remote p/P packets and to determine 58 the ordering of registers in the remote g/G packets. */ 59 long target_regnum; 60 61 /* If this flag is set, GDB should save and restore this register 62 around calls to an inferior function. */ 63 int save_restore; 64 65 /* The name of the register group containing this register, or NULL 66 if the group should be automatically determined from the 67 register's type. If this is "general", "float", or "vector", the 68 corresponding "info" command should display this register's 69 value. It can be an arbitrary string, but should be limited to 70 alphanumeric characters and internal hyphens. Currently other 71 strings are ignored (treated as NULL). */ 72 char *group; 73 74 /* The size of the register, in bits. */ 75 int bitsize; 76 77 /* The type of the register. This string corresponds to either 78 a named type from the target description or a predefined 79 type from GDB. */ 80 char *type; 81 82 /* The target-described type corresponding to TYPE, if found. */ 83 struct tdesc_type *tdesc_type; 84 } *tdesc_reg_p; 85 DEF_VEC_P(tdesc_reg_p); 86 87 /* A named type from a target description. */ 88 89 typedef struct tdesc_type_field 90 { 91 char *name; 92 struct tdesc_type *type; 93 int start, end; 94 } tdesc_type_field; 95 DEF_VEC_O(tdesc_type_field); 96 97 typedef struct tdesc_type_flag 98 { 99 char *name; 100 int start; 101 } tdesc_type_flag; 102 DEF_VEC_O(tdesc_type_flag); 103 104 typedef struct tdesc_type 105 { 106 /* The name of this type. */ 107 char *name; 108 109 /* Identify the kind of this type. */ 110 enum 111 { 112 /* Predefined types. */ 113 TDESC_TYPE_INT8, 114 TDESC_TYPE_INT16, 115 TDESC_TYPE_INT32, 116 TDESC_TYPE_INT64, 117 TDESC_TYPE_INT128, 118 TDESC_TYPE_UINT8, 119 TDESC_TYPE_UINT16, 120 TDESC_TYPE_UINT32, 121 TDESC_TYPE_UINT64, 122 TDESC_TYPE_UINT128, 123 TDESC_TYPE_CODE_PTR, 124 TDESC_TYPE_DATA_PTR, 125 TDESC_TYPE_IEEE_SINGLE, 126 TDESC_TYPE_IEEE_DOUBLE, 127 TDESC_TYPE_ARM_FPA_EXT, 128 TDESC_TYPE_I387_EXT, 129 130 /* Types defined by a target feature. */ 131 TDESC_TYPE_VECTOR, 132 TDESC_TYPE_STRUCT, 133 TDESC_TYPE_UNION, 134 TDESC_TYPE_FLAGS 135 } kind; 136 137 /* Kind-specific data. */ 138 union 139 { 140 /* Vector type. */ 141 struct 142 { 143 struct tdesc_type *type; 144 int count; 145 } v; 146 147 /* Struct or union type. */ 148 struct 149 { 150 VEC(tdesc_type_field) *fields; 151 LONGEST size; 152 } u; 153 154 /* Flags type. */ 155 struct 156 { 157 VEC(tdesc_type_flag) *flags; 158 LONGEST size; 159 } f; 160 } u; 161 } *tdesc_type_p; 162 DEF_VEC_P(tdesc_type_p); 163 164 /* A feature from a target description. Each feature is a collection 165 of other elements, e.g. registers and types. */ 166 167 typedef struct tdesc_feature 168 { 169 /* The name of this feature. It may be recognized by the architecture 170 support code. */ 171 char *name; 172 173 /* The registers associated with this feature. */ 174 VEC(tdesc_reg_p) *registers; 175 176 /* The types associated with this feature. */ 177 VEC(tdesc_type_p) *types; 178 } *tdesc_feature_p; 179 DEF_VEC_P(tdesc_feature_p); 180 181 /* A compatible architecture from a target description. */ 182 typedef const struct bfd_arch_info *arch_p; 183 DEF_VEC_P(arch_p); 184 185 /* A target description. */ 186 187 struct target_desc 188 { 189 /* The architecture reported by the target, if any. */ 190 const struct bfd_arch_info *arch; 191 192 /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN 193 otherwise. */ 194 enum gdb_osabi osabi; 195 196 /* The list of compatible architectures reported by the target. */ 197 VEC(arch_p) *compatible; 198 199 /* Any architecture-specific properties specified by the target. */ 200 VEC(property_s) *properties; 201 202 /* The features associated with this target. */ 203 VEC(tdesc_feature_p) *features; 204 }; 205 206 /* Per-architecture data associated with a target description. The 207 target description may be shared by multiple architectures, but 208 this data is private to one gdbarch. */ 209 210 typedef struct tdesc_arch_reg 211 { 212 struct tdesc_reg *reg; 213 struct type *type; 214 } tdesc_arch_reg; 215 DEF_VEC_O(tdesc_arch_reg); 216 217 struct tdesc_arch_data 218 { 219 /* A list of register/type pairs, indexed by GDB's internal register number. 220 During initialization of the gdbarch this list is used to store 221 registers which the architecture assigns a fixed register number. 222 Registers which are NULL in this array, or off the end, are 223 treated as zero-sized and nameless (i.e. placeholders in the 224 numbering). */ 225 VEC(tdesc_arch_reg) *arch_regs; 226 227 /* Functions which report the register name, type, and reggroups for 228 pseudo-registers. */ 229 gdbarch_register_name_ftype *pseudo_register_name; 230 gdbarch_register_type_ftype *pseudo_register_type; 231 gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p; 232 }; 233 234 /* Info about an inferior's target description. There's one of these 235 for each inferior. */ 236 237 struct target_desc_info 238 { 239 /* A flag indicating that a description has already been fetched 240 from the target, so it should not be queried again. */ 241 242 int fetched; 243 244 /* The description fetched from the target, or NULL if the target 245 did not supply any description. Only valid when 246 target_desc_fetched is set. Only the description initialization 247 code should access this; normally, the description should be 248 accessed through the gdbarch object. */ 249 250 const struct target_desc *tdesc; 251 252 /* The filename to read a target description from, as set by "set 253 tdesc filename ..." */ 254 255 char *filename; 256 }; 257 258 /* Get the inferior INF's target description info, allocating one on 259 the stop if necessary. */ 260 261 static struct target_desc_info * 262 get_tdesc_info (struct inferior *inf) 263 { 264 if (inf->tdesc_info == NULL) 265 inf->tdesc_info = XCNEW (struct target_desc_info); 266 return inf->tdesc_info; 267 } 268 269 /* A handle for architecture-specific data associated with the 270 target description (see struct tdesc_arch_data). */ 271 272 static struct gdbarch_data *tdesc_data; 273 274 /* See target-descriptions.h. */ 275 276 int 277 target_desc_info_from_user_p (struct target_desc_info *info) 278 { 279 return info != NULL && info->filename != NULL; 280 } 281 282 /* See target-descriptions.h. */ 283 284 void 285 copy_inferior_target_desc_info (struct inferior *destinf, struct inferior *srcinf) 286 { 287 struct target_desc_info *src = get_tdesc_info (srcinf); 288 struct target_desc_info *dest = get_tdesc_info (destinf); 289 290 dest->fetched = src->fetched; 291 dest->tdesc = src->tdesc; 292 dest->filename = src->filename != NULL ? xstrdup (src->filename) : NULL; 293 } 294 295 /* See target-descriptions.h. */ 296 297 void 298 target_desc_info_free (struct target_desc_info *tdesc_info) 299 { 300 if (tdesc_info != NULL) 301 { 302 xfree (tdesc_info->filename); 303 xfree (tdesc_info); 304 } 305 } 306 307 /* Convenience helper macros. */ 308 309 #define target_desc_fetched \ 310 get_tdesc_info (current_inferior ())->fetched 311 #define current_target_desc \ 312 get_tdesc_info (current_inferior ())->tdesc 313 #define target_description_filename \ 314 get_tdesc_info (current_inferior ())->filename 315 316 /* The string manipulated by the "set tdesc filename ..." command. */ 317 318 static char *tdesc_filename_cmd_string; 319 320 /* Fetch the current target's description, and switch the current 321 architecture to one which incorporates that description. */ 322 323 void 324 target_find_description (void) 325 { 326 /* If we've already fetched a description from the target, don't do 327 it again. This allows a target to fetch the description early, 328 during its to_open or to_create_inferior, if it needs extra 329 information about the target to initialize. */ 330 if (target_desc_fetched) 331 return; 332 333 /* The current architecture should not have any target description 334 specified. It should have been cleared, e.g. when we 335 disconnected from the previous target. */ 336 gdb_assert (gdbarch_target_desc (target_gdbarch ()) == NULL); 337 338 /* First try to fetch an XML description from the user-specified 339 file. */ 340 current_target_desc = NULL; 341 if (target_description_filename != NULL 342 && *target_description_filename != '\0') 343 current_target_desc 344 = file_read_description_xml (target_description_filename); 345 346 /* Next try to read the description from the current target using 347 target objects. */ 348 if (current_target_desc == NULL) 349 current_target_desc = target_read_description_xml (¤t_target); 350 351 /* If that failed try a target-specific hook. */ 352 if (current_target_desc == NULL) 353 current_target_desc = target_read_description (¤t_target); 354 355 /* If a non-NULL description was returned, then update the current 356 architecture. */ 357 if (current_target_desc) 358 { 359 struct gdbarch_info info; 360 361 gdbarch_info_init (&info); 362 info.target_desc = current_target_desc; 363 if (!gdbarch_update_p (info)) 364 warning (_("Architecture rejected target-supplied description")); 365 else 366 { 367 struct tdesc_arch_data *data; 368 369 data = gdbarch_data (target_gdbarch (), tdesc_data); 370 if (tdesc_has_registers (current_target_desc) 371 && data->arch_regs == NULL) 372 warning (_("Target-supplied registers are not supported " 373 "by the current architecture")); 374 } 375 } 376 377 /* Now that we know this description is usable, record that we 378 fetched it. */ 379 target_desc_fetched = 1; 380 } 381 382 /* Discard any description fetched from the current target, and switch 383 the current architecture to one with no target description. */ 384 385 void 386 target_clear_description (void) 387 { 388 struct gdbarch_info info; 389 390 if (!target_desc_fetched) 391 return; 392 393 target_desc_fetched = 0; 394 current_target_desc = NULL; 395 396 gdbarch_info_init (&info); 397 if (!gdbarch_update_p (info)) 398 internal_error (__FILE__, __LINE__, 399 _("Could not remove target-supplied description")); 400 } 401 402 /* Return the global current target description. This should only be 403 used by gdbarch initialization code; most access should be through 404 an existing gdbarch. */ 405 406 const struct target_desc * 407 target_current_description (void) 408 { 409 if (target_desc_fetched) 410 return current_target_desc; 411 412 return NULL; 413 } 414 415 /* Return non-zero if this target description is compatible 416 with the given BFD architecture. */ 417 418 int 419 tdesc_compatible_p (const struct target_desc *target_desc, 420 const struct bfd_arch_info *arch) 421 { 422 const struct bfd_arch_info *compat; 423 int ix; 424 425 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat); 426 ix++) 427 { 428 if (compat == arch 429 || arch->compatible (arch, compat) 430 || compat->compatible (compat, arch)) 431 return 1; 432 } 433 434 return 0; 435 } 436 437 438 /* Direct accessors for target descriptions. */ 439 440 /* Return the string value of a property named KEY, or NULL if the 441 property was not specified. */ 442 443 const char * 444 tdesc_property (const struct target_desc *target_desc, const char *key) 445 { 446 struct property *prop; 447 int ix; 448 449 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop); 450 ix++) 451 if (strcmp (prop->key, key) == 0) 452 return prop->value; 453 454 return NULL; 455 } 456 457 /* Return the BFD architecture associated with this target 458 description, or NULL if no architecture was specified. */ 459 460 const struct bfd_arch_info * 461 tdesc_architecture (const struct target_desc *target_desc) 462 { 463 return target_desc->arch; 464 } 465 466 /* Return the OSABI associated with this target description, or 467 GDB_OSABI_UNKNOWN if no osabi was specified. */ 468 469 enum gdb_osabi 470 tdesc_osabi (const struct target_desc *target_desc) 471 { 472 return target_desc->osabi; 473 } 474 475 476 477 /* Return 1 if this target description includes any registers. */ 478 479 int 480 tdesc_has_registers (const struct target_desc *target_desc) 481 { 482 int ix; 483 struct tdesc_feature *feature; 484 485 if (target_desc == NULL) 486 return 0; 487 488 for (ix = 0; 489 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature); 490 ix++) 491 if (! VEC_empty (tdesc_reg_p, feature->registers)) 492 return 1; 493 494 return 0; 495 } 496 497 /* Return the feature with the given name, if present, or NULL if 498 the named feature is not found. */ 499 500 const struct tdesc_feature * 501 tdesc_find_feature (const struct target_desc *target_desc, 502 const char *name) 503 { 504 int ix; 505 struct tdesc_feature *feature; 506 507 for (ix = 0; 508 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature); 509 ix++) 510 if (strcmp (feature->name, name) == 0) 511 return feature; 512 513 return NULL; 514 } 515 516 /* Return the name of FEATURE. */ 517 518 const char * 519 tdesc_feature_name (const struct tdesc_feature *feature) 520 { 521 return feature->name; 522 } 523 524 /* Predefined types. */ 525 static struct tdesc_type tdesc_predefined_types[] = 526 { 527 { "int8", TDESC_TYPE_INT8 }, 528 { "int16", TDESC_TYPE_INT16 }, 529 { "int32", TDESC_TYPE_INT32 }, 530 { "int64", TDESC_TYPE_INT64 }, 531 { "int128", TDESC_TYPE_INT128 }, 532 { "uint8", TDESC_TYPE_UINT8 }, 533 { "uint16", TDESC_TYPE_UINT16 }, 534 { "uint32", TDESC_TYPE_UINT32 }, 535 { "uint64", TDESC_TYPE_UINT64 }, 536 { "uint128", TDESC_TYPE_UINT128 }, 537 { "code_ptr", TDESC_TYPE_CODE_PTR }, 538 { "data_ptr", TDESC_TYPE_DATA_PTR }, 539 { "ieee_single", TDESC_TYPE_IEEE_SINGLE }, 540 { "ieee_double", TDESC_TYPE_IEEE_DOUBLE }, 541 { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT }, 542 { "i387_ext", TDESC_TYPE_I387_EXT } 543 }; 544 545 /* Return the type associated with ID in the context of FEATURE, or 546 NULL if none. */ 547 548 struct tdesc_type * 549 tdesc_named_type (const struct tdesc_feature *feature, const char *id) 550 { 551 int ix; 552 struct tdesc_type *type; 553 554 /* First try target-defined types. */ 555 for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++) 556 if (strcmp (type->name, id) == 0) 557 return type; 558 559 /* Next try the predefined types. */ 560 for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++) 561 if (strcmp (tdesc_predefined_types[ix].name, id) == 0) 562 return &tdesc_predefined_types[ix]; 563 564 return NULL; 565 } 566 567 /* Lookup type associated with ID. */ 568 569 struct type * 570 tdesc_find_type (struct gdbarch *gdbarch, const char *id) 571 { 572 struct tdesc_arch_reg *reg; 573 struct tdesc_arch_data *data; 574 int i, num_regs; 575 576 data = gdbarch_data (gdbarch, tdesc_data); 577 num_regs = VEC_length (tdesc_arch_reg, data->arch_regs); 578 for (i = 0; i < num_regs; i++) 579 { 580 reg = VEC_index (tdesc_arch_reg, data->arch_regs, i); 581 if (reg->reg 582 && reg->reg->tdesc_type 583 && reg->type 584 && strcmp (id, reg->reg->tdesc_type->name) == 0) 585 return reg->type; 586 } 587 588 return NULL; 589 } 590 591 /* Construct, if necessary, and return the GDB type implementing target 592 type TDESC_TYPE for architecture GDBARCH. */ 593 594 static struct type * 595 tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type) 596 { 597 struct type *type; 598 599 switch (tdesc_type->kind) 600 { 601 /* Predefined types. */ 602 case TDESC_TYPE_INT8: 603 return builtin_type (gdbarch)->builtin_int8; 604 605 case TDESC_TYPE_INT16: 606 return builtin_type (gdbarch)->builtin_int16; 607 608 case TDESC_TYPE_INT32: 609 return builtin_type (gdbarch)->builtin_int32; 610 611 case TDESC_TYPE_INT64: 612 return builtin_type (gdbarch)->builtin_int64; 613 614 case TDESC_TYPE_INT128: 615 return builtin_type (gdbarch)->builtin_int128; 616 617 case TDESC_TYPE_UINT8: 618 return builtin_type (gdbarch)->builtin_uint8; 619 620 case TDESC_TYPE_UINT16: 621 return builtin_type (gdbarch)->builtin_uint16; 622 623 case TDESC_TYPE_UINT32: 624 return builtin_type (gdbarch)->builtin_uint32; 625 626 case TDESC_TYPE_UINT64: 627 return builtin_type (gdbarch)->builtin_uint64; 628 629 case TDESC_TYPE_UINT128: 630 return builtin_type (gdbarch)->builtin_uint128; 631 632 case TDESC_TYPE_CODE_PTR: 633 return builtin_type (gdbarch)->builtin_func_ptr; 634 635 case TDESC_TYPE_DATA_PTR: 636 return builtin_type (gdbarch)->builtin_data_ptr; 637 638 default: 639 break; 640 } 641 642 type = tdesc_find_type (gdbarch, tdesc_type->name); 643 if (type) 644 return type; 645 646 switch (tdesc_type->kind) 647 { 648 case TDESC_TYPE_IEEE_SINGLE: 649 return arch_float_type (gdbarch, -1, "builtin_type_ieee_single", 650 floatformats_ieee_single); 651 652 case TDESC_TYPE_IEEE_DOUBLE: 653 return arch_float_type (gdbarch, -1, "builtin_type_ieee_double", 654 floatformats_ieee_double); 655 656 case TDESC_TYPE_ARM_FPA_EXT: 657 return arch_float_type (gdbarch, -1, "builtin_type_arm_ext", 658 floatformats_arm_ext); 659 660 case TDESC_TYPE_I387_EXT: 661 return arch_float_type (gdbarch, -1, "builtin_type_i387_ext", 662 floatformats_i387_ext); 663 664 /* Types defined by a target feature. */ 665 case TDESC_TYPE_VECTOR: 666 { 667 struct type *type, *field_type; 668 669 field_type = tdesc_gdb_type (gdbarch, tdesc_type->u.v.type); 670 type = init_vector_type (field_type, tdesc_type->u.v.count); 671 TYPE_NAME (type) = xstrdup (tdesc_type->name); 672 673 return type; 674 } 675 676 case TDESC_TYPE_STRUCT: 677 { 678 struct type *type, *field_type; 679 struct tdesc_type_field *f; 680 int ix; 681 682 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 683 TYPE_NAME (type) = xstrdup (tdesc_type->name); 684 TYPE_TAG_NAME (type) = TYPE_NAME (type); 685 686 for (ix = 0; 687 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f); 688 ix++) 689 { 690 if (f->type == NULL) 691 { 692 /* Bitfield. */ 693 struct field *fld; 694 struct type *field_type; 695 int bitsize, total_size; 696 697 /* This invariant should be preserved while creating 698 types. */ 699 gdb_assert (tdesc_type->u.u.size != 0); 700 if (tdesc_type->u.u.size > 4) 701 field_type = builtin_type (gdbarch)->builtin_uint64; 702 else 703 field_type = builtin_type (gdbarch)->builtin_uint32; 704 705 fld = append_composite_type_field_raw (type, xstrdup (f->name), 706 field_type); 707 708 /* For little-endian, BITPOS counts from the LSB of 709 the structure and marks the LSB of the field. For 710 big-endian, BITPOS counts from the MSB of the 711 structure and marks the MSB of the field. Either 712 way, it is the number of bits to the "left" of the 713 field. To calculate this in big-endian, we need 714 the total size of the structure. */ 715 bitsize = f->end - f->start + 1; 716 total_size = tdesc_type->u.u.size * TARGET_CHAR_BIT; 717 if (gdbarch_bits_big_endian (gdbarch)) 718 SET_FIELD_BITPOS (fld[0], total_size - f->start - bitsize); 719 else 720 SET_FIELD_BITPOS (fld[0], f->start); 721 FIELD_BITSIZE (fld[0]) = bitsize; 722 } 723 else 724 { 725 field_type = tdesc_gdb_type (gdbarch, f->type); 726 append_composite_type_field (type, xstrdup (f->name), 727 field_type); 728 } 729 } 730 731 if (tdesc_type->u.u.size != 0) 732 TYPE_LENGTH (type) = tdesc_type->u.u.size; 733 return type; 734 } 735 736 case TDESC_TYPE_UNION: 737 { 738 struct type *type, *field_type; 739 struct tdesc_type_field *f; 740 int ix; 741 742 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); 743 TYPE_NAME (type) = xstrdup (tdesc_type->name); 744 745 for (ix = 0; 746 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f); 747 ix++) 748 { 749 field_type = tdesc_gdb_type (gdbarch, f->type); 750 append_composite_type_field (type, xstrdup (f->name), field_type); 751 752 /* If any of the children of a union are vectors, flag the 753 union as a vector also. This allows e.g. a union of two 754 vector types to show up automatically in "info vector". */ 755 if (TYPE_VECTOR (field_type)) 756 TYPE_VECTOR (type) = 1; 757 } 758 return type; 759 } 760 761 case TDESC_TYPE_FLAGS: 762 { 763 struct tdesc_type_flag *f; 764 int ix; 765 766 type = arch_flags_type (gdbarch, tdesc_type->name, 767 tdesc_type->u.f.size); 768 for (ix = 0; 769 VEC_iterate (tdesc_type_flag, tdesc_type->u.f.flags, ix, f); 770 ix++) 771 /* Note that contrary to the function name, this call will 772 just set the properties of an already-allocated 773 field. */ 774 append_flags_type_flag (type, f->start, 775 *f->name ? f->name : NULL); 776 777 return type; 778 } 779 } 780 781 internal_error (__FILE__, __LINE__, 782 "Type \"%s\" has an unknown kind %d", 783 tdesc_type->name, tdesc_type->kind); 784 } 785 786 787 /* Support for registers from target descriptions. */ 788 789 /* Construct the per-gdbarch data. */ 790 791 static void * 792 tdesc_data_init (struct obstack *obstack) 793 { 794 struct tdesc_arch_data *data; 795 796 data = OBSTACK_ZALLOC (obstack, struct tdesc_arch_data); 797 return data; 798 } 799 800 /* Similar, but for the temporary copy used during architecture 801 initialization. */ 802 803 struct tdesc_arch_data * 804 tdesc_data_alloc (void) 805 { 806 return XCNEW (struct tdesc_arch_data); 807 } 808 809 /* Free something allocated by tdesc_data_alloc, if it is not going 810 to be used (for instance if it was unsuitable for the 811 architecture). */ 812 813 void 814 tdesc_data_cleanup (void *data_untyped) 815 { 816 struct tdesc_arch_data *data = data_untyped; 817 818 VEC_free (tdesc_arch_reg, data->arch_regs); 819 xfree (data); 820 } 821 822 /* Search FEATURE for a register named NAME. */ 823 824 static struct tdesc_reg * 825 tdesc_find_register_early (const struct tdesc_feature *feature, 826 const char *name) 827 { 828 int ixr; 829 struct tdesc_reg *reg; 830 831 for (ixr = 0; 832 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); 833 ixr++) 834 if (strcasecmp (reg->name, name) == 0) 835 return reg; 836 837 return NULL; 838 } 839 840 /* Search FEATURE for a register named NAME. Assign REGNO to it. */ 841 842 int 843 tdesc_numbered_register (const struct tdesc_feature *feature, 844 struct tdesc_arch_data *data, 845 int regno, const char *name) 846 { 847 struct tdesc_arch_reg arch_reg = { 0 }; 848 struct tdesc_reg *reg = tdesc_find_register_early (feature, name); 849 850 if (reg == NULL) 851 return 0; 852 853 /* Make sure the vector includes a REGNO'th element. */ 854 while (regno >= VEC_length (tdesc_arch_reg, data->arch_regs)) 855 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &arch_reg); 856 857 arch_reg.reg = reg; 858 VEC_replace (tdesc_arch_reg, data->arch_regs, regno, &arch_reg); 859 return 1; 860 } 861 862 /* Search FEATURE for a register named NAME, but do not assign a fixed 863 register number to it. */ 864 865 int 866 tdesc_unnumbered_register (const struct tdesc_feature *feature, 867 const char *name) 868 { 869 struct tdesc_reg *reg = tdesc_find_register_early (feature, name); 870 871 if (reg == NULL) 872 return 0; 873 874 return 1; 875 } 876 877 /* Search FEATURE for a register whose name is in NAMES and assign 878 REGNO to it. */ 879 880 int 881 tdesc_numbered_register_choices (const struct tdesc_feature *feature, 882 struct tdesc_arch_data *data, 883 int regno, const char *const names[]) 884 { 885 int i; 886 887 for (i = 0; names[i] != NULL; i++) 888 if (tdesc_numbered_register (feature, data, regno, names[i])) 889 return 1; 890 891 return 0; 892 } 893 894 /* Search FEATURE for a register named NAME, and return its size in 895 bits. The register must exist. */ 896 897 int 898 tdesc_register_size (const struct tdesc_feature *feature, 899 const char *name) 900 { 901 struct tdesc_reg *reg = tdesc_find_register_early (feature, name); 902 903 gdb_assert (reg != NULL); 904 return reg->bitsize; 905 } 906 907 /* Look up a register by its GDB internal register number. */ 908 909 static struct tdesc_arch_reg * 910 tdesc_find_arch_register (struct gdbarch *gdbarch, int regno) 911 { 912 struct tdesc_arch_data *data; 913 914 data = gdbarch_data (gdbarch, tdesc_data); 915 if (regno < VEC_length (tdesc_arch_reg, data->arch_regs)) 916 return VEC_index (tdesc_arch_reg, data->arch_regs, regno); 917 else 918 return NULL; 919 } 920 921 static struct tdesc_reg * 922 tdesc_find_register (struct gdbarch *gdbarch, int regno) 923 { 924 struct tdesc_arch_reg *reg = tdesc_find_arch_register (gdbarch, regno); 925 926 return reg? reg->reg : NULL; 927 } 928 929 /* Return the name of register REGNO, from the target description or 930 from an architecture-provided pseudo_register_name method. */ 931 932 const char * 933 tdesc_register_name (struct gdbarch *gdbarch, int regno) 934 { 935 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno); 936 int num_regs = gdbarch_num_regs (gdbarch); 937 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch); 938 939 if (reg != NULL) 940 return reg->name; 941 942 if (regno >= num_regs && regno < num_regs + num_pseudo_regs) 943 { 944 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data); 945 946 gdb_assert (data->pseudo_register_name != NULL); 947 return data->pseudo_register_name (gdbarch, regno); 948 } 949 950 return ""; 951 } 952 953 struct type * 954 tdesc_register_type (struct gdbarch *gdbarch, int regno) 955 { 956 struct tdesc_arch_reg *arch_reg = tdesc_find_arch_register (gdbarch, regno); 957 struct tdesc_reg *reg = arch_reg? arch_reg->reg : NULL; 958 int num_regs = gdbarch_num_regs (gdbarch); 959 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch); 960 961 if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs) 962 { 963 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data); 964 965 gdb_assert (data->pseudo_register_type != NULL); 966 return data->pseudo_register_type (gdbarch, regno); 967 } 968 969 if (reg == NULL) 970 /* Return "int0_t", since "void" has a misleading size of one. */ 971 return builtin_type (gdbarch)->builtin_int0; 972 973 if (arch_reg->type == NULL) 974 { 975 /* First check for a predefined or target defined type. */ 976 if (reg->tdesc_type) 977 arch_reg->type = tdesc_gdb_type (gdbarch, reg->tdesc_type); 978 979 /* Next try size-sensitive type shortcuts. */ 980 else if (strcmp (reg->type, "float") == 0) 981 { 982 if (reg->bitsize == gdbarch_float_bit (gdbarch)) 983 arch_reg->type = builtin_type (gdbarch)->builtin_float; 984 else if (reg->bitsize == gdbarch_double_bit (gdbarch)) 985 arch_reg->type = builtin_type (gdbarch)->builtin_double; 986 else if (reg->bitsize == gdbarch_long_double_bit (gdbarch)) 987 arch_reg->type = builtin_type (gdbarch)->builtin_long_double; 988 else 989 { 990 warning (_("Register \"%s\" has an unsupported size (%d bits)"), 991 reg->name, reg->bitsize); 992 arch_reg->type = builtin_type (gdbarch)->builtin_double; 993 } 994 } 995 else if (strcmp (reg->type, "int") == 0) 996 { 997 if (reg->bitsize == gdbarch_long_bit (gdbarch)) 998 arch_reg->type = builtin_type (gdbarch)->builtin_long; 999 else if (reg->bitsize == TARGET_CHAR_BIT) 1000 arch_reg->type = builtin_type (gdbarch)->builtin_char; 1001 else if (reg->bitsize == gdbarch_short_bit (gdbarch)) 1002 arch_reg->type = builtin_type (gdbarch)->builtin_short; 1003 else if (reg->bitsize == gdbarch_int_bit (gdbarch)) 1004 arch_reg->type = builtin_type (gdbarch)->builtin_int; 1005 else if (reg->bitsize == gdbarch_long_long_bit (gdbarch)) 1006 arch_reg->type = builtin_type (gdbarch)->builtin_long_long; 1007 else if (reg->bitsize == gdbarch_ptr_bit (gdbarch)) 1008 /* A bit desperate by this point... */ 1009 arch_reg->type = builtin_type (gdbarch)->builtin_data_ptr; 1010 else 1011 { 1012 warning (_("Register \"%s\" has an unsupported size (%d bits)"), 1013 reg->name, reg->bitsize); 1014 arch_reg->type = builtin_type (gdbarch)->builtin_long; 1015 } 1016 } 1017 1018 if (arch_reg->type == NULL) 1019 internal_error (__FILE__, __LINE__, 1020 "Register \"%s\" has an unknown type \"%s\"", 1021 reg->name, reg->type); 1022 } 1023 1024 return arch_reg->type; 1025 } 1026 1027 static int 1028 tdesc_remote_register_number (struct gdbarch *gdbarch, int regno) 1029 { 1030 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno); 1031 1032 if (reg != NULL) 1033 return reg->target_regnum; 1034 else 1035 return -1; 1036 } 1037 1038 /* Check whether REGNUM is a member of REGGROUP. Registers from the 1039 target description may be classified as general, float, or vector. 1040 Unlike a gdbarch register_reggroup_p method, this function will 1041 return -1 if it does not know; the caller should handle registers 1042 with no specified group. 1043 1044 Arbitrary strings (other than "general", "float", and "vector") 1045 from the description are not used; they cause the register to be 1046 displayed in "info all-registers" but excluded from "info 1047 registers" et al. The names of containing features are also not 1048 used. This might be extended to display registers in some more 1049 useful groupings. 1050 1051 The save-restore flag is also implemented here. */ 1052 1053 int 1054 tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno, 1055 struct reggroup *reggroup) 1056 { 1057 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno); 1058 1059 if (reg != NULL && reg->group != NULL) 1060 { 1061 int general_p = 0, float_p = 0, vector_p = 0; 1062 1063 if (strcmp (reg->group, "general") == 0) 1064 general_p = 1; 1065 else if (strcmp (reg->group, "float") == 0) 1066 float_p = 1; 1067 else if (strcmp (reg->group, "vector") == 0) 1068 vector_p = 1; 1069 1070 if (reggroup == float_reggroup) 1071 return float_p; 1072 1073 if (reggroup == vector_reggroup) 1074 return vector_p; 1075 1076 if (reggroup == general_reggroup) 1077 return general_p; 1078 } 1079 1080 if (reg != NULL 1081 && (reggroup == save_reggroup || reggroup == restore_reggroup)) 1082 return reg->save_restore; 1083 1084 return -1; 1085 } 1086 1087 /* Check whether REGNUM is a member of REGGROUP. Registers with no 1088 group specified go to the default reggroup function and are handled 1089 by type. */ 1090 1091 static int 1092 tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno, 1093 struct reggroup *reggroup) 1094 { 1095 int num_regs = gdbarch_num_regs (gdbarch); 1096 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch); 1097 int ret; 1098 1099 if (regno >= num_regs && regno < num_regs + num_pseudo_regs) 1100 { 1101 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data); 1102 1103 if (data->pseudo_register_reggroup_p != NULL) 1104 return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup); 1105 /* Otherwise fall through to the default reggroup_p. */ 1106 } 1107 1108 ret = tdesc_register_in_reggroup_p (gdbarch, regno, reggroup); 1109 if (ret != -1) 1110 return ret; 1111 1112 return default_register_reggroup_p (gdbarch, regno, reggroup); 1113 } 1114 1115 /* Record architecture-specific functions to call for pseudo-register 1116 support. */ 1117 1118 void 1119 set_tdesc_pseudo_register_name (struct gdbarch *gdbarch, 1120 gdbarch_register_name_ftype *pseudo_name) 1121 { 1122 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data); 1123 1124 data->pseudo_register_name = pseudo_name; 1125 } 1126 1127 void 1128 set_tdesc_pseudo_register_type (struct gdbarch *gdbarch, 1129 gdbarch_register_type_ftype *pseudo_type) 1130 { 1131 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data); 1132 1133 data->pseudo_register_type = pseudo_type; 1134 } 1135 1136 void 1137 set_tdesc_pseudo_register_reggroup_p 1138 (struct gdbarch *gdbarch, 1139 gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p) 1140 { 1141 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data); 1142 1143 data->pseudo_register_reggroup_p = pseudo_reggroup_p; 1144 } 1145 1146 /* Update GDBARCH to use the target description for registers. */ 1147 1148 void 1149 tdesc_use_registers (struct gdbarch *gdbarch, 1150 const struct target_desc *target_desc, 1151 struct tdesc_arch_data *early_data) 1152 { 1153 int num_regs = gdbarch_num_regs (gdbarch); 1154 int ixf, ixr; 1155 struct tdesc_feature *feature; 1156 struct tdesc_reg *reg; 1157 struct tdesc_arch_data *data; 1158 struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 }; 1159 htab_t reg_hash; 1160 1161 /* We can't use the description for registers if it doesn't describe 1162 any. This function should only be called after validating 1163 registers, so the caller should know that registers are 1164 included. */ 1165 gdb_assert (tdesc_has_registers (target_desc)); 1166 1167 data = gdbarch_data (gdbarch, tdesc_data); 1168 data->arch_regs = early_data->arch_regs; 1169 xfree (early_data); 1170 1171 /* Build up a set of all registers, so that we can assign register 1172 numbers where needed. The hash table expands as necessary, so 1173 the initial size is arbitrary. */ 1174 reg_hash = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL); 1175 for (ixf = 0; 1176 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature); 1177 ixf++) 1178 for (ixr = 0; 1179 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); 1180 ixr++) 1181 { 1182 void **slot = htab_find_slot (reg_hash, reg, INSERT); 1183 1184 *slot = reg; 1185 } 1186 1187 /* Remove any registers which were assigned numbers by the 1188 architecture. */ 1189 for (ixr = 0; 1190 VEC_iterate (tdesc_arch_reg, data->arch_regs, ixr, arch_reg); 1191 ixr++) 1192 if (arch_reg->reg) 1193 htab_remove_elt (reg_hash, arch_reg->reg); 1194 1195 /* Assign numbers to the remaining registers and add them to the 1196 list of registers. The new numbers are always above gdbarch_num_regs. 1197 Iterate over the features, not the hash table, so that the order 1198 matches that in the target description. */ 1199 1200 gdb_assert (VEC_length (tdesc_arch_reg, data->arch_regs) <= num_regs); 1201 while (VEC_length (tdesc_arch_reg, data->arch_regs) < num_regs) 1202 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg); 1203 for (ixf = 0; 1204 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature); 1205 ixf++) 1206 for (ixr = 0; 1207 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); 1208 ixr++) 1209 if (htab_find (reg_hash, reg) != NULL) 1210 { 1211 new_arch_reg.reg = reg; 1212 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg); 1213 num_regs++; 1214 } 1215 1216 htab_delete (reg_hash); 1217 1218 /* Update the architecture. */ 1219 set_gdbarch_num_regs (gdbarch, num_regs); 1220 set_gdbarch_register_name (gdbarch, tdesc_register_name); 1221 set_gdbarch_register_type (gdbarch, tdesc_register_type); 1222 set_gdbarch_remote_register_number (gdbarch, 1223 tdesc_remote_register_number); 1224 set_gdbarch_register_reggroup_p (gdbarch, tdesc_register_reggroup_p); 1225 } 1226 1227 1228 /* Methods for constructing a target description. */ 1229 1230 static void 1231 tdesc_free_reg (struct tdesc_reg *reg) 1232 { 1233 xfree (reg->name); 1234 xfree (reg->type); 1235 xfree (reg->group); 1236 xfree (reg); 1237 } 1238 1239 void 1240 tdesc_create_reg (struct tdesc_feature *feature, const char *name, 1241 int regnum, int save_restore, const char *group, 1242 int bitsize, const char *type) 1243 { 1244 struct tdesc_reg *reg = XCNEW (struct tdesc_reg); 1245 1246 reg->name = xstrdup (name); 1247 reg->target_regnum = regnum; 1248 reg->save_restore = save_restore; 1249 reg->group = group ? xstrdup (group) : NULL; 1250 reg->bitsize = bitsize; 1251 reg->type = type ? xstrdup (type) : xstrdup ("<unknown>"); 1252 1253 /* If the register's type is target-defined, look it up now. We may not 1254 have easy access to the containing feature when we want it later. */ 1255 reg->tdesc_type = tdesc_named_type (feature, reg->type); 1256 1257 VEC_safe_push (tdesc_reg_p, feature->registers, reg); 1258 } 1259 1260 static void 1261 tdesc_free_type (struct tdesc_type *type) 1262 { 1263 switch (type->kind) 1264 { 1265 case TDESC_TYPE_STRUCT: 1266 case TDESC_TYPE_UNION: 1267 { 1268 struct tdesc_type_field *f; 1269 int ix; 1270 1271 for (ix = 0; 1272 VEC_iterate (tdesc_type_field, type->u.u.fields, ix, f); 1273 ix++) 1274 xfree (f->name); 1275 1276 VEC_free (tdesc_type_field, type->u.u.fields); 1277 } 1278 break; 1279 1280 case TDESC_TYPE_FLAGS: 1281 { 1282 struct tdesc_type_flag *f; 1283 int ix; 1284 1285 for (ix = 0; 1286 VEC_iterate (tdesc_type_flag, type->u.f.flags, ix, f); 1287 ix++) 1288 xfree (f->name); 1289 1290 VEC_free (tdesc_type_flag, type->u.f.flags); 1291 } 1292 break; 1293 1294 default: 1295 break; 1296 } 1297 1298 xfree (type->name); 1299 xfree (type); 1300 } 1301 1302 struct tdesc_type * 1303 tdesc_create_vector (struct tdesc_feature *feature, const char *name, 1304 struct tdesc_type *field_type, int count) 1305 { 1306 struct tdesc_type *type = XCNEW (struct tdesc_type); 1307 1308 type->name = xstrdup (name); 1309 type->kind = TDESC_TYPE_VECTOR; 1310 type->u.v.type = field_type; 1311 type->u.v.count = count; 1312 1313 VEC_safe_push (tdesc_type_p, feature->types, type); 1314 return type; 1315 } 1316 1317 struct tdesc_type * 1318 tdesc_create_struct (struct tdesc_feature *feature, const char *name) 1319 { 1320 struct tdesc_type *type = XCNEW (struct tdesc_type); 1321 1322 type->name = xstrdup (name); 1323 type->kind = TDESC_TYPE_STRUCT; 1324 1325 VEC_safe_push (tdesc_type_p, feature->types, type); 1326 return type; 1327 } 1328 1329 /* Set the total length of TYPE. Structs which contain bitfields may 1330 omit the reserved bits, so the end of the last field may not 1331 suffice. */ 1332 1333 void 1334 tdesc_set_struct_size (struct tdesc_type *type, LONGEST size) 1335 { 1336 gdb_assert (type->kind == TDESC_TYPE_STRUCT); 1337 type->u.u.size = size; 1338 } 1339 1340 struct tdesc_type * 1341 tdesc_create_union (struct tdesc_feature *feature, const char *name) 1342 { 1343 struct tdesc_type *type = XCNEW (struct tdesc_type); 1344 1345 type->name = xstrdup (name); 1346 type->kind = TDESC_TYPE_UNION; 1347 1348 VEC_safe_push (tdesc_type_p, feature->types, type); 1349 return type; 1350 } 1351 1352 struct tdesc_type * 1353 tdesc_create_flags (struct tdesc_feature *feature, const char *name, 1354 LONGEST size) 1355 { 1356 struct tdesc_type *type = XCNEW (struct tdesc_type); 1357 1358 type->name = xstrdup (name); 1359 type->kind = TDESC_TYPE_FLAGS; 1360 type->u.f.size = size; 1361 1362 VEC_safe_push (tdesc_type_p, feature->types, type); 1363 return type; 1364 } 1365 1366 /* Add a new field. Return a temporary pointer to the field, which 1367 is only valid until the next call to tdesc_add_field (the vector 1368 might be reallocated). */ 1369 1370 void 1371 tdesc_add_field (struct tdesc_type *type, const char *field_name, 1372 struct tdesc_type *field_type) 1373 { 1374 struct tdesc_type_field f = { 0 }; 1375 1376 gdb_assert (type->kind == TDESC_TYPE_UNION 1377 || type->kind == TDESC_TYPE_STRUCT); 1378 1379 f.name = xstrdup (field_name); 1380 f.type = field_type; 1381 1382 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f); 1383 } 1384 1385 /* Add a new bitfield. */ 1386 1387 void 1388 tdesc_add_bitfield (struct tdesc_type *type, const char *field_name, 1389 int start, int end) 1390 { 1391 struct tdesc_type_field f = { 0 }; 1392 1393 gdb_assert (type->kind == TDESC_TYPE_STRUCT); 1394 1395 f.name = xstrdup (field_name); 1396 f.start = start; 1397 f.end = end; 1398 1399 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f); 1400 } 1401 1402 void 1403 tdesc_add_flag (struct tdesc_type *type, int start, 1404 const char *flag_name) 1405 { 1406 struct tdesc_type_flag f = { 0 }; 1407 1408 gdb_assert (type->kind == TDESC_TYPE_FLAGS); 1409 1410 f.name = xstrdup (flag_name); 1411 f.start = start; 1412 1413 VEC_safe_push (tdesc_type_flag, type->u.f.flags, &f); 1414 } 1415 1416 static void 1417 tdesc_free_feature (struct tdesc_feature *feature) 1418 { 1419 struct tdesc_reg *reg; 1420 struct tdesc_type *type; 1421 int ix; 1422 1423 for (ix = 0; VEC_iterate (tdesc_reg_p, feature->registers, ix, reg); ix++) 1424 tdesc_free_reg (reg); 1425 VEC_free (tdesc_reg_p, feature->registers); 1426 1427 for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++) 1428 tdesc_free_type (type); 1429 VEC_free (tdesc_type_p, feature->types); 1430 1431 xfree (feature->name); 1432 xfree (feature); 1433 } 1434 1435 struct tdesc_feature * 1436 tdesc_create_feature (struct target_desc *tdesc, const char *name) 1437 { 1438 struct tdesc_feature *new_feature = XCNEW (struct tdesc_feature); 1439 1440 new_feature->name = xstrdup (name); 1441 1442 VEC_safe_push (tdesc_feature_p, tdesc->features, new_feature); 1443 return new_feature; 1444 } 1445 1446 struct target_desc * 1447 allocate_target_description (void) 1448 { 1449 return XCNEW (struct target_desc); 1450 } 1451 1452 static void 1453 free_target_description (void *arg) 1454 { 1455 struct target_desc *target_desc = arg; 1456 struct tdesc_feature *feature; 1457 struct property *prop; 1458 int ix; 1459 1460 for (ix = 0; 1461 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature); 1462 ix++) 1463 tdesc_free_feature (feature); 1464 VEC_free (tdesc_feature_p, target_desc->features); 1465 1466 for (ix = 0; 1467 VEC_iterate (property_s, target_desc->properties, ix, prop); 1468 ix++) 1469 { 1470 xfree (prop->key); 1471 xfree (prop->value); 1472 } 1473 VEC_free (property_s, target_desc->properties); 1474 1475 VEC_free (arch_p, target_desc->compatible); 1476 1477 xfree (target_desc); 1478 } 1479 1480 struct cleanup * 1481 make_cleanup_free_target_description (struct target_desc *target_desc) 1482 { 1483 return make_cleanup (free_target_description, target_desc); 1484 } 1485 1486 void 1487 tdesc_add_compatible (struct target_desc *target_desc, 1488 const struct bfd_arch_info *compatible) 1489 { 1490 const struct bfd_arch_info *compat; 1491 int ix; 1492 1493 /* If this instance of GDB is compiled without BFD support for the 1494 compatible architecture, simply ignore it -- we would not be able 1495 to handle it anyway. */ 1496 if (compatible == NULL) 1497 return; 1498 1499 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat); 1500 ix++) 1501 if (compat == compatible) 1502 internal_error (__FILE__, __LINE__, 1503 _("Attempted to add duplicate " 1504 "compatible architecture \"%s\""), 1505 compatible->printable_name); 1506 1507 VEC_safe_push (arch_p, target_desc->compatible, compatible); 1508 } 1509 1510 void 1511 set_tdesc_property (struct target_desc *target_desc, 1512 const char *key, const char *value) 1513 { 1514 struct property *prop, new_prop; 1515 int ix; 1516 1517 gdb_assert (key != NULL && value != NULL); 1518 1519 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop); 1520 ix++) 1521 if (strcmp (prop->key, key) == 0) 1522 internal_error (__FILE__, __LINE__, 1523 _("Attempted to add duplicate property \"%s\""), key); 1524 1525 new_prop.key = xstrdup (key); 1526 new_prop.value = xstrdup (value); 1527 VEC_safe_push (property_s, target_desc->properties, &new_prop); 1528 } 1529 1530 void 1531 set_tdesc_architecture (struct target_desc *target_desc, 1532 const struct bfd_arch_info *arch) 1533 { 1534 target_desc->arch = arch; 1535 } 1536 1537 void 1538 set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi) 1539 { 1540 target_desc->osabi = osabi; 1541 } 1542 1543 1544 static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist; 1545 static struct cmd_list_element *tdesc_unset_cmdlist; 1546 1547 /* Helper functions for the CLI commands. */ 1548 1549 static void 1550 set_tdesc_cmd (char *args, int from_tty) 1551 { 1552 help_list (tdesc_set_cmdlist, "set tdesc ", all_commands, gdb_stdout); 1553 } 1554 1555 static void 1556 show_tdesc_cmd (char *args, int from_tty) 1557 { 1558 cmd_show_list (tdesc_show_cmdlist, from_tty, ""); 1559 } 1560 1561 static void 1562 unset_tdesc_cmd (char *args, int from_tty) 1563 { 1564 help_list (tdesc_unset_cmdlist, "unset tdesc ", all_commands, gdb_stdout); 1565 } 1566 1567 static void 1568 set_tdesc_filename_cmd (char *args, int from_tty, 1569 struct cmd_list_element *c) 1570 { 1571 xfree (target_description_filename); 1572 target_description_filename = xstrdup (tdesc_filename_cmd_string); 1573 1574 target_clear_description (); 1575 target_find_description (); 1576 } 1577 1578 static void 1579 show_tdesc_filename_cmd (struct ui_file *file, int from_tty, 1580 struct cmd_list_element *c, 1581 const char *value) 1582 { 1583 value = target_description_filename; 1584 1585 if (value != NULL && *value != '\0') 1586 printf_filtered (_("The target description will be read from \"%s\".\n"), 1587 value); 1588 else 1589 printf_filtered (_("The target description will be " 1590 "read from the target.\n")); 1591 } 1592 1593 static void 1594 unset_tdesc_filename_cmd (char *args, int from_tty) 1595 { 1596 xfree (target_description_filename); 1597 target_description_filename = NULL; 1598 target_clear_description (); 1599 target_find_description (); 1600 } 1601 1602 static void 1603 maint_print_c_tdesc_cmd (char *args, int from_tty) 1604 { 1605 const struct target_desc *tdesc; 1606 const struct bfd_arch_info *compatible; 1607 const char *filename, *inp; 1608 char *function, *outp; 1609 struct property *prop; 1610 struct tdesc_feature *feature; 1611 struct tdesc_reg *reg; 1612 struct tdesc_type *type; 1613 struct tdesc_type_field *f; 1614 struct tdesc_type_flag *flag; 1615 int ix, ix2, ix3; 1616 int printed_field_type = 0; 1617 1618 /* Use the global target-supplied description, not the current 1619 architecture's. This lets a GDB for one architecture generate C 1620 for another architecture's description, even though the gdbarch 1621 initialization code will reject the new description. */ 1622 tdesc = current_target_desc; 1623 if (tdesc == NULL) 1624 error (_("There is no target description to print.")); 1625 1626 if (target_description_filename == NULL) 1627 error (_("The current target description did not come from an XML file.")); 1628 1629 filename = lbasename (target_description_filename); 1630 function = alloca (strlen (filename) + 1); 1631 for (inp = filename, outp = function; *inp != '\0'; inp++) 1632 if (*inp == '.') 1633 break; 1634 else if (*inp == '-') 1635 *outp++ = '_'; 1636 else 1637 *outp++ = *inp; 1638 *outp = '\0'; 1639 1640 /* Standard boilerplate. */ 1641 printf_unfiltered ("/* THIS FILE IS GENERATED. " 1642 "-*- buffer-read-only: t -*- vi" 1643 ":set ro:\n"); 1644 printf_unfiltered (" Original: %s */\n\n", filename); 1645 printf_unfiltered ("#include \"defs.h\"\n"); 1646 printf_unfiltered ("#include \"osabi.h\"\n"); 1647 printf_unfiltered ("#include \"target-descriptions.h\"\n"); 1648 printf_unfiltered ("\n"); 1649 1650 printf_unfiltered ("struct target_desc *tdesc_%s;\n", function); 1651 printf_unfiltered ("static void\n"); 1652 printf_unfiltered ("initialize_tdesc_%s (void)\n", function); 1653 printf_unfiltered ("{\n"); 1654 printf_unfiltered 1655 (" struct target_desc *result = allocate_target_description ();\n"); 1656 printf_unfiltered (" struct tdesc_feature *feature;\n"); 1657 1658 /* Now we do some "filtering" in order to know which variables to 1659 declare. This is needed because otherwise we would declare unused 1660 variables `field_type' and `type'. */ 1661 for (ix = 0; 1662 VEC_iterate (tdesc_feature_p, tdesc->features, ix, feature); 1663 ix++) 1664 { 1665 int printed_desc_type = 0; 1666 1667 for (ix2 = 0; 1668 VEC_iterate (tdesc_type_p, feature->types, ix2, type); 1669 ix2++) 1670 { 1671 if (!printed_field_type) 1672 { 1673 printf_unfiltered (" struct tdesc_type *field_type;\n"); 1674 printed_field_type = 1; 1675 } 1676 1677 if ((type->kind == TDESC_TYPE_UNION 1678 || type->kind == TDESC_TYPE_STRUCT) 1679 && VEC_length (tdesc_type_field, type->u.u.fields) > 0) 1680 { 1681 printf_unfiltered (" struct tdesc_type *type;\n"); 1682 printed_desc_type = 1; 1683 break; 1684 } 1685 } 1686 1687 if (printed_desc_type) 1688 break; 1689 } 1690 1691 printf_unfiltered ("\n"); 1692 1693 if (tdesc_architecture (tdesc) != NULL) 1694 { 1695 printf_unfiltered 1696 (" set_tdesc_architecture (result, bfd_scan_arch (\"%s\"));\n", 1697 tdesc_architecture (tdesc)->printable_name); 1698 printf_unfiltered ("\n"); 1699 } 1700 1701 if (tdesc_osabi (tdesc) > GDB_OSABI_UNKNOWN 1702 && tdesc_osabi (tdesc) < GDB_OSABI_INVALID) 1703 { 1704 printf_unfiltered 1705 (" set_tdesc_osabi (result, osabi_from_tdesc_string (\"%s\"));\n", 1706 gdbarch_osabi_name (tdesc_osabi (tdesc))); 1707 printf_unfiltered ("\n"); 1708 } 1709 1710 for (ix = 0; VEC_iterate (arch_p, tdesc->compatible, ix, compatible); 1711 ix++) 1712 { 1713 printf_unfiltered 1714 (" tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n", 1715 compatible->printable_name); 1716 } 1717 if (ix) 1718 printf_unfiltered ("\n"); 1719 1720 for (ix = 0; VEC_iterate (property_s, tdesc->properties, ix, prop); 1721 ix++) 1722 { 1723 printf_unfiltered (" set_tdesc_property (result, \"%s\", \"%s\");\n", 1724 prop->key, prop->value); 1725 } 1726 1727 for (ix = 0; 1728 VEC_iterate (tdesc_feature_p, tdesc->features, ix, feature); 1729 ix++) 1730 { 1731 printf_unfiltered (" \ 1732 feature = tdesc_create_feature (result, \"%s\");\n", 1733 feature->name); 1734 1735 for (ix2 = 0; 1736 VEC_iterate (tdesc_type_p, feature->types, ix2, type); 1737 ix2++) 1738 { 1739 switch (type->kind) 1740 { 1741 case TDESC_TYPE_VECTOR: 1742 printf_unfiltered 1743 (" field_type = tdesc_named_type (feature, \"%s\");\n", 1744 type->u.v.type->name); 1745 printf_unfiltered 1746 (" tdesc_create_vector (feature, \"%s\", field_type, %d);\n", 1747 type->name, type->u.v.count); 1748 break; 1749 case TDESC_TYPE_STRUCT: 1750 printf_unfiltered 1751 (" type = tdesc_create_struct (feature, \"%s\");\n", 1752 type->name); 1753 if (type->u.u.size != 0) 1754 printf_unfiltered 1755 (" tdesc_set_struct_size (type, %s);\n", 1756 plongest (type->u.u.size)); 1757 for (ix3 = 0; 1758 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); 1759 ix3++) 1760 { 1761 /* Going first for implicitly sized types, else part handles 1762 bitfields. As reported on xml-tdesc.c implicitly sized types 1763 cannot contain a bitfield. */ 1764 if (f->type != NULL) 1765 { 1766 printf_unfiltered 1767 (" field_type = tdesc_named_type (feature, \"%s\");\n", 1768 f->type->name); 1769 printf_unfiltered 1770 (" tdesc_add_field (type, \"%s\", field_type);\n", 1771 f->name); 1772 } 1773 else 1774 printf_unfiltered 1775 (" tdesc_add_bitfield (type, \"%s\", %d, %d);\n", 1776 f->name, f->start, f->end); 1777 } 1778 break; 1779 case TDESC_TYPE_UNION: 1780 printf_unfiltered 1781 (" type = tdesc_create_union (feature, \"%s\");\n", 1782 type->name); 1783 for (ix3 = 0; 1784 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f); 1785 ix3++) 1786 { 1787 printf_unfiltered 1788 (" field_type = tdesc_named_type (feature, \"%s\");\n", 1789 f->type->name); 1790 printf_unfiltered 1791 (" tdesc_add_field (type, \"%s\", field_type);\n", 1792 f->name); 1793 } 1794 break; 1795 case TDESC_TYPE_FLAGS: 1796 printf_unfiltered 1797 (" field_type = tdesc_create_flags (feature, \"%s\", %d);\n", 1798 type->name, (int) type->u.f.size); 1799 for (ix3 = 0; 1800 VEC_iterate (tdesc_type_flag, type->u.f.flags, ix3, 1801 flag); 1802 ix3++) 1803 printf_unfiltered 1804 (" tdesc_add_flag (field_type, %d, \"%s\");\n", 1805 flag->start, flag->name); 1806 break; 1807 default: 1808 error (_("C output is not supported type \"%s\"."), type->name); 1809 } 1810 printf_unfiltered ("\n"); 1811 } 1812 1813 for (ix2 = 0; 1814 VEC_iterate (tdesc_reg_p, feature->registers, ix2, reg); 1815 ix2++) 1816 { 1817 printf_unfiltered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ", 1818 reg->name, reg->target_regnum, reg->save_restore); 1819 if (reg->group) 1820 printf_unfiltered ("\"%s\", ", reg->group); 1821 else 1822 printf_unfiltered ("NULL, "); 1823 printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type); 1824 } 1825 1826 printf_unfiltered ("\n"); 1827 } 1828 1829 printf_unfiltered (" tdesc_%s = result;\n", function); 1830 printf_unfiltered ("}\n"); 1831 } 1832 1833 /* Provide a prototype to silence -Wmissing-prototypes. */ 1834 extern initialize_file_ftype _initialize_target_descriptions; 1835 1836 void 1837 _initialize_target_descriptions (void) 1838 { 1839 tdesc_data = gdbarch_data_register_pre_init (tdesc_data_init); 1840 1841 add_prefix_cmd ("tdesc", class_maintenance, set_tdesc_cmd, _("\ 1842 Set target description specific variables."), 1843 &tdesc_set_cmdlist, "set tdesc ", 1844 0 /* allow-unknown */, &setlist); 1845 add_prefix_cmd ("tdesc", class_maintenance, show_tdesc_cmd, _("\ 1846 Show target description specific variables."), 1847 &tdesc_show_cmdlist, "show tdesc ", 1848 0 /* allow-unknown */, &showlist); 1849 add_prefix_cmd ("tdesc", class_maintenance, unset_tdesc_cmd, _("\ 1850 Unset target description specific variables."), 1851 &tdesc_unset_cmdlist, "unset tdesc ", 1852 0 /* allow-unknown */, &unsetlist); 1853 1854 add_setshow_filename_cmd ("filename", class_obscure, 1855 &tdesc_filename_cmd_string, 1856 _("\ 1857 Set the file to read for an XML target description"), _("\ 1858 Show the file to read for an XML target description"), _("\ 1859 When set, GDB will read the target description from a local\n\ 1860 file instead of querying the remote target."), 1861 set_tdesc_filename_cmd, 1862 show_tdesc_filename_cmd, 1863 &tdesc_set_cmdlist, &tdesc_show_cmdlist); 1864 1865 add_cmd ("filename", class_obscure, unset_tdesc_filename_cmd, _("\ 1866 Unset the file to read for an XML target description. When unset,\n\ 1867 GDB will read the description from the target."), 1868 &tdesc_unset_cmdlist); 1869 1870 add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\ 1871 Print the current target description as a C source file."), 1872 &maintenanceprintlist); 1873 } 1874