More updated translations
[binutils-gdb.git] / gdb / target-descriptions.c
blob1d35e4d4ac93b830e9688d02eb6ee00b9171c905
1 /* Target description support for GDB.
3 Copyright (C) 2006-2024 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/>. */
22 #include "arch-utils.h"
23 #include "cli/cli-cmds.h"
24 #include "gdbsupport/unordered_set.h"
25 #include "gdbtypes.h"
26 #include "reggroups.h"
27 #include "target.h"
28 #include "target-descriptions.h"
29 #include "xml-support.h"
30 #include "xml-tdesc.h"
31 #include "osabi.h"
33 #include "gdbsupport/gdb_obstack.h"
34 #include "inferior.h"
35 #include <algorithm>
36 #include "completer.h"
37 #include "readline/tilde.h"
38 #include "cli/cli-style.h"
40 /* Types. */
42 struct property
44 property (const std::string &key_, const std::string &value_)
45 : key (key_), value (value_)
48 std::string key;
49 std::string value;
52 /* Convert a tdesc_type to a gdb type. */
54 static type *
55 make_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *ttype)
57 class gdb_type_creator : public tdesc_element_visitor
59 public:
60 gdb_type_creator (struct gdbarch *gdbarch)
61 : m_gdbarch (gdbarch)
64 type *get_type ()
66 return m_type;
69 void visit (const tdesc_type_builtin *e) override
71 switch (e->kind)
73 /* Predefined types. */
74 case TDESC_TYPE_BOOL:
75 m_type = builtin_type (m_gdbarch)->builtin_bool;
76 return;
77 case TDESC_TYPE_INT8:
78 m_type = builtin_type (m_gdbarch)->builtin_int8;
79 return;
80 case TDESC_TYPE_INT16:
81 m_type = builtin_type (m_gdbarch)->builtin_int16;
82 return;
83 case TDESC_TYPE_INT32:
84 m_type = builtin_type (m_gdbarch)->builtin_int32;
85 return;
86 case TDESC_TYPE_INT64:
87 m_type = builtin_type (m_gdbarch)->builtin_int64;
88 return;
89 case TDESC_TYPE_INT128:
90 m_type = builtin_type (m_gdbarch)->builtin_int128;
91 return;
92 case TDESC_TYPE_UINT8:
93 m_type = builtin_type (m_gdbarch)->builtin_uint8;
94 return;
95 case TDESC_TYPE_UINT16:
96 m_type = builtin_type (m_gdbarch)->builtin_uint16;
97 return;
98 case TDESC_TYPE_UINT32:
99 m_type = builtin_type (m_gdbarch)->builtin_uint32;
100 return;
101 case TDESC_TYPE_UINT64:
102 m_type = builtin_type (m_gdbarch)->builtin_uint64;
103 return;
104 case TDESC_TYPE_UINT128:
105 m_type = builtin_type (m_gdbarch)->builtin_uint128;
106 return;
107 case TDESC_TYPE_CODE_PTR:
108 m_type = builtin_type (m_gdbarch)->builtin_func_ptr;
109 return;
110 case TDESC_TYPE_DATA_PTR:
111 m_type = builtin_type (m_gdbarch)->builtin_data_ptr;
112 return;
115 m_type = tdesc_find_type (m_gdbarch, e->name.c_str ());
116 if (m_type != NULL)
117 return;
119 type_allocator alloc (m_gdbarch);
120 switch (e->kind)
122 case TDESC_TYPE_IEEE_HALF:
123 m_type = init_float_type (alloc, -1, "builtin_type_ieee_half",
124 floatformats_ieee_half);
125 return;
127 case TDESC_TYPE_IEEE_SINGLE:
128 m_type = init_float_type (alloc, -1, "builtin_type_ieee_single",
129 floatformats_ieee_single);
130 return;
132 case TDESC_TYPE_IEEE_DOUBLE:
133 m_type = init_float_type (alloc, -1, "builtin_type_ieee_double",
134 floatformats_ieee_double);
135 return;
136 case TDESC_TYPE_ARM_FPA_EXT:
137 m_type = init_float_type (alloc, -1, "builtin_type_arm_ext",
138 floatformats_arm_ext);
139 return;
141 case TDESC_TYPE_I387_EXT:
142 m_type = init_float_type (alloc, -1, "builtin_type_i387_ext",
143 floatformats_i387_ext);
144 return;
146 case TDESC_TYPE_BFLOAT16:
147 m_type = init_float_type (alloc, -1, "builtin_type_bfloat16",
148 floatformats_bfloat16);
149 return;
152 internal_error ("Type \"%s\" has an unknown kind %d",
153 e->name.c_str (), e->kind);
156 void visit (const tdesc_type_vector *e) override
158 m_type = tdesc_find_type (m_gdbarch, e->name.c_str ());
159 if (m_type != NULL)
160 return;
162 type *element_gdb_type = make_gdb_type (m_gdbarch, e->element_type);
163 m_type = init_vector_type (element_gdb_type, e->count);
164 m_type->set_name (xstrdup (e->name.c_str ()));
165 return;
168 void visit (const tdesc_type_with_fields *e) override
170 m_type = tdesc_find_type (m_gdbarch, e->name.c_str ());
171 if (m_type != NULL)
172 return;
174 switch (e->kind)
176 case TDESC_TYPE_STRUCT:
177 make_gdb_type_struct (e);
178 return;
179 case TDESC_TYPE_UNION:
180 make_gdb_type_union (e);
181 return;
182 case TDESC_TYPE_FLAGS:
183 make_gdb_type_flags (e);
184 return;
185 case TDESC_TYPE_ENUM:
186 make_gdb_type_enum (e);
187 return;
190 internal_error ("Type \"%s\" has an unknown kind %d",
191 e->name.c_str (), e->kind);
194 private:
196 void make_gdb_type_struct (const tdesc_type_with_fields *e)
198 m_type = arch_composite_type (m_gdbarch, NULL, TYPE_CODE_STRUCT);
199 m_type->set_name (xstrdup (e->name.c_str ()));
201 for (const tdesc_type_field &f : e->fields)
203 if (f.start != -1 && f.end != -1)
205 /* Bitfield. */
206 struct field *fld;
207 struct type *field_gdb_type;
208 int bitsize, total_size;
210 /* This invariant should be preserved while creating types. */
211 gdb_assert (e->size != 0);
212 if (f.type != NULL)
213 field_gdb_type = make_gdb_type (m_gdbarch, f.type);
214 else if (e->size > 4)
215 field_gdb_type = builtin_type (m_gdbarch)->builtin_uint64;
216 else
217 field_gdb_type = builtin_type (m_gdbarch)->builtin_uint32;
219 fld = append_composite_type_field_raw
220 (m_type, xstrdup (f.name.c_str ()), field_gdb_type);
222 /* For little-endian, BITPOS counts from the LSB of
223 the structure and marks the LSB of the field. For
224 big-endian, BITPOS counts from the MSB of the
225 structure and marks the MSB of the field. Either
226 way, it is the number of bits to the "left" of the
227 field. To calculate this in big-endian, we need
228 the total size of the structure. */
229 bitsize = f.end - f.start + 1;
230 total_size = e->size * TARGET_CHAR_BIT;
231 if (gdbarch_byte_order (m_gdbarch) == BFD_ENDIAN_BIG)
232 fld->set_loc_bitpos (total_size - f.start - bitsize);
233 else
234 fld->set_loc_bitpos (f.start);
235 fld->set_bitsize (bitsize);
237 else
239 gdb_assert (f.start == -1 && f.end == -1);
240 type *field_gdb_type = make_gdb_type (m_gdbarch, f.type);
241 append_composite_type_field (m_type,
242 xstrdup (f.name.c_str ()),
243 field_gdb_type);
247 if (e->size != 0)
248 m_type->set_length (e->size);
251 void make_gdb_type_union (const tdesc_type_with_fields *e)
253 m_type = arch_composite_type (m_gdbarch, NULL, TYPE_CODE_UNION);
254 m_type->set_name (xstrdup (e->name.c_str ()));
256 for (const tdesc_type_field &f : e->fields)
258 type* field_gdb_type = make_gdb_type (m_gdbarch, f.type);
259 append_composite_type_field (m_type, xstrdup (f.name.c_str ()),
260 field_gdb_type);
262 /* If any of the children of a union are vectors, flag the
263 union as a vector also. This allows e.g. a union of two
264 vector types to show up automatically in "info vector". */
265 if (field_gdb_type->is_vector ())
266 m_type->set_is_vector (true);
270 void make_gdb_type_flags (const tdesc_type_with_fields *e)
272 m_type = arch_flags_type (m_gdbarch, e->name.c_str (),
273 e->size * TARGET_CHAR_BIT);
275 for (const tdesc_type_field &f : e->fields)
277 int bitsize = f.end - f.start + 1;
279 gdb_assert (f.type != NULL);
280 type *field_gdb_type = make_gdb_type (m_gdbarch, f.type);
281 append_flags_type_field (m_type, f.start, bitsize,
282 field_gdb_type, f.name.c_str ());
286 void make_gdb_type_enum (const tdesc_type_with_fields *e)
288 m_type = (type_allocator (m_gdbarch)
289 .new_type (TYPE_CODE_ENUM, e->size * TARGET_CHAR_BIT,
290 e->name.c_str ()));
292 m_type->set_is_unsigned (true);
294 for (const tdesc_type_field &f : e->fields)
296 struct field *fld
297 = append_composite_type_field_raw (m_type,
298 xstrdup (f.name.c_str ()),
299 NULL);
301 fld->set_loc_enumval (f.start);
305 /* The gdbarch used. */
306 struct gdbarch *m_gdbarch;
308 /* The type created. */
309 type *m_type;
312 gdb_type_creator gdb_type (gdbarch);
313 ttype->accept (gdb_type);
314 return gdb_type.get_type ();
317 /* Wrapper around bfd_arch_info_type. A class with this name is used in
318 the API that is shared between gdb and gdbserver code, but gdbserver
319 doesn't use compatibility information, so its version of this class is
320 empty. */
322 class tdesc_compatible_info
324 public:
325 /* Constructor. */
326 explicit tdesc_compatible_info (const bfd_arch_info_type *arch)
327 : m_arch (arch)
328 { /* Nothing. */ }
330 /* Access the contained pointer. */
331 const bfd_arch_info_type *arch () const
332 { return m_arch; }
334 private:
335 /* Architecture information looked up from the <compatible> entity within
336 a target description. */
337 const bfd_arch_info_type *m_arch;
340 /* A target description. */
342 struct target_desc : tdesc_element
344 target_desc ()
347 virtual ~target_desc () = default;
349 target_desc (const target_desc &) = delete;
350 void operator= (const target_desc &) = delete;
352 /* The architecture reported by the target, if any. */
353 const struct bfd_arch_info *arch = NULL;
355 /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN
356 otherwise. */
357 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
359 /* The list of compatible architectures reported by the target. */
360 std::vector<tdesc_compatible_info_up> compatible;
362 /* Any architecture-specific properties specified by the target. */
363 std::vector<property> properties;
365 /* The features associated with this target. */
366 std::vector<tdesc_feature_up> features;
368 /* Used to cache the generated xml version of the target description. */
369 mutable char *xmltarget = nullptr;
371 void accept (tdesc_element_visitor &v) const override
373 v.visit_pre (this);
375 for (const tdesc_feature_up &feature : features)
376 feature->accept (v);
378 v.visit_post (this);
381 bool operator== (const target_desc &other) const
383 if (arch != other.arch)
384 return false;
386 if (osabi != other.osabi)
387 return false;
389 if (features.size () != other.features.size ())
390 return false;
392 for (int ix = 0; ix < features.size (); ix++)
394 const tdesc_feature_up &feature1 = features[ix];
395 const tdesc_feature_up &feature2 = other.features[ix];
397 if (feature1 != feature2 && *feature1 != *feature2)
398 return false;
401 return true;
404 bool operator!= (const target_desc &other) const
406 return !(*this == other);
410 /* Per-architecture data associated with a target description. The
411 target description may be shared by multiple architectures, but
412 this data is private to one gdbarch. */
414 struct tdesc_arch_reg
416 tdesc_arch_reg (tdesc_reg *reg_, struct type *type_)
417 : reg (reg_), type (type_)
420 struct tdesc_reg *reg;
421 struct type *type;
424 struct tdesc_arch_data
426 /* A list of register/type pairs, indexed by GDB's internal register number.
427 During initialization of the gdbarch this list is used to store
428 registers which the architecture assigns a fixed register number.
429 Registers which are NULL in this array, or off the end, are
430 treated as zero-sized and nameless (i.e. placeholders in the
431 numbering). */
432 std::vector<tdesc_arch_reg> arch_regs;
434 /* Functions which report the register name, type, and reggroups for
435 pseudo-registers. */
436 gdbarch_register_name_ftype *pseudo_register_name = NULL;
437 gdbarch_register_type_ftype *pseudo_register_type = NULL;
438 gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p = NULL;
441 /* A handle for architecture-specific data associated with the
442 target description (see struct tdesc_arch_data). */
444 static const registry<gdbarch>::key<tdesc_arch_data> tdesc_data;
446 /* Get or create the tdesc_data. */
447 static tdesc_arch_data *
448 get_arch_data (struct gdbarch *gdbarch)
450 tdesc_arch_data *result = tdesc_data.get (gdbarch);
451 if (result == nullptr)
452 result = tdesc_data.emplace (gdbarch);
453 return result;
456 /* The string manipulated by the "set tdesc filename ..." command. */
458 static std::string tdesc_filename_cmd_string;
460 /* Fetch the current target's description, and switch the current
461 architecture to one which incorporates that description. */
463 void
464 target_find_description (void)
466 target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
468 /* If we've already fetched a description from the target, don't do
469 it again. This allows a target to fetch the description early,
470 during its to_open or to_create_inferior, if it needs extra
471 information about the target to initialize. */
472 if (tdesc_info->fetched)
473 return;
475 /* The current architecture should not have any target description
476 specified. It should have been cleared, e.g. when we
477 disconnected from the previous target. */
478 gdb_assert (gdbarch_target_desc (current_inferior ()->arch ()) == NULL);
480 /* First try to fetch an XML description from the user-specified
481 file. */
482 tdesc_info->tdesc = nullptr;
483 if (!tdesc_info->filename.empty ())
484 tdesc_info->tdesc = file_read_description_xml (tdesc_info->filename.data ());
486 /* Next try to read the description from the current target using
487 target objects. */
488 if (tdesc_info->tdesc == nullptr)
489 tdesc_info->tdesc = target_read_description_xml
490 (current_inferior ()->top_target ());
492 /* If that failed try a target-specific hook. */
493 if (tdesc_info->tdesc == nullptr)
494 tdesc_info->tdesc = target_read_description
495 (current_inferior ()->top_target ());
497 /* If a non-NULL description was returned, then update the current
498 architecture. */
499 if (tdesc_info->tdesc != nullptr)
501 struct gdbarch_info info;
503 info.target_desc = tdesc_info->tdesc;
504 if (!gdbarch_update_p (current_inferior (), info))
506 warning (_("Architecture rejected target-supplied description"));
507 tdesc_info->tdesc = nullptr;
509 else
511 struct tdesc_arch_data *data;
513 data = get_arch_data (current_inferior ()->arch ());
514 if (tdesc_has_registers (tdesc_info->tdesc)
515 && data->arch_regs.empty ())
516 warning (_("Target-supplied registers are not supported "
517 "by the current architecture"));
521 /* Now that we know this description is usable, record that we
522 fetched it. */
523 tdesc_info->fetched = true;
526 /* Discard any description fetched from the current target, and switch
527 the current architecture to one with no target description. */
529 void
530 target_clear_description (void)
532 target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
534 if (!tdesc_info->fetched)
535 return;
537 tdesc_info->fetched = false;
538 tdesc_info->tdesc = nullptr;
540 gdbarch_info info;
541 if (!gdbarch_update_p (current_inferior (), info))
542 internal_error (_("Could not remove target-supplied description"));
545 /* See target-descriptions.h. */
547 const target_desc *
548 target_current_description (inferior *inf)
550 target_desc_info *tdesc_info = &inf->tdesc_info;
552 if (tdesc_info->fetched)
553 return tdesc_info->tdesc;
555 return NULL;
558 /* Return non-zero if this target description is compatible
559 with the given BFD architecture. */
562 tdesc_compatible_p (const struct target_desc *target_desc,
563 const struct bfd_arch_info *arch)
565 for (const tdesc_compatible_info_up &compat : target_desc->compatible)
567 if (compat->arch () == arch
568 || arch->compatible (arch, compat->arch ())
569 || compat->arch ()->compatible (compat->arch (), arch))
570 return 1;
573 return 0;
577 /* Direct accessors for target descriptions. */
579 /* Return the string value of a property named KEY, or NULL if the
580 property was not specified. */
582 const char *
583 tdesc_property (const struct target_desc *target_desc, const char *key)
585 for (const property &prop : target_desc->properties)
586 if (prop.key == key)
587 return prop.value.c_str ();
589 return NULL;
592 /* Return the BFD architecture associated with this target
593 description, or NULL if no architecture was specified. */
595 const struct bfd_arch_info *
596 tdesc_architecture (const struct target_desc *target_desc)
598 return target_desc->arch;
601 /* See gdbsupport/tdesc.h. */
603 const char *
604 tdesc_architecture_name (const struct target_desc *target_desc)
606 if (target_desc->arch != NULL)
607 return target_desc->arch->printable_name;
608 return NULL;
611 /* See gdbsupport/tdesc.h. */
613 const std::vector<tdesc_compatible_info_up> &
614 tdesc_compatible_info_list (const target_desc *target_desc)
616 return target_desc->compatible;
619 /* See gdbsupport/tdesc.h. */
621 const char *
622 tdesc_compatible_info_arch_name (const tdesc_compatible_info_up &compatible)
624 return compatible->arch ()->printable_name;
627 /* Return the OSABI associated with this target description, or
628 GDB_OSABI_UNKNOWN if no osabi was specified. */
630 enum gdb_osabi
631 tdesc_osabi (const struct target_desc *target_desc)
633 return target_desc->osabi;
636 /* See gdbsupport/tdesc.h. */
638 const char *
639 tdesc_osabi_name (const struct target_desc *target_desc)
641 enum gdb_osabi osabi = tdesc_osabi (target_desc);
642 if (osabi > GDB_OSABI_UNKNOWN && osabi < GDB_OSABI_INVALID)
643 return gdbarch_osabi_name (osabi);
644 return nullptr;
647 /* Return 1 if this target description includes any registers. */
650 tdesc_has_registers (const struct target_desc *target_desc)
652 if (target_desc == NULL)
653 return 0;
655 for (const tdesc_feature_up &feature : target_desc->features)
656 if (!feature->registers.empty ())
657 return 1;
659 return 0;
662 /* Return the feature with the given name, if present, or NULL if
663 the named feature is not found. */
665 const struct tdesc_feature *
666 tdesc_find_feature (const struct target_desc *target_desc,
667 const char *name)
669 for (const tdesc_feature_up &feature : target_desc->features)
670 if (feature->name == name)
671 return feature.get ();
673 return NULL;
676 /* Return the name of FEATURE. */
678 const char *
679 tdesc_feature_name (const struct tdesc_feature *feature)
681 return feature->name.c_str ();
684 /* Lookup type associated with ID. */
686 struct type *
687 tdesc_find_type (struct gdbarch *gdbarch, const char *id)
689 tdesc_arch_data *data = get_arch_data (gdbarch);
691 for (const tdesc_arch_reg &reg : data->arch_regs)
693 if (reg.reg
694 && reg.reg->tdesc_type
695 && reg.type
696 && reg.reg->tdesc_type->name == id)
697 return reg.type;
700 return NULL;
703 /* Support for registers from target descriptions. */
705 /* Construct the per-gdbarch data. */
707 tdesc_arch_data_up
708 tdesc_data_alloc (void)
710 return tdesc_arch_data_up (new tdesc_arch_data ());
713 /* See target-descriptions.h. */
715 void
716 tdesc_arch_data_deleter::operator() (struct tdesc_arch_data *data) const
718 delete data;
721 /* Search FEATURE for a register named NAME. */
723 static struct tdesc_reg *
724 tdesc_find_register_early (const struct tdesc_feature *feature,
725 const char *name)
727 for (const tdesc_reg_up &reg : feature->registers)
728 if (strcasecmp (reg->name.c_str (), name) == 0)
729 return reg.get ();
731 return NULL;
734 /* Search FEATURE for a register named NAME. Assign REGNO to it. */
737 tdesc_numbered_register (const struct tdesc_feature *feature,
738 struct tdesc_arch_data *data,
739 int regno, const char *name)
741 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
743 if (reg == NULL)
744 return 0;
746 /* Make sure the vector includes a REGNO'th element. */
747 while (regno >= data->arch_regs.size ())
748 data->arch_regs.emplace_back (nullptr, nullptr);
750 data->arch_regs[regno] = tdesc_arch_reg (reg, NULL);
752 return 1;
755 /* Search FEATURE for a register named NAME, but do not assign a fixed
756 register number to it. */
759 tdesc_unnumbered_register (const struct tdesc_feature *feature,
760 const char *name)
762 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
764 if (reg == NULL)
765 return 0;
767 return 1;
770 /* Search FEATURE for a register whose name is in NAMES and assign
771 REGNO to it. */
774 tdesc_numbered_register_choices (const struct tdesc_feature *feature,
775 struct tdesc_arch_data *data,
776 int regno, const char *const names[])
778 int i;
780 for (i = 0; names[i] != NULL; i++)
781 if (tdesc_numbered_register (feature, data, regno, names[i]))
782 return 1;
784 return 0;
787 /* See target-descriptions.h. */
789 bool
790 tdesc_found_register (struct tdesc_arch_data *data, int regno)
792 gdb_assert (regno >= 0);
794 return (regno < data->arch_regs.size ()
795 && data->arch_regs[regno].reg != nullptr);
798 /* Search FEATURE for a register named NAME, and return its size in
799 bits. The register must exist. */
802 tdesc_register_bitsize (const struct tdesc_feature *feature, const char *name)
804 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
806 gdb_assert (reg != NULL);
807 return reg->bitsize;
810 /* Look up a register by its GDB internal register number. */
812 static struct tdesc_arch_reg *
813 tdesc_find_arch_register (struct gdbarch *gdbarch, int regno)
815 struct tdesc_arch_data *data = get_arch_data (gdbarch);
817 if (regno < data->arch_regs.size ())
818 return &data->arch_regs[regno];
819 else
820 return NULL;
823 static struct tdesc_reg *
824 tdesc_find_register (struct gdbarch *gdbarch, int regno)
826 struct tdesc_arch_reg *reg = tdesc_find_arch_register (gdbarch, regno);
828 return reg? reg->reg : NULL;
831 /* Return the name of register REGNO, from the target description or
832 from an architecture-provided pseudo_register_name method. */
834 const char *
835 tdesc_register_name (struct gdbarch *gdbarch, int regno)
837 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
838 int num_regs = gdbarch_num_regs (gdbarch);
840 if (reg != NULL)
841 return reg->name.c_str ();
843 if (regno >= num_regs && regno < gdbarch_num_cooked_regs (gdbarch))
845 struct tdesc_arch_data *data = get_arch_data (gdbarch);
847 gdb_assert (data->pseudo_register_name != NULL);
848 return data->pseudo_register_name (gdbarch, regno);
851 return "";
854 struct type *
855 tdesc_register_type (struct gdbarch *gdbarch, int regno)
857 struct tdesc_arch_reg *arch_reg = tdesc_find_arch_register (gdbarch, regno);
858 struct tdesc_reg *reg = arch_reg? arch_reg->reg : NULL;
859 int num_regs = gdbarch_num_regs (gdbarch);
860 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
862 if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs)
864 struct tdesc_arch_data *data = get_arch_data (gdbarch);
866 gdb_assert (data->pseudo_register_type != NULL);
867 return data->pseudo_register_type (gdbarch, regno);
870 if (reg == NULL)
871 /* Return "int0_t", since "void" has a misleading size of one. */
872 return builtin_type (gdbarch)->builtin_int0;
874 if (arch_reg->type == NULL)
876 /* First check for a predefined or target defined type. */
877 if (reg->tdesc_type)
878 arch_reg->type = make_gdb_type (gdbarch, reg->tdesc_type);
880 /* Next try size-sensitive type shortcuts. */
881 else if (reg->type == "float")
883 if (reg->bitsize == gdbarch_float_bit (gdbarch))
884 arch_reg->type = builtin_type (gdbarch)->builtin_float;
885 else if (reg->bitsize == gdbarch_double_bit (gdbarch))
886 arch_reg->type = builtin_type (gdbarch)->builtin_double;
887 else if (reg->bitsize == gdbarch_long_double_bit (gdbarch))
888 arch_reg->type = builtin_type (gdbarch)->builtin_long_double;
889 else
891 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
892 reg->name.c_str (), reg->bitsize);
893 arch_reg->type = builtin_type (gdbarch)->builtin_double;
896 else if (reg->type == "int")
898 if (reg->bitsize == gdbarch_long_bit (gdbarch))
899 arch_reg->type = builtin_type (gdbarch)->builtin_long;
900 else if (reg->bitsize == TARGET_CHAR_BIT)
901 arch_reg->type = builtin_type (gdbarch)->builtin_char;
902 else if (reg->bitsize == gdbarch_short_bit (gdbarch))
903 arch_reg->type = builtin_type (gdbarch)->builtin_short;
904 else if (reg->bitsize == gdbarch_int_bit (gdbarch))
905 arch_reg->type = builtin_type (gdbarch)->builtin_int;
906 else if (reg->bitsize == gdbarch_long_long_bit (gdbarch))
907 arch_reg->type = builtin_type (gdbarch)->builtin_long_long;
908 else if (reg->bitsize == gdbarch_ptr_bit (gdbarch))
909 /* A bit desperate by this point... */
910 arch_reg->type = builtin_type (gdbarch)->builtin_data_ptr;
911 else
913 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
914 reg->name.c_str (), reg->bitsize);
915 arch_reg->type = builtin_type (gdbarch)->builtin_long;
919 if (arch_reg->type == NULL)
920 internal_error ("Register \"%s\" has an unknown type \"%s\"",
921 reg->name.c_str (), reg->type.c_str ());
924 return arch_reg->type;
927 static int
928 tdesc_remote_register_number (struct gdbarch *gdbarch, int regno)
930 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
932 if (reg != NULL)
933 return reg->target_regnum;
934 else
935 return -1;
938 /* Check whether REGNUM is a member of REGGROUP. Registers from the
939 target description may be classified as general, float, vector or other
940 register groups registered with reggroup_add(). Unlike a gdbarch
941 register_reggroup_p method, this function will return -1 if it does not
942 know; the caller should handle registers with no specified group.
944 The names of containing features are not used. This might be extended
945 to display registers in some more useful groupings.
947 The save-restore flag is also implemented here. */
950 tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
951 const struct reggroup *reggroup)
953 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
955 if (reg != NULL && !reg->group.empty ()
956 && (reg->group == reggroup->name ()))
957 return 1;
959 if (reg != NULL
960 && (reggroup == save_reggroup || reggroup == restore_reggroup))
961 return reg->save_restore;
963 return -1;
966 /* Check whether REGNUM is a member of REGGROUP. Registers with no
967 group specified go to the default reggroup function and are handled
968 by type. */
970 static int
971 tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
972 const struct reggroup *reggroup)
974 int num_regs = gdbarch_num_regs (gdbarch);
975 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
976 int ret;
978 if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
980 struct tdesc_arch_data *data = get_arch_data (gdbarch);
982 if (data->pseudo_register_reggroup_p != NULL)
983 return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup);
984 /* Otherwise fall through to the default reggroup_p. */
987 ret = tdesc_register_in_reggroup_p (gdbarch, regno, reggroup);
988 if (ret != -1)
989 return ret;
991 return default_register_reggroup_p (gdbarch, regno, reggroup);
994 /* Record architecture-specific functions to call for pseudo-register
995 support. */
997 void
998 set_tdesc_pseudo_register_name (struct gdbarch *gdbarch,
999 gdbarch_register_name_ftype *pseudo_name)
1001 struct tdesc_arch_data *data = get_arch_data (gdbarch);
1003 data->pseudo_register_name = pseudo_name;
1006 void
1007 set_tdesc_pseudo_register_type (struct gdbarch *gdbarch,
1008 gdbarch_register_type_ftype *pseudo_type)
1010 struct tdesc_arch_data *data = get_arch_data (gdbarch);
1012 data->pseudo_register_type = pseudo_type;
1015 void
1016 set_tdesc_pseudo_register_reggroup_p
1017 (struct gdbarch *gdbarch,
1018 gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
1020 struct tdesc_arch_data *data = get_arch_data (gdbarch);
1022 data->pseudo_register_reggroup_p = pseudo_reggroup_p;
1025 /* Update GDBARCH to use the target description for registers. */
1027 void
1028 tdesc_use_registers (struct gdbarch *gdbarch,
1029 const struct target_desc *target_desc,
1030 tdesc_arch_data_up &&early_data,
1031 tdesc_unknown_register_ftype unk_reg_cb)
1033 int num_regs = gdbarch_num_regs (gdbarch);
1034 struct tdesc_arch_data *data;
1036 /* We can't use the description for registers if it doesn't describe
1037 any. This function should only be called after validating
1038 registers, so the caller should know that registers are
1039 included. */
1040 gdb_assert (tdesc_has_registers (target_desc));
1042 data = get_arch_data (gdbarch);
1043 data->arch_regs = std::move (early_data->arch_regs);
1045 /* Build up a set of all registers, so that we can assign register
1046 numbers where needed. */
1047 gdb::unordered_set<tdesc_reg *> reg_hash;
1049 for (const tdesc_feature_up &feature : target_desc->features)
1050 for (const tdesc_reg_up &reg : feature->registers)
1052 reg_hash.insert (reg.get ());
1054 /* Add reggroup if its new. */
1055 if (!reg->group.empty ())
1056 if (reggroup_find (gdbarch, reg->group.c_str ()) == NULL)
1057 reggroup_add (gdbarch, reggroup_gdbarch_new (gdbarch,
1058 reg->group.c_str (),
1059 USER_REGGROUP));
1062 /* Remove any registers which were assigned numbers by the
1063 architecture. */
1064 for (const tdesc_arch_reg &arch_reg : data->arch_regs)
1065 if (arch_reg.reg != NULL)
1066 reg_hash.erase (arch_reg.reg);
1068 /* Assign numbers to the remaining registers and add them to the
1069 list of registers. The new numbers are always above gdbarch_num_regs.
1070 Iterate over the features, not the hash table, so that the order
1071 matches that in the target description. */
1073 gdb_assert (data->arch_regs.size () <= num_regs);
1074 while (data->arch_regs.size () < num_regs)
1075 data->arch_regs.emplace_back (nullptr, nullptr);
1077 /* First we give the target a chance to number previously unknown
1078 registers. This allows targets to record the numbers assigned based
1079 on which feature the register was from. */
1080 if (unk_reg_cb != NULL)
1082 for (const tdesc_feature_up &feature : target_desc->features)
1083 for (const tdesc_reg_up &reg : feature->registers)
1084 if (reg_hash.contains (reg.get ()))
1086 int regno = unk_reg_cb (gdbarch, feature.get (),
1087 reg->name.c_str (), num_regs);
1088 gdb_assert (regno == -1 || regno >= num_regs);
1089 if (regno != -1)
1091 while (regno >= data->arch_regs.size ())
1092 data->arch_regs.emplace_back (nullptr, nullptr);
1093 data->arch_regs[regno] = tdesc_arch_reg (reg.get (), NULL);
1094 num_regs = regno + 1;
1095 reg_hash.erase (reg.get ());
1100 /* Ensure the array was sized correctly above. */
1101 gdb_assert (data->arch_regs.size () == num_regs);
1103 /* Now in a final pass we assign register numbers to any remaining
1104 unnumbered registers. */
1105 for (const tdesc_feature_up &feature : target_desc->features)
1106 for (const tdesc_reg_up &reg : feature->registers)
1107 if (reg_hash.contains (reg.get ()))
1109 data->arch_regs.emplace_back (reg.get (), nullptr);
1110 num_regs++;
1113 /* Update the architecture. */
1114 set_gdbarch_num_regs (gdbarch, num_regs);
1115 set_gdbarch_register_name (gdbarch, tdesc_register_name);
1116 set_gdbarch_register_type (gdbarch, tdesc_register_type);
1117 set_gdbarch_remote_register_number (gdbarch,
1118 tdesc_remote_register_number);
1119 set_gdbarch_register_reggroup_p (gdbarch, tdesc_register_reggroup_p);
1122 /* See gdbsupport/tdesc.h. */
1124 struct tdesc_feature *
1125 tdesc_create_feature (struct target_desc *tdesc, const char *name)
1127 struct tdesc_feature *new_feature = new tdesc_feature (name);
1129 tdesc->features.emplace_back (new_feature);
1131 return new_feature;
1134 /* See gdbsupport/tdesc.h. */
1136 target_desc_up
1137 allocate_target_description (void)
1139 return target_desc_up (new target_desc ());
1142 /* See gdbsupport/tdesc.h. */
1144 void
1145 target_desc_deleter::operator() (struct target_desc *target_desc) const
1147 delete target_desc;
1150 void
1151 tdesc_add_compatible (struct target_desc *target_desc,
1152 const struct bfd_arch_info *compatible)
1154 /* If this instance of GDB is compiled without BFD support for the
1155 compatible architecture, simply ignore it -- we would not be able
1156 to handle it anyway. */
1157 if (compatible == NULL)
1158 return;
1160 for (const tdesc_compatible_info_up &compat : target_desc->compatible)
1161 if (compat->arch () == compatible)
1162 internal_error (_("Attempted to add duplicate "
1163 "compatible architecture \"%s\""),
1164 compatible->printable_name);
1166 target_desc->compatible.push_back
1167 (std::unique_ptr<tdesc_compatible_info>
1168 (new tdesc_compatible_info (compatible)));
1171 void
1172 set_tdesc_property (struct target_desc *target_desc,
1173 const char *key, const char *value)
1175 gdb_assert (key != NULL && value != NULL);
1177 if (tdesc_property (target_desc, key) != NULL)
1178 internal_error (_("Attempted to add duplicate property \"%s\""), key);
1180 target_desc->properties.emplace_back (key, value);
1183 /* See gdbsupport/tdesc.h. */
1185 void
1186 set_tdesc_architecture (struct target_desc *target_desc,
1187 const char *name)
1189 set_tdesc_architecture (target_desc, bfd_scan_arch (name));
1192 void
1193 set_tdesc_architecture (struct target_desc *target_desc,
1194 const struct bfd_arch_info *arch)
1196 target_desc->arch = arch;
1199 /* See gdbsupport/tdesc.h. */
1201 void
1202 set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
1204 target_desc->osabi = osabi;
1208 static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
1209 static struct cmd_list_element *tdesc_unset_cmdlist;
1211 /* Helper functions for the CLI commands. */
1213 static void
1214 set_tdesc_filename_cmd (const char *args, int from_tty,
1215 struct cmd_list_element *c)
1217 target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
1219 tdesc_info->filename = tdesc_filename_cmd_string;
1221 target_clear_description ();
1222 target_find_description ();
1225 static void
1226 show_tdesc_filename_cmd (struct ui_file *file, int from_tty,
1227 struct cmd_list_element *c,
1228 const char *value)
1230 value = current_inferior ()->tdesc_info.filename.data ();
1232 if (value != NULL && *value != '\0')
1233 gdb_printf (file,
1234 _("The target description will be read from \"%ps\".\n"),
1235 styled_string (file_name_style.style (), value));
1236 else
1237 gdb_printf (file,
1238 _("The target description will be "
1239 "read from the target.\n"));
1242 static void
1243 unset_tdesc_filename_cmd (const char *args, int from_tty)
1245 target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
1247 tdesc_info->filename.clear ();
1248 target_clear_description ();
1249 target_find_description ();
1252 /* Print target description in C. */
1254 class print_c_tdesc : public tdesc_element_visitor
1256 public:
1257 print_c_tdesc (std::string &filename_after_features)
1258 : m_filename_after_features (filename_after_features)
1260 const char *inp;
1261 char *outp;
1262 const char *filename = lbasename (m_filename_after_features.c_str ());
1264 m_function = (char *) xmalloc (strlen (filename) + 1);
1265 for (inp = filename, outp = m_function; *inp != '\0'; inp++)
1266 if (*inp == '.')
1267 break;
1268 else if (*inp == '-')
1269 *outp++ = '_';
1270 else if (*inp == ' ')
1271 *outp++ = '_';
1272 else
1273 *outp++ = *inp;
1274 *outp = '\0';
1276 /* Standard boilerplate. */
1277 gdb_printf ("/* THIS FILE IS GENERATED. "
1278 "-*- buffer-read-only: t -*- vi"
1279 ":set ro:\n");
1282 ~print_c_tdesc ()
1284 xfree (m_function);
1287 void visit_pre (const target_desc *e) override
1289 gdb_printf (" Original: %s */\n\n",
1290 lbasename (m_filename_after_features.c_str ()));
1292 gdb_printf ("#include \"osabi.h\"\n");
1293 gdb_printf ("#include \"target-descriptions.h\"\n");
1294 gdb_printf ("\n");
1296 gdb_printf ("const struct target_desc *tdesc_%s;\n", m_function);
1297 gdb_printf ("static void\n");
1298 gdb_printf ("initialize_tdesc_%s (void)\n", m_function);
1299 gdb_printf ("{\n");
1300 gdb_printf
1301 (" target_desc_up result = allocate_target_description ();\n");
1303 if (tdesc_architecture (e) != NULL)
1305 gdb_printf
1306 (" set_tdesc_architecture (result.get (), bfd_scan_arch (\"%s\"));\n",
1307 tdesc_architecture (e)->printable_name);
1308 gdb_printf ("\n");
1310 if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN
1311 && tdesc_osabi (e) < GDB_OSABI_INVALID)
1313 const char *enum_name = gdbarch_osabi_enum_name (tdesc_osabi (e));
1314 gdb_printf (" set_tdesc_osabi (result.get (), %s);\n", enum_name);
1315 gdb_printf ("\n");
1318 for (const tdesc_compatible_info_up &compatible : e->compatible)
1319 gdb_printf
1320 (" tdesc_add_compatible (result.get (), bfd_scan_arch (\"%s\"));\n",
1321 compatible->arch ()->printable_name);
1323 if (!e->compatible.empty ())
1324 gdb_printf ("\n");
1326 for (const property &prop : e->properties)
1327 gdb_printf (" set_tdesc_property (result.get (), \"%s\", \"%s\");\n",
1328 prop.key.c_str (), prop.value.c_str ());
1330 gdb_printf (" struct tdesc_feature *feature;\n");
1333 void visit_pre (const tdesc_feature *e) override
1335 gdb_printf ("\n feature = tdesc_create_feature (result.get (), \"%s\");\n",
1336 e->name.c_str ());
1339 void visit_post (const tdesc_feature *e) override
1342 void visit_post (const target_desc *e) override
1344 gdb_printf ("\n tdesc_%s = result.release ();\n", m_function);
1345 gdb_printf ("}\n");
1348 void visit (const tdesc_type_builtin *type) override
1350 error (_("C output is not supported type \"%s\"."), type->name.c_str ());
1353 void visit (const tdesc_type_vector *type) override
1355 if (!m_printed_element_type)
1357 gdb_printf (" tdesc_type *element_type;\n");
1358 m_printed_element_type = true;
1361 gdb_printf
1362 (" element_type = tdesc_named_type (feature, \"%s\");\n",
1363 type->element_type->name.c_str ());
1364 gdb_printf
1365 (" tdesc_create_vector (feature, \"%s\", element_type, %d);\n",
1366 type->name.c_str (), type->count);
1368 gdb_printf ("\n");
1371 void visit (const tdesc_type_with_fields *type) override
1373 if (!m_printed_type_with_fields)
1375 gdb_printf (" tdesc_type_with_fields *type_with_fields;\n");
1376 m_printed_type_with_fields = true;
1379 switch (type->kind)
1381 case TDESC_TYPE_STRUCT:
1382 case TDESC_TYPE_FLAGS:
1383 if (type->kind == TDESC_TYPE_STRUCT)
1385 gdb_printf
1386 (" type_with_fields = tdesc_create_struct (feature, \"%s\");\n",
1387 type->name.c_str ());
1388 if (type->size != 0)
1389 gdb_printf
1390 (" tdesc_set_struct_size (type_with_fields, %d);\n", type->size);
1392 else
1394 gdb_printf
1395 (" type_with_fields = tdesc_create_flags (feature, \"%s\", %d);\n",
1396 type->name.c_str (), type->size);
1398 for (const tdesc_type_field &f : type->fields)
1400 const char *type_name;
1402 gdb_assert (f.type != NULL);
1403 type_name = f.type->name.c_str ();
1405 /* To minimize changes to generated files, don't emit type
1406 info for fields that have defaulted types. */
1407 if (f.start != -1)
1409 gdb_assert (f.end != -1);
1410 if (f.type->kind == TDESC_TYPE_BOOL)
1412 gdb_assert (f.start == f.end);
1413 gdb_printf
1414 (" tdesc_add_flag (type_with_fields, %d, \"%s\");\n",
1415 f.start, f.name.c_str ());
1417 else if ((type->size == 4 && f.type->kind == TDESC_TYPE_UINT32)
1418 || (type->size == 8
1419 && f.type->kind == TDESC_TYPE_UINT64))
1421 gdb_printf
1422 (" tdesc_add_bitfield (type_with_fields, \"%s\", %d, %d);\n",
1423 f.name.c_str (), f.start, f.end);
1425 else
1427 printf_field_type_assignment
1428 ("tdesc_named_type (feature, \"%s\");\n",
1429 type_name);
1430 gdb_printf
1431 (" tdesc_add_typed_bitfield (type_with_fields, \"%s\","
1432 " %d, %d, field_type);\n",
1433 f.name.c_str (), f.start, f.end);
1436 else /* Not a bitfield. */
1438 gdb_assert (f.end == -1);
1439 gdb_assert (type->kind == TDESC_TYPE_STRUCT);
1440 printf_field_type_assignment
1441 ("tdesc_named_type (feature, \"%s\");\n", type_name);
1442 gdb_printf
1443 (" tdesc_add_field (type_with_fields, \"%s\", field_type);\n",
1444 f.name.c_str ());
1447 break;
1448 case TDESC_TYPE_UNION:
1449 gdb_printf
1450 (" type_with_fields = tdesc_create_union (feature, \"%s\");\n",
1451 type->name.c_str ());
1452 for (const tdesc_type_field &f : type->fields)
1454 printf_field_type_assignment
1455 ("tdesc_named_type (feature, \"%s\");\n", f.type->name.c_str ());
1456 gdb_printf
1457 (" tdesc_add_field (type_with_fields, \"%s\", field_type);\n",
1458 f.name.c_str ());
1460 break;
1461 case TDESC_TYPE_ENUM:
1462 gdb_printf
1463 (" type_with_fields = tdesc_create_enum (feature, \"%s\", %d);\n",
1464 type->name.c_str (), type->size);
1465 for (const tdesc_type_field &f : type->fields)
1466 gdb_printf
1467 (" tdesc_add_enum_value (type_with_fields, %d, \"%s\");\n",
1468 f.start, f.name.c_str ());
1469 break;
1470 default:
1471 error (_("C output is not supported type \"%s\"."), type->name.c_str ());
1474 gdb_printf ("\n");
1477 void visit (const tdesc_reg *reg) override
1479 gdb_printf (" tdesc_create_reg (feature, \"%s\", %ld, %d, ",
1480 reg->name.c_str (), reg->target_regnum,
1481 reg->save_restore);
1482 if (!reg->group.empty ())
1483 gdb_printf ("\"%s\", ", reg->group.c_str ());
1484 else
1485 gdb_printf ("NULL, ");
1486 gdb_printf ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
1489 protected:
1490 std::string m_filename_after_features;
1492 private:
1494 /* Print an assignment to the field_type variable. Print the declaration
1495 of field_type if that has not been done yet. */
1496 ATTRIBUTE_PRINTF (2, 3)
1497 void printf_field_type_assignment (const char *fmt, ...)
1499 if (!m_printed_field_type)
1501 gdb_printf (" tdesc_type *field_type;\n");
1502 m_printed_field_type = true;
1505 gdb_printf (" field_type = ");
1507 va_list args;
1508 va_start (args, fmt);
1509 gdb_vprintf (fmt, args);
1510 va_end (args);
1513 char *m_function;
1515 /* Did we print "struct tdesc_type *element_type;" yet? */
1516 bool m_printed_element_type = false;
1518 /* Did we print "struct tdesc_type_with_fields *element_type;" yet? */
1519 bool m_printed_type_with_fields = false;
1521 /* Did we print "struct tdesc_type *field_type;" yet? */
1522 bool m_printed_field_type = false;
1525 /* Print target description feature in C. */
1527 class print_c_feature : public print_c_tdesc
1529 public:
1530 print_c_feature (std::string &file)
1531 : print_c_tdesc (file)
1533 /* Trim ".tmp". */
1534 auto const pos = m_filename_after_features.find_last_of ('.');
1536 m_filename_after_features = m_filename_after_features.substr (0, pos);
1539 void visit_pre (const target_desc *e) override
1541 gdb_printf (" Original: %s */\n\n",
1542 lbasename (m_filename_after_features.c_str ()));
1544 gdb_printf ("#include \"gdbsupport/tdesc.h\"\n");
1545 gdb_printf ("\n");
1548 void visit_post (const target_desc *e) override
1551 void visit_pre (const tdesc_feature *e) override
1553 std::string name (m_filename_after_features);
1555 auto pos = name.find_first_of ('.');
1557 name = name.substr (0, pos);
1558 std::replace (name.begin (), name.end (), '/', '_');
1559 std::replace (name.begin (), name.end (), '-', '_');
1561 gdb_printf ("static int\n");
1562 gdb_printf ("create_feature_%s ", name.c_str ());
1563 gdb_printf ("(struct target_desc *result, long regnum)\n");
1565 gdb_printf ("{\n");
1566 gdb_printf (" struct tdesc_feature *feature;\n");
1568 gdb_printf
1569 ("\n feature = tdesc_create_feature (result, \"%s\");\n",
1570 e->name.c_str ());
1573 void visit_post (const tdesc_feature *e) override
1575 gdb_printf (" return regnum;\n");
1576 gdb_printf ("}\n");
1579 void visit (const tdesc_reg *reg) override
1581 /* Most "reg" in XML target descriptions don't have "regnum"
1582 attribute, so the register number is allocated sequentially.
1583 In case that reg has "regnum" attribute, register number
1584 should be set by that explicitly. */
1586 if (reg->target_regnum < m_next_regnum)
1588 /* The integrity check, it can catch some errors on register
1589 number collision, like this,
1591 <reg name="x0" bitsize="32"/>
1592 <reg name="x1" bitsize="32"/>
1593 <reg name="x2" bitsize="32"/>
1594 <reg name="x3" bitsize="32"/>
1595 <reg name="ps" bitsize="32" regnum="3"/>
1597 but it also has false negatives. The target description
1598 below is correct,
1600 <reg name="x1" bitsize="32" regnum="1"/>
1601 <reg name="x3" bitsize="32" regnum="3"/>
1602 <reg name="x2" bitsize="32" regnum="2"/>
1603 <reg name="x4" bitsize="32" regnum="4"/>
1605 but it is not a good practice, so still error on this,
1606 and also print the message so that it can be saved in the
1607 generated c file. */
1609 gdb_printf ("ERROR: \"regnum\" attribute %ld ",
1610 reg->target_regnum);
1611 gdb_printf ("is not the largest number (%d).\n",
1612 m_next_regnum);
1613 error (_("\"regnum\" attribute %ld is not the largest number (%d)."),
1614 reg->target_regnum, m_next_regnum);
1617 if (reg->target_regnum > m_next_regnum)
1619 gdb_printf (" regnum = %ld;\n", reg->target_regnum);
1620 m_next_regnum = reg->target_regnum;
1623 gdb_printf (" tdesc_create_reg (feature, \"%s\", regnum++, %d, ",
1624 reg->name.c_str (), reg->save_restore);
1625 if (!reg->group.empty ())
1626 gdb_printf ("\"%s\", ", reg->group.c_str ());
1627 else
1628 gdb_printf ("NULL, ");
1629 gdb_printf ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
1631 m_next_regnum++;
1634 private:
1635 /* The register number to use for the next register we see. */
1636 int m_next_regnum = 0;
1639 /* See gdbsupport/tdesc.h. */
1641 const char *
1642 tdesc_get_features_xml (const target_desc *tdesc)
1644 if (tdesc->xmltarget == nullptr)
1646 std::string buffer ("@");
1647 print_xml_feature v (&buffer);
1648 tdesc->accept (v);
1649 tdesc->xmltarget = xstrdup (buffer.c_str ());
1651 return tdesc->xmltarget;
1654 /* Data structures and functions to setup the option flags for 'maintenance
1655 print c-tdesc command. */
1657 struct maint_print_c_tdesc_options
1659 /* True when the '-single-feature' flag was passed. */
1660 bool single_feature = false;
1663 using maint_print_c_tdesc_opt_def
1664 = gdb::option::flag_option_def<maint_print_c_tdesc_options>;
1666 static const gdb::option::option_def maint_print_c_tdesc_opt_defs[] = {
1667 maint_print_c_tdesc_opt_def {
1668 "single-feature",
1669 [] (maint_print_c_tdesc_options *opt) { return &opt->single_feature; },
1670 N_("Print C description of just a single feature.")
1674 static inline gdb::option::option_def_group
1675 make_maint_print_c_tdesc_options_def_group (maint_print_c_tdesc_options *opts)
1677 return {{maint_print_c_tdesc_opt_defs}, opts};
1680 /* Implement 'maintenance print c-tdesc' command. */
1682 static void
1683 maint_print_c_tdesc_cmd (const char *args, int from_tty)
1685 const struct target_desc *tdesc;
1687 maint_print_c_tdesc_options opts;
1688 auto grp = make_maint_print_c_tdesc_options_def_group (&opts);
1689 gdb::option::process_options
1690 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
1692 std::string filename = extract_single_filename_arg (args);
1694 if (filename.empty ())
1696 /* Use the global target-supplied description, not the current
1697 architecture's. This lets a GDB for one architecture generate C
1698 for another architecture's description, even though the gdbarch
1699 initialization code will reject the new description. */
1700 target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
1701 tdesc = tdesc_info->tdesc;
1702 if (tdesc_info->filename.data () != nullptr)
1703 filename = std::string (tdesc_info->filename.data ());
1705 else
1707 /* Use the target description from the XML file. */
1708 tdesc = file_read_description_xml (filename.c_str ());
1711 if (tdesc == NULL)
1712 error (_("There is no target description to print."));
1714 if (filename.empty ())
1715 filename = "fetched from target";
1717 auto loc = filename.rfind ("/features/");
1718 if (loc != std::string::npos)
1719 filename = filename.substr (loc + 10);
1721 /* Print c files for target features instead of target descriptions,
1722 because c files got from target features are more flexible than the
1723 counterparts. */
1724 if (opts.single_feature)
1726 if (tdesc->features.size () != 1)
1727 error (_("only target descriptions with 1 feature can be used "
1728 "with -single-feature option"));
1730 print_c_feature v (filename);
1732 tdesc->accept (v);
1734 else
1736 print_c_tdesc v (filename);
1738 tdesc->accept (v);
1742 /* Completer for the "backtrace" command. */
1744 static void
1745 maint_print_c_tdesc_cmd_completer (struct cmd_list_element *ignore,
1746 completion_tracker &tracker,
1747 const char *text, const char *word)
1749 auto grp = make_maint_print_c_tdesc_options_def_group (nullptr);
1750 if (gdb::option::complete_options
1751 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
1752 return;
1754 word = advance_to_filename_maybe_quoted_complete_word_point (tracker, text);
1755 filename_maybe_quoted_completer (ignore, tracker, text, word);
1758 /* Implement the maintenance print xml-tdesc command. */
1760 static void
1761 maint_print_xml_tdesc_cmd (const char *args, int from_tty)
1763 const struct target_desc *tdesc;
1765 if (args == NULL)
1767 /* Use the global target-supplied description, not the current
1768 architecture's. This lets a GDB for one architecture generate XML
1769 for another architecture's description, even though the gdbarch
1770 initialization code will reject the new description. */
1771 tdesc = current_inferior ()->tdesc_info.tdesc;
1773 else
1775 /* Use the target description from the XML file. */
1776 tdesc = file_read_description_xml (args);
1779 if (tdesc == NULL)
1780 error (_("There is no target description to print."));
1782 std::string buf;
1783 print_xml_feature v (&buf);
1784 tdesc->accept (v);
1785 gdb_puts (buf.c_str ());
1788 namespace selftests {
1790 /* A reference target description, used for testing (see record_xml_tdesc). */
1792 struct xml_test_tdesc
1794 xml_test_tdesc (const char *name, std::unique_ptr<const target_desc> &&tdesc)
1795 : name (name), tdesc (std::move (tdesc))
1798 const char *name;
1799 std::unique_ptr<const target_desc> tdesc;
1802 static std::vector<xml_test_tdesc> xml_tdesc;
1804 #if GDB_SELF_TEST
1806 /* See target-descriptions.h. */
1808 void
1809 record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc)
1811 xml_tdesc.emplace_back (xml_file, std::unique_ptr<const target_desc> (tdesc));
1813 #endif
1817 /* Test the conversion process of a target description to/from xml: Take a target
1818 description TDESC, convert to xml, back to a description, and confirm the new
1819 tdesc is identical to the original. */
1820 static bool
1821 maintenance_check_tdesc_xml_convert (const target_desc *tdesc, const char *name)
1823 const char *xml = tdesc_get_features_xml (tdesc);
1825 if (xml == nullptr || *xml != '@')
1827 gdb_printf (_("Could not convert description for %s to xml.\n"),
1828 name);
1829 return false;
1832 const target_desc *tdesc_trans = string_read_description_xml (xml + 1);
1834 if (tdesc_trans == nullptr)
1836 gdb_printf (_("Could not convert description for %s from xml.\n"),
1837 name);
1838 return false;
1840 else if (*tdesc != *tdesc_trans)
1842 gdb_printf (_("Converted description for %s does not match.\n"),
1843 name);
1844 return false;
1846 return true;
1850 /* Check that the target descriptions created dynamically by
1851 architecture-specific code equal the descriptions created from XML files
1852 found in the specified directory DIR. */
1854 static void
1855 maintenance_check_xml_descriptions (const char *dir, int from_tty)
1857 if (dir == NULL)
1858 error (_("Missing dir name"));
1860 gdb::unique_xmalloc_ptr<char> dir1 (tilde_expand (dir));
1861 std::string feature_dir (dir1.get ());
1862 unsigned int failed = 0;
1864 for (auto const &e : selftests::xml_tdesc)
1866 std::string tdesc_xml = (feature_dir + SLASH_STRING + e.name);
1867 const target_desc *tdesc
1868 = file_read_description_xml (tdesc_xml.data ());
1870 if (tdesc == NULL || *tdesc != *e.tdesc)
1872 gdb_printf ( _("Descriptions for %s do not match.\n"), e.name);
1873 failed++;
1875 else if (!maintenance_check_tdesc_xml_convert (tdesc, e.name)
1876 || !maintenance_check_tdesc_xml_convert (e.tdesc.get (), e.name))
1877 failed++;
1879 gdb_printf (_("Tested %lu XML files, %d failed\n"),
1880 (long) selftests::xml_tdesc.size (), failed);
1883 void _initialize_target_descriptions ();
1884 void
1885 _initialize_target_descriptions ()
1887 cmd_list_element *cmd;
1889 add_setshow_prefix_cmd ("tdesc", class_maintenance,
1890 _("Set target description specific variables."),
1891 _("Show target description specific variables."),
1892 &tdesc_set_cmdlist, &tdesc_show_cmdlist,
1893 &setlist, &showlist);
1895 add_basic_prefix_cmd ("tdesc", class_maintenance, _("\
1896 Unset target description specific variables."),
1897 &tdesc_unset_cmdlist,
1898 0 /* allow-unknown */, &unsetlist);
1900 add_setshow_filename_cmd ("filename", class_obscure,
1901 &tdesc_filename_cmd_string,
1902 _("\
1903 Set the file to read for an XML target description."), _("\
1904 Show the file to read for an XML target description."), _("\
1905 When set, GDB will read the target description from a local\n\
1906 file instead of querying the remote target."),
1907 set_tdesc_filename_cmd,
1908 show_tdesc_filename_cmd,
1909 &tdesc_set_cmdlist, &tdesc_show_cmdlist);
1911 add_cmd ("filename", class_obscure, unset_tdesc_filename_cmd, _("\
1912 Unset the file to read for an XML target description.\n\
1913 When unset, GDB will read the description from the target."),
1914 &tdesc_unset_cmdlist);
1916 auto grp = make_maint_print_c_tdesc_options_def_group (nullptr);
1917 static std::string help_text
1918 = gdb::option::build_help (_("\
1919 Print the current target description as a C source file.\n\
1920 Usage: maintenance print c-tdesc [OPTION] [FILENAME]\n\
1922 Options:\n\
1923 %OPTIONS%\n\
1925 When FILENAME is not provided then print the current target\n\
1926 description, otherwise an XML target description is read from\n\
1927 FILENAME and printed as a C function.\n\
1929 When '-single-feature' is used then the target description should\n\
1930 contain a single feature and the generated C code will only create\n\
1931 that feature within an already existing target_desc object."), grp);
1932 cmd = add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd,
1933 help_text.c_str (), &maintenanceprintlist);
1934 set_cmd_completer_handle_brkchars (cmd, maint_print_c_tdesc_cmd_completer);
1936 cmd = add_cmd ("xml-tdesc", class_maintenance, maint_print_xml_tdesc_cmd, _("\
1937 Print the current target description as an XML file."),
1938 &maintenanceprintlist);
1939 set_cmd_completer (cmd, deprecated_filename_completer);
1941 cmd = add_cmd ("xml-descriptions", class_maintenance,
1942 maintenance_check_xml_descriptions, _("\
1943 Check equality of GDB target descriptions and XML created descriptions.\n\
1944 Check the target descriptions created in GDB equal the descriptions\n\
1945 created from XML files in the directory.\n\
1946 The parameter is the directory name."),
1947 &maintenancechecklist);
1948 set_cmd_completer (cmd, deprecated_filename_completer);