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