1 /* Target description support for GDB.
3 Copyright (C) 2006-2017 Free Software Foundation, Inc.
5 Contributed by CodeSourcery.
7 This file is part of GDB.
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.
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.
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/>. */
23 #include "arch-utils.h"
26 #include "reggroups.h"
28 #include "target-descriptions.h"
30 #include "xml-support.h"
31 #include "xml-tdesc.h"
34 #include "gdb_obstack.h"
38 #include "completer.h"
39 #include "readline/tilde.h" /* tilde_expand */
41 /* The interface to visit different elements of target description. */
43 class tdesc_element_visitor
46 virtual void visit_pre (const target_desc *e) = 0;
47 virtual void visit_post (const target_desc *e) = 0;
49 virtual void visit_pre (const tdesc_feature *e) = 0;
50 virtual void visit_post (const tdesc_feature *e) = 0;
52 virtual void visit (const tdesc_type *e) = 0;
53 virtual void visit (const tdesc_reg *e) = 0;
59 virtual void accept (tdesc_element_visitor &v) const = 0;
64 typedef struct property
69 DEF_VEC_O(property_s);
71 /* An individual register from a target description. */
73 typedef struct tdesc_reg : tdesc_element
75 tdesc_reg (struct tdesc_feature *feature, const char *name_,
76 int regnum, int save_restore_, const char *group_,
77 int bitsize_, const char *type_)
78 : name (xstrdup (name_)), target_regnum (regnum),
79 save_restore (save_restore_),
80 group (group_ != NULL ? xstrdup (group_) : NULL),
82 type (type_ != NULL ? xstrdup (type_) : xstrdup ("<unknown>"))
84 /* If the register's type is target-defined, look it up now. We may not
85 have easy access to the containing feature when we want it later. */
86 tdesc_type = tdesc_named_type (feature, type);
96 DISABLE_COPY_AND_ASSIGN (tdesc_reg);
98 /* The name of this register. In standard features, it may be
99 recognized by the architecture support code, or it may be purely
103 /* The register number used by this target to refer to this
104 register. This is used for remote p/P packets and to determine
105 the ordering of registers in the remote g/G packets. */
108 /* If this flag is set, GDB should save and restore this register
109 around calls to an inferior function. */
112 /* The name of the register group containing this register, or NULL
113 if the group should be automatically determined from the
114 register's type. If this is "general", "float", or "vector", the
115 corresponding "info" command should display this register's
116 value. It can be an arbitrary string, but should be limited to
117 alphanumeric characters and internal hyphens. Currently other
118 strings are ignored (treated as NULL). */
121 /* The size of the register, in bits. */
124 /* The type of the register. This string corresponds to either
125 a named type from the target description or a predefined
129 /* The target-described type corresponding to TYPE, if found. */
130 struct tdesc_type *tdesc_type;
132 void accept (tdesc_element_visitor &v) const override
137 bool operator== (const tdesc_reg &other) const
139 return (streq (name, other.name)
140 && target_regnum == other.target_regnum
141 && save_restore == other.save_restore
142 && bitsize == other.bitsize
143 && (group == other.group || streq (group, other.group))
144 && streq (type, other.type));
147 bool operator!= (const tdesc_reg &other) const
149 return !(*this == other);
152 DEF_VEC_P(tdesc_reg_p);
154 /* A named type from a target description. */
156 typedef struct tdesc_type_field
159 struct tdesc_type *type;
160 /* For non-enum-values, either both are -1 (non-bitfield), or both are
161 not -1 (bitfield). For enum values, start is the value (which could be
165 DEF_VEC_O(tdesc_type_field);
169 /* Predefined types. */
183 TDESC_TYPE_IEEE_SINGLE,
184 TDESC_TYPE_IEEE_DOUBLE,
185 TDESC_TYPE_ARM_FPA_EXT,
188 /* Types defined by a target feature. */
196 typedef struct tdesc_type : tdesc_element
198 tdesc_type (const char *name_, enum tdesc_type_kind kind_)
199 : name (xstrdup (name_)), kind (kind_)
201 memset (&u, 0, sizeof (u));
204 virtual ~tdesc_type ()
208 case TDESC_TYPE_STRUCT:
209 case TDESC_TYPE_UNION:
210 case TDESC_TYPE_FLAGS:
211 case TDESC_TYPE_ENUM:
213 struct tdesc_type_field *f;
217 VEC_iterate (tdesc_type_field, u.u.fields, ix, f);
221 VEC_free (tdesc_type_field, u.u.fields);
228 xfree ((char *) name);
231 DISABLE_COPY_AND_ASSIGN (tdesc_type);
233 /* The name of this type. If this type is a built-in type, this is
234 a pointer to a constant string. Otherwise, it's a
235 malloc-allocated string (and thus must be freed). */
238 /* Identify the kind of this type. */
239 enum tdesc_type_kind kind;
241 /* Kind-specific data. */
247 struct tdesc_type *type;
251 /* Struct, union, flags, or enum type. */
254 VEC(tdesc_type_field) *fields;
259 void accept (tdesc_element_visitor &v) const override
264 bool operator== (const tdesc_type &other) const
266 return (streq (name, other.name) && kind == other.kind);
269 bool operator!= (const tdesc_type &other) const
271 return !(*this == other);
274 DEF_VEC_P(tdesc_type_p);
276 /* A feature from a target description. Each feature is a collection
277 of other elements, e.g. registers and types. */
279 typedef struct tdesc_feature : tdesc_element
281 tdesc_feature (const char *name_)
282 : name (xstrdup (name_))
285 virtual ~tdesc_feature ()
287 struct tdesc_reg *reg;
288 struct tdesc_type *type;
291 for (ix = 0; VEC_iterate (tdesc_reg_p, registers, ix, reg); ix++)
293 VEC_free (tdesc_reg_p, registers);
295 for (ix = 0; VEC_iterate (tdesc_type_p, types, ix, type); ix++)
297 VEC_free (tdesc_type_p, types);
302 DISABLE_COPY_AND_ASSIGN (tdesc_feature);
304 /* The name of this feature. It may be recognized by the architecture
308 /* The registers associated with this feature. */
309 VEC(tdesc_reg_p) *registers = NULL;
311 /* The types associated with this feature. */
312 VEC(tdesc_type_p) *types = NULL;
314 void accept (tdesc_element_visitor &v) const override
318 struct tdesc_type *type;
321 VEC_iterate (tdesc_type_p, types, ix, type);
325 struct tdesc_reg *reg;
328 VEC_iterate (tdesc_reg_p, registers, ix, reg);
336 bool operator== (const tdesc_feature &other) const
338 if (strcmp (name, other.name) != 0)
341 if (VEC_length (tdesc_reg_p, registers)
342 != VEC_length (tdesc_reg_p, other.registers))
345 struct tdesc_reg *reg;
348 VEC_iterate (tdesc_reg_p, registers, ix, reg);
352 = VEC_index (tdesc_reg_p, other.registers, ix);
354 if (reg != reg2 && *reg != *reg2)
358 if (VEC_length (tdesc_type_p, types)
359 != VEC_length (tdesc_type_p, other.types))
365 VEC_iterate (tdesc_type_p, types, ix, type);
369 = VEC_index (tdesc_type_p, other.types, ix);
371 if (type != type2 && *type != *type2)
378 bool operator!= (const tdesc_feature &other) const
380 return !(*this == other);
384 DEF_VEC_P(tdesc_feature_p);
386 /* A compatible architecture from a target description. */
387 typedef const struct bfd_arch_info *arch_p;
390 /* A target description. */
392 struct target_desc : tdesc_element
397 virtual ~target_desc ()
399 struct tdesc_feature *feature;
400 struct property *prop;
404 VEC_iterate (tdesc_feature_p, features, ix, feature);
407 VEC_free (tdesc_feature_p, features);
410 VEC_iterate (property_s, properties, ix, prop);
417 VEC_free (property_s, properties);
418 VEC_free (arch_p, compatible);
421 target_desc (const target_desc &) = delete;
422 void operator= (const target_desc &) = delete;
424 /* The architecture reported by the target, if any. */
425 const struct bfd_arch_info *arch = NULL;
427 /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN
429 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
431 /* The list of compatible architectures reported by the target. */
432 VEC(arch_p) *compatible = NULL;
434 /* Any architecture-specific properties specified by the target. */
435 VEC(property_s) *properties = NULL;
437 /* The features associated with this target. */
438 VEC(tdesc_feature_p) *features = NULL;
440 void accept (tdesc_element_visitor &v) const override
444 struct tdesc_feature *feature;
447 VEC_iterate (tdesc_feature_p, features, ix, feature);
454 bool operator== (const target_desc &other) const
456 if (arch != other.arch)
459 if (osabi != other.osabi)
462 if (VEC_length (tdesc_feature_p, features)
463 != VEC_length (tdesc_feature_p, other.features))
466 struct tdesc_feature *feature;
469 VEC_iterate (tdesc_feature_p, features, ix, feature);
472 struct tdesc_feature *feature2
473 = VEC_index (tdesc_feature_p, other.features, ix);
475 if (feature != feature2 && *feature != *feature2)
482 bool operator!= (const target_desc &other) const
484 return !(*this == other);
488 /* Per-architecture data associated with a target description. The
489 target description may be shared by multiple architectures, but
490 this data is private to one gdbarch. */
492 typedef struct tdesc_arch_reg
494 struct tdesc_reg *reg;
497 DEF_VEC_O(tdesc_arch_reg);
499 struct tdesc_arch_data
501 /* A list of register/type pairs, indexed by GDB's internal register number.
502 During initialization of the gdbarch this list is used to store
503 registers which the architecture assigns a fixed register number.
504 Registers which are NULL in this array, or off the end, are
505 treated as zero-sized and nameless (i.e. placeholders in the
507 VEC(tdesc_arch_reg) *arch_regs;
509 /* Functions which report the register name, type, and reggroups for
511 gdbarch_register_name_ftype *pseudo_register_name;
512 gdbarch_register_type_ftype *pseudo_register_type;
513 gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p;
516 /* Info about an inferior's target description. There's one of these
517 for each inferior. */
519 struct target_desc_info
521 /* A flag indicating that a description has already been fetched
522 from the target, so it should not be queried again. */
526 /* The description fetched from the target, or NULL if the target
527 did not supply any description. Only valid when
528 target_desc_fetched is set. Only the description initialization
529 code should access this; normally, the description should be
530 accessed through the gdbarch object. */
532 const struct target_desc *tdesc;
534 /* The filename to read a target description from, as set by "set
535 tdesc filename ..." */
540 /* Get the inferior INF's target description info, allocating one on
541 the stop if necessary. */
543 static struct target_desc_info *
544 get_tdesc_info (struct inferior *inf)
546 if (inf->tdesc_info == NULL)
547 inf->tdesc_info = XCNEW (struct target_desc_info);
548 return inf->tdesc_info;
551 /* A handle for architecture-specific data associated with the
552 target description (see struct tdesc_arch_data). */
554 static struct gdbarch_data *tdesc_data;
556 /* See target-descriptions.h. */
559 target_desc_info_from_user_p (struct target_desc_info *info)
561 return info != NULL && info->filename != NULL;
564 /* See target-descriptions.h. */
567 copy_inferior_target_desc_info (struct inferior *destinf, struct inferior *srcinf)
569 struct target_desc_info *src = get_tdesc_info (srcinf);
570 struct target_desc_info *dest = get_tdesc_info (destinf);
572 dest->fetched = src->fetched;
573 dest->tdesc = src->tdesc;
574 dest->filename = src->filename != NULL ? xstrdup (src->filename) : NULL;
577 /* See target-descriptions.h. */
580 target_desc_info_free (struct target_desc_info *tdesc_info)
582 if (tdesc_info != NULL)
584 xfree (tdesc_info->filename);
589 /* Convenience helper macros. */
591 #define target_desc_fetched \
592 get_tdesc_info (current_inferior ())->fetched
593 #define current_target_desc \
594 get_tdesc_info (current_inferior ())->tdesc
595 #define target_description_filename \
596 get_tdesc_info (current_inferior ())->filename
598 /* The string manipulated by the "set tdesc filename ..." command. */
600 static char *tdesc_filename_cmd_string;
602 /* Fetch the current target's description, and switch the current
603 architecture to one which incorporates that description. */
606 target_find_description (void)
608 /* If we've already fetched a description from the target, don't do
609 it again. This allows a target to fetch the description early,
610 during its to_open or to_create_inferior, if it needs extra
611 information about the target to initialize. */
612 if (target_desc_fetched)
615 /* The current architecture should not have any target description
616 specified. It should have been cleared, e.g. when we
617 disconnected from the previous target. */
618 gdb_assert (gdbarch_target_desc (target_gdbarch ()) == NULL);
620 /* First try to fetch an XML description from the user-specified
622 current_target_desc = NULL;
623 if (target_description_filename != NULL
624 && *target_description_filename != '\0')
626 = file_read_description_xml (target_description_filename);
628 /* Next try to read the description from the current target using
630 if (current_target_desc == NULL)
631 current_target_desc = target_read_description_xml (¤t_target);
633 /* If that failed try a target-specific hook. */
634 if (current_target_desc == NULL)
635 current_target_desc = target_read_description (¤t_target);
637 /* If a non-NULL description was returned, then update the current
639 if (current_target_desc)
641 struct gdbarch_info info;
643 gdbarch_info_init (&info);
644 info.target_desc = current_target_desc;
645 if (!gdbarch_update_p (info))
646 warning (_("Architecture rejected target-supplied description"));
649 struct tdesc_arch_data *data;
651 data = ((struct tdesc_arch_data *)
652 gdbarch_data (target_gdbarch (), tdesc_data));
653 if (tdesc_has_registers (current_target_desc)
654 && data->arch_regs == NULL)
655 warning (_("Target-supplied registers are not supported "
656 "by the current architecture"));
660 /* Now that we know this description is usable, record that we
662 target_desc_fetched = 1;
665 /* Discard any description fetched from the current target, and switch
666 the current architecture to one with no target description. */
669 target_clear_description (void)
671 struct gdbarch_info info;
673 if (!target_desc_fetched)
676 target_desc_fetched = 0;
677 current_target_desc = NULL;
679 gdbarch_info_init (&info);
680 if (!gdbarch_update_p (info))
681 internal_error (__FILE__, __LINE__,
682 _("Could not remove target-supplied description"));
685 /* Return the global current target description. This should only be
686 used by gdbarch initialization code; most access should be through
687 an existing gdbarch. */
689 const struct target_desc *
690 target_current_description (void)
692 if (target_desc_fetched)
693 return current_target_desc;
698 /* Return non-zero if this target description is compatible
699 with the given BFD architecture. */
702 tdesc_compatible_p (const struct target_desc *target_desc,
703 const struct bfd_arch_info *arch)
705 const struct bfd_arch_info *compat;
708 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
712 || arch->compatible (arch, compat)
713 || compat->compatible (compat, arch))
721 /* Direct accessors for target descriptions. */
723 /* Return the string value of a property named KEY, or NULL if the
724 property was not specified. */
727 tdesc_property (const struct target_desc *target_desc, const char *key)
729 struct property *prop;
732 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
734 if (strcmp (prop->key, key) == 0)
740 /* Return the BFD architecture associated with this target
741 description, or NULL if no architecture was specified. */
743 const struct bfd_arch_info *
744 tdesc_architecture (const struct target_desc *target_desc)
746 return target_desc->arch;
749 /* Return the OSABI associated with this target description, or
750 GDB_OSABI_UNKNOWN if no osabi was specified. */
753 tdesc_osabi (const struct target_desc *target_desc)
755 return target_desc->osabi;
760 /* Return 1 if this target description includes any registers. */
763 tdesc_has_registers (const struct target_desc *target_desc)
766 struct tdesc_feature *feature;
768 if (target_desc == NULL)
772 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
774 if (! VEC_empty (tdesc_reg_p, feature->registers))
780 /* Return the feature with the given name, if present, or NULL if
781 the named feature is not found. */
783 const struct tdesc_feature *
784 tdesc_find_feature (const struct target_desc *target_desc,
788 struct tdesc_feature *feature;
791 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
793 if (strcmp (feature->name, name) == 0)
799 /* Return the name of FEATURE. */
802 tdesc_feature_name (const struct tdesc_feature *feature)
804 return feature->name;
807 /* Predefined types. */
808 static struct tdesc_type tdesc_predefined_types[] =
810 { "bool", TDESC_TYPE_BOOL },
811 { "int8", TDESC_TYPE_INT8 },
812 { "int16", TDESC_TYPE_INT16 },
813 { "int32", TDESC_TYPE_INT32 },
814 { "int64", TDESC_TYPE_INT64 },
815 { "int128", TDESC_TYPE_INT128 },
816 { "uint8", TDESC_TYPE_UINT8 },
817 { "uint16", TDESC_TYPE_UINT16 },
818 { "uint32", TDESC_TYPE_UINT32 },
819 { "uint64", TDESC_TYPE_UINT64 },
820 { "uint128", TDESC_TYPE_UINT128 },
821 { "code_ptr", TDESC_TYPE_CODE_PTR },
822 { "data_ptr", TDESC_TYPE_DATA_PTR },
823 { "ieee_single", TDESC_TYPE_IEEE_SINGLE },
824 { "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
825 { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT },
826 { "i387_ext", TDESC_TYPE_I387_EXT }
829 /* Lookup a predefined type. */
831 static struct tdesc_type *
832 tdesc_predefined_type (enum tdesc_type_kind kind)
835 struct tdesc_type *type;
837 for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
838 if (tdesc_predefined_types[ix].kind == kind)
839 return &tdesc_predefined_types[ix];
841 gdb_assert_not_reached ("bad predefined tdesc type");
844 /* See arch/tdesc.h. */
847 tdesc_named_type (const struct tdesc_feature *feature, const char *id)
850 struct tdesc_type *type;
852 /* First try target-defined types. */
853 for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++)
854 if (strcmp (type->name, id) == 0)
857 /* Next try the predefined types. */
858 for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
859 if (strcmp (tdesc_predefined_types[ix].name, id) == 0)
860 return &tdesc_predefined_types[ix];
865 /* Lookup type associated with ID. */
868 tdesc_find_type (struct gdbarch *gdbarch, const char *id)
870 struct tdesc_arch_reg *reg;
871 struct tdesc_arch_data *data;
874 data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
875 num_regs = VEC_length (tdesc_arch_reg, data->arch_regs);
876 for (i = 0; i < num_regs; i++)
878 reg = VEC_index (tdesc_arch_reg, data->arch_regs, i);
880 && reg->reg->tdesc_type
882 && strcmp (id, reg->reg->tdesc_type->name) == 0)
889 /* Construct, if necessary, and return the GDB type implementing target
890 type TDESC_TYPE for architecture GDBARCH. */
893 tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type)
897 switch (tdesc_type->kind)
899 /* Predefined types. */
900 case TDESC_TYPE_BOOL:
901 return builtin_type (gdbarch)->builtin_bool;
903 case TDESC_TYPE_INT8:
904 return builtin_type (gdbarch)->builtin_int8;
906 case TDESC_TYPE_INT16:
907 return builtin_type (gdbarch)->builtin_int16;
909 case TDESC_TYPE_INT32:
910 return builtin_type (gdbarch)->builtin_int32;
912 case TDESC_TYPE_INT64:
913 return builtin_type (gdbarch)->builtin_int64;
915 case TDESC_TYPE_INT128:
916 return builtin_type (gdbarch)->builtin_int128;
918 case TDESC_TYPE_UINT8:
919 return builtin_type (gdbarch)->builtin_uint8;
921 case TDESC_TYPE_UINT16:
922 return builtin_type (gdbarch)->builtin_uint16;
924 case TDESC_TYPE_UINT32:
925 return builtin_type (gdbarch)->builtin_uint32;
927 case TDESC_TYPE_UINT64:
928 return builtin_type (gdbarch)->builtin_uint64;
930 case TDESC_TYPE_UINT128:
931 return builtin_type (gdbarch)->builtin_uint128;
933 case TDESC_TYPE_CODE_PTR:
934 return builtin_type (gdbarch)->builtin_func_ptr;
936 case TDESC_TYPE_DATA_PTR:
937 return builtin_type (gdbarch)->builtin_data_ptr;
943 type = tdesc_find_type (gdbarch, tdesc_type->name);
947 switch (tdesc_type->kind)
949 case TDESC_TYPE_IEEE_SINGLE:
950 return arch_float_type (gdbarch, -1, "builtin_type_ieee_single",
951 floatformats_ieee_single);
953 case TDESC_TYPE_IEEE_DOUBLE:
954 return arch_float_type (gdbarch, -1, "builtin_type_ieee_double",
955 floatformats_ieee_double);
957 case TDESC_TYPE_ARM_FPA_EXT:
958 return arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
959 floatformats_arm_ext);
961 case TDESC_TYPE_I387_EXT:
962 return arch_float_type (gdbarch, -1, "builtin_type_i387_ext",
963 floatformats_i387_ext);
965 /* Types defined by a target feature. */
966 case TDESC_TYPE_VECTOR:
968 struct type *type, *field_type;
970 field_type = tdesc_gdb_type (gdbarch, tdesc_type->u.v.type);
971 type = init_vector_type (field_type, tdesc_type->u.v.count);
972 TYPE_NAME (type) = xstrdup (tdesc_type->name);
977 case TDESC_TYPE_STRUCT:
979 struct type *type, *field_type;
980 struct tdesc_type_field *f;
983 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
984 TYPE_NAME (type) = xstrdup (tdesc_type->name);
985 TYPE_TAG_NAME (type) = TYPE_NAME (type);
988 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
991 if (f->start != -1 && f->end != -1)
995 struct type *field_type;
996 int bitsize, total_size;
998 /* This invariant should be preserved while creating types. */
999 gdb_assert (tdesc_type->u.u.size != 0);
1000 if (f->type != NULL)
1001 field_type = tdesc_gdb_type (gdbarch, f->type);
1002 else if (tdesc_type->u.u.size > 4)
1003 field_type = builtin_type (gdbarch)->builtin_uint64;
1005 field_type = builtin_type (gdbarch)->builtin_uint32;
1007 fld = append_composite_type_field_raw (type, xstrdup (f->name),
1010 /* For little-endian, BITPOS counts from the LSB of
1011 the structure and marks the LSB of the field. For
1012 big-endian, BITPOS counts from the MSB of the
1013 structure and marks the MSB of the field. Either
1014 way, it is the number of bits to the "left" of the
1015 field. To calculate this in big-endian, we need
1016 the total size of the structure. */
1017 bitsize = f->end - f->start + 1;
1018 total_size = tdesc_type->u.u.size * TARGET_CHAR_BIT;
1019 if (gdbarch_bits_big_endian (gdbarch))
1020 SET_FIELD_BITPOS (fld[0], total_size - f->start - bitsize);
1022 SET_FIELD_BITPOS (fld[0], f->start);
1023 FIELD_BITSIZE (fld[0]) = bitsize;
1027 gdb_assert (f->start == -1 && f->end == -1);
1028 field_type = tdesc_gdb_type (gdbarch, f->type);
1029 append_composite_type_field (type, xstrdup (f->name),
1034 if (tdesc_type->u.u.size != 0)
1035 TYPE_LENGTH (type) = tdesc_type->u.u.size;
1039 case TDESC_TYPE_UNION:
1041 struct type *type, *field_type;
1042 struct tdesc_type_field *f;
1045 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
1046 TYPE_NAME (type) = xstrdup (tdesc_type->name);
1049 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1052 field_type = tdesc_gdb_type (gdbarch, f->type);
1053 append_composite_type_field (type, xstrdup (f->name), field_type);
1055 /* If any of the children of a union are vectors, flag the
1056 union as a vector also. This allows e.g. a union of two
1057 vector types to show up automatically in "info vector". */
1058 if (TYPE_VECTOR (field_type))
1059 TYPE_VECTOR (type) = 1;
1064 case TDESC_TYPE_FLAGS:
1066 struct tdesc_type_field *f;
1069 type = arch_flags_type (gdbarch, tdesc_type->name,
1070 tdesc_type->u.u.size);
1072 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1075 struct type *field_type;
1076 int bitsize = f->end - f->start + 1;
1078 gdb_assert (f->type != NULL);
1079 field_type = tdesc_gdb_type (gdbarch, f->type);
1080 append_flags_type_field (type, f->start, bitsize,
1081 field_type, f->name);
1087 case TDESC_TYPE_ENUM:
1089 struct tdesc_type_field *f;
1092 type = arch_type (gdbarch, TYPE_CODE_ENUM,
1093 tdesc_type->u.u.size, tdesc_type->name);
1094 TYPE_UNSIGNED (type) = 1;
1096 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1100 = append_composite_type_field_raw (type, xstrdup (f->name),
1103 SET_FIELD_BITPOS (fld[0], f->start);
1110 internal_error (__FILE__, __LINE__,
1111 "Type \"%s\" has an unknown kind %d",
1112 tdesc_type->name, tdesc_type->kind);
1116 /* Support for registers from target descriptions. */
1118 /* Construct the per-gdbarch data. */
1121 tdesc_data_init (struct obstack *obstack)
1123 struct tdesc_arch_data *data;
1125 data = OBSTACK_ZALLOC (obstack, struct tdesc_arch_data);
1129 /* Similar, but for the temporary copy used during architecture
1132 struct tdesc_arch_data *
1133 tdesc_data_alloc (void)
1135 return XCNEW (struct tdesc_arch_data);
1138 /* Free something allocated by tdesc_data_alloc, if it is not going
1139 to be used (for instance if it was unsuitable for the
1143 tdesc_data_cleanup (void *data_untyped)
1145 struct tdesc_arch_data *data = (struct tdesc_arch_data *) data_untyped;
1147 VEC_free (tdesc_arch_reg, data->arch_regs);
1151 /* Search FEATURE for a register named NAME. */
1153 static struct tdesc_reg *
1154 tdesc_find_register_early (const struct tdesc_feature *feature,
1158 struct tdesc_reg *reg;
1161 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1163 if (strcasecmp (reg->name, name) == 0)
1169 /* Search FEATURE for a register named NAME. Assign REGNO to it. */
1172 tdesc_numbered_register (const struct tdesc_feature *feature,
1173 struct tdesc_arch_data *data,
1174 int regno, const char *name)
1176 struct tdesc_arch_reg arch_reg = { 0 };
1177 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1182 /* Make sure the vector includes a REGNO'th element. */
1183 while (regno >= VEC_length (tdesc_arch_reg, data->arch_regs))
1184 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &arch_reg);
1187 VEC_replace (tdesc_arch_reg, data->arch_regs, regno, &arch_reg);
1191 /* Search FEATURE for a register named NAME, but do not assign a fixed
1192 register number to it. */
1195 tdesc_unnumbered_register (const struct tdesc_feature *feature,
1198 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1206 /* Search FEATURE for a register whose name is in NAMES and assign
1210 tdesc_numbered_register_choices (const struct tdesc_feature *feature,
1211 struct tdesc_arch_data *data,
1212 int regno, const char *const names[])
1216 for (i = 0; names[i] != NULL; i++)
1217 if (tdesc_numbered_register (feature, data, regno, names[i]))
1223 /* Search FEATURE for a register named NAME, and return its size in
1224 bits. The register must exist. */
1227 tdesc_register_size (const struct tdesc_feature *feature,
1230 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1232 gdb_assert (reg != NULL);
1233 return reg->bitsize;
1236 /* Look up a register by its GDB internal register number. */
1238 static struct tdesc_arch_reg *
1239 tdesc_find_arch_register (struct gdbarch *gdbarch, int regno)
1241 struct tdesc_arch_data *data;
1243 data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1244 if (regno < VEC_length (tdesc_arch_reg, data->arch_regs))
1245 return VEC_index (tdesc_arch_reg, data->arch_regs, regno);
1250 static struct tdesc_reg *
1251 tdesc_find_register (struct gdbarch *gdbarch, int regno)
1253 struct tdesc_arch_reg *reg = tdesc_find_arch_register (gdbarch, regno);
1255 return reg? reg->reg : NULL;
1258 /* Return the name of register REGNO, from the target description or
1259 from an architecture-provided pseudo_register_name method. */
1262 tdesc_register_name (struct gdbarch *gdbarch, int regno)
1264 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1265 int num_regs = gdbarch_num_regs (gdbarch);
1266 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1271 if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
1273 struct tdesc_arch_data *data
1274 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1276 gdb_assert (data->pseudo_register_name != NULL);
1277 return data->pseudo_register_name (gdbarch, regno);
1284 tdesc_register_type (struct gdbarch *gdbarch, int regno)
1286 struct tdesc_arch_reg *arch_reg = tdesc_find_arch_register (gdbarch, regno);
1287 struct tdesc_reg *reg = arch_reg? arch_reg->reg : NULL;
1288 int num_regs = gdbarch_num_regs (gdbarch);
1289 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1291 if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs)
1293 struct tdesc_arch_data *data
1294 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1296 gdb_assert (data->pseudo_register_type != NULL);
1297 return data->pseudo_register_type (gdbarch, regno);
1301 /* Return "int0_t", since "void" has a misleading size of one. */
1302 return builtin_type (gdbarch)->builtin_int0;
1304 if (arch_reg->type == NULL)
1306 /* First check for a predefined or target defined type. */
1307 if (reg->tdesc_type)
1308 arch_reg->type = tdesc_gdb_type (gdbarch, reg->tdesc_type);
1310 /* Next try size-sensitive type shortcuts. */
1311 else if (strcmp (reg->type, "float") == 0)
1313 if (reg->bitsize == gdbarch_float_bit (gdbarch))
1314 arch_reg->type = builtin_type (gdbarch)->builtin_float;
1315 else if (reg->bitsize == gdbarch_double_bit (gdbarch))
1316 arch_reg->type = builtin_type (gdbarch)->builtin_double;
1317 else if (reg->bitsize == gdbarch_long_double_bit (gdbarch))
1318 arch_reg->type = builtin_type (gdbarch)->builtin_long_double;
1321 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
1322 reg->name, reg->bitsize);
1323 arch_reg->type = builtin_type (gdbarch)->builtin_double;
1326 else if (strcmp (reg->type, "int") == 0)
1328 if (reg->bitsize == gdbarch_long_bit (gdbarch))
1329 arch_reg->type = builtin_type (gdbarch)->builtin_long;
1330 else if (reg->bitsize == TARGET_CHAR_BIT)
1331 arch_reg->type = builtin_type (gdbarch)->builtin_char;
1332 else if (reg->bitsize == gdbarch_short_bit (gdbarch))
1333 arch_reg->type = builtin_type (gdbarch)->builtin_short;
1334 else if (reg->bitsize == gdbarch_int_bit (gdbarch))
1335 arch_reg->type = builtin_type (gdbarch)->builtin_int;
1336 else if (reg->bitsize == gdbarch_long_long_bit (gdbarch))
1337 arch_reg->type = builtin_type (gdbarch)->builtin_long_long;
1338 else if (reg->bitsize == gdbarch_ptr_bit (gdbarch))
1339 /* A bit desperate by this point... */
1340 arch_reg->type = builtin_type (gdbarch)->builtin_data_ptr;
1343 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
1344 reg->name, reg->bitsize);
1345 arch_reg->type = builtin_type (gdbarch)->builtin_long;
1349 if (arch_reg->type == NULL)
1350 internal_error (__FILE__, __LINE__,
1351 "Register \"%s\" has an unknown type \"%s\"",
1352 reg->name, reg->type);
1355 return arch_reg->type;
1359 tdesc_remote_register_number (struct gdbarch *gdbarch, int regno)
1361 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1364 return reg->target_regnum;
1369 /* Check whether REGNUM is a member of REGGROUP. Registers from the
1370 target description may be classified as general, float, or vector.
1371 Unlike a gdbarch register_reggroup_p method, this function will
1372 return -1 if it does not know; the caller should handle registers
1373 with no specified group.
1375 Arbitrary strings (other than "general", "float", and "vector")
1376 from the description are not used; they cause the register to be
1377 displayed in "info all-registers" but excluded from "info
1378 registers" et al. The names of containing features are also not
1379 used. This might be extended to display registers in some more
1382 The save-restore flag is also implemented here. */
1385 tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
1386 struct reggroup *reggroup)
1388 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1390 if (reg != NULL && reg->group != NULL)
1392 int general_p = 0, float_p = 0, vector_p = 0;
1394 if (strcmp (reg->group, "general") == 0)
1396 else if (strcmp (reg->group, "float") == 0)
1398 else if (strcmp (reg->group, "vector") == 0)
1401 if (reggroup == float_reggroup)
1404 if (reggroup == vector_reggroup)
1407 if (reggroup == general_reggroup)
1412 && (reggroup == save_reggroup || reggroup == restore_reggroup))
1413 return reg->save_restore;
1418 /* Check whether REGNUM is a member of REGGROUP. Registers with no
1419 group specified go to the default reggroup function and are handled
1423 tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
1424 struct reggroup *reggroup)
1426 int num_regs = gdbarch_num_regs (gdbarch);
1427 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1430 if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
1432 struct tdesc_arch_data *data
1433 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1435 if (data->pseudo_register_reggroup_p != NULL)
1436 return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup);
1437 /* Otherwise fall through to the default reggroup_p. */
1440 ret = tdesc_register_in_reggroup_p (gdbarch, regno, reggroup);
1444 return default_register_reggroup_p (gdbarch, regno, reggroup);
1447 /* Record architecture-specific functions to call for pseudo-register
1451 set_tdesc_pseudo_register_name (struct gdbarch *gdbarch,
1452 gdbarch_register_name_ftype *pseudo_name)
1454 struct tdesc_arch_data *data
1455 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1457 data->pseudo_register_name = pseudo_name;
1461 set_tdesc_pseudo_register_type (struct gdbarch *gdbarch,
1462 gdbarch_register_type_ftype *pseudo_type)
1464 struct tdesc_arch_data *data
1465 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1467 data->pseudo_register_type = pseudo_type;
1471 set_tdesc_pseudo_register_reggroup_p
1472 (struct gdbarch *gdbarch,
1473 gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
1475 struct tdesc_arch_data *data
1476 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1478 data->pseudo_register_reggroup_p = pseudo_reggroup_p;
1481 /* Update GDBARCH to use the target description for registers. */
1484 tdesc_use_registers (struct gdbarch *gdbarch,
1485 const struct target_desc *target_desc,
1486 struct tdesc_arch_data *early_data)
1488 int num_regs = gdbarch_num_regs (gdbarch);
1490 struct tdesc_feature *feature;
1491 struct tdesc_reg *reg;
1492 struct tdesc_arch_data *data;
1493 struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 };
1496 /* We can't use the description for registers if it doesn't describe
1497 any. This function should only be called after validating
1498 registers, so the caller should know that registers are
1500 gdb_assert (tdesc_has_registers (target_desc));
1502 data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1503 data->arch_regs = early_data->arch_regs;
1506 /* Build up a set of all registers, so that we can assign register
1507 numbers where needed. The hash table expands as necessary, so
1508 the initial size is arbitrary. */
1509 reg_hash = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1511 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
1514 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1517 void **slot = htab_find_slot (reg_hash, reg, INSERT);
1522 /* Remove any registers which were assigned numbers by the
1525 VEC_iterate (tdesc_arch_reg, data->arch_regs, ixr, arch_reg);
1528 htab_remove_elt (reg_hash, arch_reg->reg);
1530 /* Assign numbers to the remaining registers and add them to the
1531 list of registers. The new numbers are always above gdbarch_num_regs.
1532 Iterate over the features, not the hash table, so that the order
1533 matches that in the target description. */
1535 gdb_assert (VEC_length (tdesc_arch_reg, data->arch_regs) <= num_regs);
1536 while (VEC_length (tdesc_arch_reg, data->arch_regs) < num_regs)
1537 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
1539 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
1542 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1544 if (htab_find (reg_hash, reg) != NULL)
1546 new_arch_reg.reg = reg;
1547 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
1551 htab_delete (reg_hash);
1553 /* Update the architecture. */
1554 set_gdbarch_num_regs (gdbarch, num_regs);
1555 set_gdbarch_register_name (gdbarch, tdesc_register_name);
1556 set_gdbarch_register_type (gdbarch, tdesc_register_type);
1557 set_gdbarch_remote_register_number (gdbarch,
1558 tdesc_remote_register_number);
1559 set_gdbarch_register_reggroup_p (gdbarch, tdesc_register_reggroup_p);
1563 /* See arch/tdesc.h. */
1566 tdesc_create_reg (struct tdesc_feature *feature, const char *name,
1567 int regnum, int save_restore, const char *group,
1568 int bitsize, const char *type)
1570 tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore,
1571 group, bitsize, type);
1573 VEC_safe_push (tdesc_reg_p, feature->registers, reg);
1576 /* See arch/tdesc.h. */
1579 tdesc_create_vector (struct tdesc_feature *feature, const char *name,
1580 struct tdesc_type *field_type, int count)
1582 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_VECTOR);
1584 type->u.v.type = field_type;
1585 type->u.v.count = count;
1587 VEC_safe_push (tdesc_type_p, feature->types, type);
1591 /* See arch/tdesc.h. */
1594 tdesc_create_struct (struct tdesc_feature *feature, const char *name)
1596 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_STRUCT);
1598 VEC_safe_push (tdesc_type_p, feature->types, type);
1602 /* See arch/tdesc.h. */
1605 tdesc_set_struct_size (struct tdesc_type *type, int size)
1607 gdb_assert (type->kind == TDESC_TYPE_STRUCT);
1608 gdb_assert (size > 0);
1609 type->u.u.size = size;
1612 /* See arch/tdesc.h. */
1615 tdesc_create_union (struct tdesc_feature *feature, const char *name)
1617 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_UNION);
1619 VEC_safe_push (tdesc_type_p, feature->types, type);
1623 /* See arch/tdesc.h. */
1626 tdesc_create_flags (struct tdesc_feature *feature, const char *name,
1629 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_FLAGS);
1631 gdb_assert (size > 0);
1633 type->u.u.size = size;
1635 VEC_safe_push (tdesc_type_p, feature->types, type);
1640 tdesc_create_enum (struct tdesc_feature *feature, const char *name,
1643 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_ENUM);
1645 gdb_assert (size > 0);
1647 type->u.u.size = size;
1649 VEC_safe_push (tdesc_type_p, feature->types, type);
1653 /* See arch/tdesc.h. */
1656 tdesc_add_field (struct tdesc_type *type, const char *field_name,
1657 struct tdesc_type *field_type)
1659 struct tdesc_type_field f = { 0 };
1661 gdb_assert (type->kind == TDESC_TYPE_UNION
1662 || type->kind == TDESC_TYPE_STRUCT);
1664 f.name = xstrdup (field_name);
1665 f.type = field_type;
1666 /* Initialize these values so we know this is not a bit-field
1667 when we print-c-tdesc. */
1671 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1675 tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name,
1676 int start, int end, struct tdesc_type *field_type)
1678 struct tdesc_type_field f = { 0 };
1680 gdb_assert (type->kind == TDESC_TYPE_STRUCT
1681 || type->kind == TDESC_TYPE_FLAGS);
1682 gdb_assert (start >= 0 && end >= start);
1684 f.name = xstrdup (field_name);
1687 f.type = field_type;
1689 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1692 /* See arch/tdesc.h. */
1695 tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
1698 struct tdesc_type *field_type;
1700 gdb_assert (start >= 0 && end >= start);
1702 if (type->u.u.size > 4)
1703 field_type = tdesc_predefined_type (TDESC_TYPE_UINT64);
1705 field_type = tdesc_predefined_type (TDESC_TYPE_UINT32);
1707 tdesc_add_typed_bitfield (type, field_name, start, end, field_type);
1710 /* See arch/tdesc.h. */
1713 tdesc_add_flag (struct tdesc_type *type, int start,
1714 const char *flag_name)
1716 struct tdesc_type_field f = { 0 };
1718 gdb_assert (type->kind == TDESC_TYPE_FLAGS
1719 || type->kind == TDESC_TYPE_STRUCT);
1721 f.name = xstrdup (flag_name);
1724 f.type = tdesc_predefined_type (TDESC_TYPE_BOOL);
1726 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1730 tdesc_add_enum_value (struct tdesc_type *type, int value,
1733 struct tdesc_type_field f = { 0 };
1735 gdb_assert (type->kind == TDESC_TYPE_ENUM);
1737 f.name = xstrdup (name);
1740 f.type = tdesc_predefined_type (TDESC_TYPE_INT32);
1742 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1745 /* See arch/tdesc.h. */
1747 struct tdesc_feature *
1748 tdesc_create_feature (struct target_desc *tdesc, const char *name,
1751 struct tdesc_feature *new_feature = new tdesc_feature (name);
1753 VEC_safe_push (tdesc_feature_p, tdesc->features, new_feature);
1757 struct target_desc *
1758 allocate_target_description (void)
1760 return new target_desc ();
1764 free_target_description (void *arg)
1766 struct target_desc *target_desc = (struct target_desc *) arg;
1772 make_cleanup_free_target_description (struct target_desc *target_desc)
1774 return make_cleanup (free_target_description, target_desc);
1778 tdesc_add_compatible (struct target_desc *target_desc,
1779 const struct bfd_arch_info *compatible)
1781 const struct bfd_arch_info *compat;
1784 /* If this instance of GDB is compiled without BFD support for the
1785 compatible architecture, simply ignore it -- we would not be able
1786 to handle it anyway. */
1787 if (compatible == NULL)
1790 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
1792 if (compat == compatible)
1793 internal_error (__FILE__, __LINE__,
1794 _("Attempted to add duplicate "
1795 "compatible architecture \"%s\""),
1796 compatible->printable_name);
1798 VEC_safe_push (arch_p, target_desc->compatible, compatible);
1802 set_tdesc_property (struct target_desc *target_desc,
1803 const char *key, const char *value)
1805 struct property *prop, new_prop;
1808 gdb_assert (key != NULL && value != NULL);
1810 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
1812 if (strcmp (prop->key, key) == 0)
1813 internal_error (__FILE__, __LINE__,
1814 _("Attempted to add duplicate property \"%s\""), key);
1816 new_prop.key = xstrdup (key);
1817 new_prop.value = xstrdup (value);
1818 VEC_safe_push (property_s, target_desc->properties, &new_prop);
1821 /* See arch/tdesc.h. */
1824 set_tdesc_architecture (struct target_desc *target_desc,
1827 set_tdesc_architecture (target_desc, bfd_scan_arch (name));
1831 set_tdesc_architecture (struct target_desc *target_desc,
1832 const struct bfd_arch_info *arch)
1834 target_desc->arch = arch;
1837 /* See arch/tdesc.h. */
1840 set_tdesc_osabi (struct target_desc *target_desc, const char *name)
1842 set_tdesc_osabi (target_desc, osabi_from_tdesc_string (name));
1846 set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
1848 target_desc->osabi = osabi;
1852 static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
1853 static struct cmd_list_element *tdesc_unset_cmdlist;
1855 /* Helper functions for the CLI commands. */
1858 set_tdesc_cmd (char *args, int from_tty)
1860 help_list (tdesc_set_cmdlist, "set tdesc ", all_commands, gdb_stdout);
1864 show_tdesc_cmd (char *args, int from_tty)
1866 cmd_show_list (tdesc_show_cmdlist, from_tty, "");
1870 unset_tdesc_cmd (char *args, int from_tty)
1872 help_list (tdesc_unset_cmdlist, "unset tdesc ", all_commands, gdb_stdout);
1876 set_tdesc_filename_cmd (char *args, int from_tty,
1877 struct cmd_list_element *c)
1879 xfree (target_description_filename);
1880 target_description_filename = xstrdup (tdesc_filename_cmd_string);
1882 target_clear_description ();
1883 target_find_description ();
1887 show_tdesc_filename_cmd (struct ui_file *file, int from_tty,
1888 struct cmd_list_element *c,
1891 value = target_description_filename;
1893 if (value != NULL && *value != '\0')
1894 printf_filtered (_("The target description will be read from \"%s\".\n"),
1897 printf_filtered (_("The target description will be "
1898 "read from the target.\n"));
1902 unset_tdesc_filename_cmd (const char *args, int from_tty)
1904 xfree (target_description_filename);
1905 target_description_filename = NULL;
1906 target_clear_description ();
1907 target_find_description ();
1910 /* Print target description in C. */
1912 class print_c_tdesc : public tdesc_element_visitor
1915 print_c_tdesc (std::string &filename_after_features)
1916 : m_filename_after_features (filename_after_features)
1920 const char *filename = lbasename (m_filename_after_features.c_str ());
1922 m_function = (char *) xmalloc (strlen (filename) + 1);
1923 for (inp = filename, outp = m_function; *inp != '\0'; inp++)
1926 else if (*inp == '-')
1932 /* Standard boilerplate. */
1933 printf_unfiltered ("/* THIS FILE IS GENERATED. "
1934 "-*- buffer-read-only: t -*- vi"
1943 void visit_pre (const target_desc *e) override
1945 printf_unfiltered (" Original: %s */\n\n",
1946 lbasename (m_filename_after_features.c_str ()));
1948 printf_unfiltered ("#include \"defs.h\"\n");
1949 printf_unfiltered ("#include \"osabi.h\"\n");
1950 printf_unfiltered ("#include \"target-descriptions.h\"\n");
1951 printf_unfiltered ("\n");
1953 printf_unfiltered ("struct target_desc *tdesc_%s;\n", m_function);
1954 printf_unfiltered ("static void\n");
1955 printf_unfiltered ("initialize_tdesc_%s (void)\n", m_function);
1956 printf_unfiltered ("{\n");
1958 (" struct target_desc *result = allocate_target_description ();\n");
1960 if (tdesc_architecture (e) != NULL)
1963 (" set_tdesc_architecture (result, bfd_scan_arch (\"%s\"));\n",
1964 tdesc_architecture (e)->printable_name);
1965 printf_unfiltered ("\n");
1967 if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN
1968 && tdesc_osabi (e) < GDB_OSABI_INVALID)
1971 (" set_tdesc_osabi (result, osabi_from_tdesc_string (\"%s\"));\n",
1972 gdbarch_osabi_name (tdesc_osabi (e)));
1973 printf_unfiltered ("\n");
1977 const struct bfd_arch_info *compatible;
1978 struct property *prop;
1980 for (ix = 0; VEC_iterate (arch_p, e->compatible, ix, compatible);
1984 (" tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n",
1985 compatible->printable_name);
1989 printf_unfiltered ("\n");
1991 for (ix = 0; VEC_iterate (property_s, e->properties, ix, prop);
1994 printf_unfiltered (" set_tdesc_property (result, \"%s\", \"%s\");\n",
1995 prop->key, prop->value);
1997 printf_unfiltered (" struct tdesc_feature *feature;\n");
2000 void visit_pre (const tdesc_feature *e) override
2002 printf_unfiltered ("\n feature = tdesc_create_feature (result, \"%s\");\n",
2006 void visit_post (const tdesc_feature *e) override
2009 void visit_post (const target_desc *e) override
2011 printf_unfiltered ("\n tdesc_%s = result;\n", m_function);
2012 printf_unfiltered ("}\n");
2015 void visit (const tdesc_type *type) override
2017 struct tdesc_type_field *f;
2019 /* Now we do some "filtering" in order to know which variables to
2020 declare. This is needed because otherwise we would declare unused
2021 variables `field_type' and `type'. */
2022 if (!m_printed_field_type)
2024 printf_unfiltered (" struct tdesc_type *field_type;\n");
2025 m_printed_field_type = true;
2028 if ((type->kind == TDESC_TYPE_UNION
2029 || type->kind == TDESC_TYPE_STRUCT
2030 || type->kind == TDESC_TYPE_FLAGS
2031 || type->kind == TDESC_TYPE_ENUM)
2032 && VEC_length (tdesc_type_field, type->u.u.fields) > 0
2035 printf_unfiltered (" struct tdesc_type *type;\n");
2036 m_printed_type = true;
2041 case TDESC_TYPE_VECTOR:
2043 (" field_type = tdesc_named_type (feature, \"%s\");\n",
2044 type->u.v.type->name);
2046 (" tdesc_create_vector (feature, \"%s\", field_type, %d);\n",
2047 type->name, type->u.v.count);
2049 case TDESC_TYPE_STRUCT:
2050 case TDESC_TYPE_FLAGS:
2051 if (type->kind == TDESC_TYPE_STRUCT)
2054 (" type = tdesc_create_struct (feature, \"%s\");\n",
2056 if (type->u.u.size != 0)
2058 (" tdesc_set_struct_size (type, %d);\n",
2064 (" type = tdesc_create_flags (feature, \"%s\", %d);\n",
2065 type->name, type->u.u.size);
2068 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2071 const char *type_name;
2073 gdb_assert (f->type != NULL);
2074 type_name = f->type->name;
2076 /* To minimize changes to generated files, don't emit type
2077 info for fields that have defaulted types. */
2080 gdb_assert (f->end != -1);
2081 if (f->type->kind == TDESC_TYPE_BOOL)
2083 gdb_assert (f->start == f->end);
2085 (" tdesc_add_flag (type, %d, \"%s\");\n",
2088 else if ((type->u.u.size == 4
2089 && f->type->kind == TDESC_TYPE_UINT32)
2090 || (type->u.u.size == 8
2091 && f->type->kind == TDESC_TYPE_UINT64))
2094 (" tdesc_add_bitfield (type, \"%s\", %d, %d);\n",
2095 f->name, f->start, f->end);
2100 (" field_type = tdesc_named_type (feature,"
2104 (" tdesc_add_typed_bitfield (type, \"%s\","
2105 " %d, %d, field_type);\n",
2106 f->name, f->start, f->end);
2109 else /* Not a bitfield. */
2111 gdb_assert (f->end == -1);
2112 gdb_assert (type->kind == TDESC_TYPE_STRUCT);
2114 (" field_type = tdesc_named_type (feature,"
2118 (" tdesc_add_field (type, \"%s\", field_type);\n",
2123 case TDESC_TYPE_UNION:
2125 (" type = tdesc_create_union (feature, \"%s\");\n",
2128 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2132 (" field_type = tdesc_named_type (feature, \"%s\");\n",
2135 (" tdesc_add_field (type, \"%s\", field_type);\n",
2139 case TDESC_TYPE_ENUM:
2141 (" type = tdesc_create_enum (feature, \"%s\", %d);\n",
2142 type->name, type->u.u.size);
2144 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2147 (" tdesc_add_enum_value (type, %d, \"%s\");\n",
2151 error (_("C output is not supported type \"%s\"."), type->name);
2153 printf_unfiltered ("\n");
2156 void visit (const tdesc_reg *reg) override
2158 printf_unfiltered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ",
2159 reg->name, reg->target_regnum, reg->save_restore);
2161 printf_unfiltered ("\"%s\", ", reg->group);
2163 printf_unfiltered ("NULL, ");
2164 printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type);
2168 std::string m_filename_after_features;
2172 bool m_printed_field_type = false;
2173 bool m_printed_type = false;
2176 /* Print target description feature in C. */
2178 class print_c_feature : public print_c_tdesc
2181 print_c_feature (std::string &file)
2182 : print_c_tdesc (file)
2185 auto const pos = m_filename_after_features.find_last_of ('.');
2187 m_filename_after_features = m_filename_after_features.substr (0, pos);
2190 void visit_pre (const target_desc *e) override
2192 printf_unfiltered (" Original: %s */\n\n",
2193 lbasename (m_filename_after_features.c_str ()));
2195 printf_unfiltered ("#include \"arch/tdesc.h\"\n");
2196 printf_unfiltered ("\n");
2199 void visit_post (const target_desc *e) override
2202 void visit_pre (const tdesc_feature *e) override
2204 std::string name (m_filename_after_features);
2206 auto pos = name.find_first_of ('.');
2208 name = name.substr (0, pos);
2209 std::replace (name.begin (), name.end (), '/', '_');
2210 std::replace (name.begin (), name.end (), '-', '_');
2212 printf_unfiltered ("static int\n");
2213 printf_unfiltered ("create_feature_%s ", name.c_str ());
2214 printf_unfiltered ("(struct target_desc *result, long regnum)\n");
2216 printf_unfiltered ("{\n");
2217 printf_unfiltered (" struct tdesc_feature *feature;\n");
2220 ("\n feature = tdesc_create_feature (result, \"%s\", \"%s\");\n",
2221 e->name, lbasename (m_filename_after_features.c_str ()));
2224 void visit_post (const tdesc_feature *e) override
2226 printf_unfiltered (" return regnum;\n");
2227 printf_unfiltered ("}\n");
2230 void visit (const tdesc_reg *reg) override
2232 /* Most "reg" in XML target descriptions don't have "regnum"
2233 attribute, so the register number is allocated sequentially.
2234 In case that reg has "regnum" attribute, register number
2235 should be set by that explicitly. */
2237 if (reg->target_regnum < m_next_regnum)
2239 /* The integrity check, it can catch some errors on register
2240 number collision, like this,
2242 <reg name="x0" bitsize="32"/>
2243 <reg name="x1" bitsize="32"/>
2244 <reg name="x2" bitsize="32"/>
2245 <reg name="x3" bitsize="32"/>
2246 <reg name="ps" bitsize="32" regnum="3"/>
2248 but it also has false negatives. The target description
2251 <reg name="x1" bitsize="32" regnum="1"/>
2252 <reg name="x3" bitsize="32" regnum="3"/>
2253 <reg name="x2" bitsize="32" regnum="2"/>
2254 <reg name="x4" bitsize="32" regnum="4"/>
2256 but it is not a good practice, so still error on this,
2257 and also print the message so that it can be saved in the
2258 generated c file. */
2260 printf_unfiltered ("ERROR: \"regnum\" attribute %ld ",
2261 reg->target_regnum);
2262 printf_unfiltered ("is not the largest number (%d).\n",
2264 error (_("\"regnum\" attribute %ld is not the largest number (%d)."),
2265 reg->target_regnum, m_next_regnum);
2268 if (reg->target_regnum > m_next_regnum)
2270 printf_unfiltered (" regnum = %ld;\n", reg->target_regnum);
2271 m_next_regnum = reg->target_regnum;
2274 printf_unfiltered (" tdesc_create_reg (feature, \"%s\", regnum++, %d, ",
2275 reg->name, reg->save_restore);
2277 printf_unfiltered ("\"%s\", ", reg->group);
2279 printf_unfiltered ("NULL, ");
2280 printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type);
2286 /* The register number to use for the next register we see. */
2287 int m_next_regnum = 0;
2291 maint_print_c_tdesc_cmd (const char *args, int from_tty)
2293 const struct target_desc *tdesc;
2294 const char *filename;
2298 /* Use the global target-supplied description, not the current
2299 architecture's. This lets a GDB for one architecture generate C
2300 for another architecture's description, even though the gdbarch
2301 initialization code will reject the new description. */
2302 tdesc = current_target_desc;
2303 filename = target_description_filename;
2307 /* Use the target description from the XML file. */
2309 tdesc = file_read_description_xml (filename);
2313 error (_("There is no target description to print."));
2315 if (filename == NULL)
2316 error (_("The current target description did not come from an XML file."));
2318 std::string filename_after_features (filename);
2319 auto loc = filename_after_features.rfind ("/features/");
2321 if (loc != std::string::npos)
2322 filename_after_features = filename_after_features.substr (loc + 10);
2324 /* Print c files for target features instead of target descriptions,
2325 because c files got from target features are more flexible than the
2327 if (startswith (filename_after_features.c_str (), "i386/32bit-")
2328 || startswith (filename_after_features.c_str (), "i386/64bit-")
2329 || startswith (filename_after_features.c_str (), "i386/x32-core.xml"))
2331 print_c_feature v (filename_after_features);
2337 print_c_tdesc v (filename_after_features);
2343 namespace selftests {
2345 static std::vector<std::pair<const char*, const target_desc *>> xml_tdesc;
2349 /* See target-descritpions.h. */
2352 record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc)
2354 xml_tdesc.emplace_back (xml_file, tdesc);
2360 /* Check that the target descriptions created dynamically by
2361 architecture-specific code equal the descriptions created from XML files
2362 found in the specified directory DIR. */
2365 maintenance_check_xml_descriptions (const char *dir, int from_tty)
2368 error (_("Missing dir name"));
2370 gdb::unique_xmalloc_ptr<char> dir1 (tilde_expand (dir));
2371 std::string feature_dir (dir1.get ());
2372 unsigned int failed = 0;
2374 for (auto const &e : selftests::xml_tdesc)
2376 std::string tdesc_xml = (feature_dir + SLASH_STRING + e.first);
2377 const target_desc *tdesc
2378 = file_read_description_xml (tdesc_xml.data ());
2380 if (tdesc == NULL || *tdesc != *e.second)
2383 printf_filtered (_("Tested %lu XML files, %d failed\n"),
2384 (long) selftests::xml_tdesc.size (), failed);
2388 _initialize_target_descriptions (void)
2390 tdesc_data = gdbarch_data_register_pre_init (tdesc_data_init);
2392 add_prefix_cmd ("tdesc", class_maintenance, set_tdesc_cmd, _("\
2393 Set target description specific variables."),
2394 &tdesc_set_cmdlist, "set tdesc ",
2395 0 /* allow-unknown */, &setlist);
2396 add_prefix_cmd ("tdesc", class_maintenance, show_tdesc_cmd, _("\
2397 Show target description specific variables."),
2398 &tdesc_show_cmdlist, "show tdesc ",
2399 0 /* allow-unknown */, &showlist);
2400 add_prefix_cmd ("tdesc", class_maintenance, unset_tdesc_cmd, _("\
2401 Unset target description specific variables."),
2402 &tdesc_unset_cmdlist, "unset tdesc ",
2403 0 /* allow-unknown */, &unsetlist);
2405 add_setshow_filename_cmd ("filename", class_obscure,
2406 &tdesc_filename_cmd_string,
2408 Set the file to read for an XML target description"), _("\
2409 Show the file to read for an XML target description"), _("\
2410 When set, GDB will read the target description from a local\n\
2411 file instead of querying the remote target."),
2412 set_tdesc_filename_cmd,
2413 show_tdesc_filename_cmd,
2414 &tdesc_set_cmdlist, &tdesc_show_cmdlist);
2416 add_cmd ("filename", class_obscure, unset_tdesc_filename_cmd, _("\
2417 Unset the file to read for an XML target description. When unset,\n\
2418 GDB will read the description from the target."),
2419 &tdesc_unset_cmdlist);
2421 add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\
2422 Print the current target description as a C source file."),
2423 &maintenanceprintlist);
2425 cmd_list_element *cmd;
2427 cmd = add_cmd ("xml-descriptions", class_maintenance,
2428 maintenance_check_xml_descriptions, _("\
2429 Check the target descriptions created in GDB equal the descriptions\n\
2430 created from XML files in the directory.\n\
2431 The parameter is the directory name."),
2432 &maintenancechecklist);
2433 set_cmd_completer (cmd, filename_completer);