Home | History | Annotate | Line # | Download | only in gdb
target-descriptions.c revision 1.1.1.9
      1 /* Target description support for GDB.
      2 
      3    Copyright (C) 2006-2024 Free Software Foundation, Inc.
      4 
      5    Contributed by CodeSourcery.
      6 
      7    This file is part of GDB.
      8 
      9    This program is free software; you can redistribute it and/or modify
     10    it under the terms of the GNU General Public License as published by
     11    the Free Software Foundation; either version 3 of the License, or
     12    (at your option) any later version.
     13 
     14    This program is distributed in the hope that it will be useful,
     15    but WITHOUT ANY WARRANTY; without even the implied warranty of
     16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17    GNU General Public License for more details.
     18 
     19    You should have received a copy of the GNU General Public License
     20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     21 
     22 #include "arch-utils.h"
     23 #include "cli/cli-cmds.h"
     24 #include "gdbtypes.h"
     25 #include "reggroups.h"
     26 #include "target.h"
     27 #include "target-descriptions.h"
     28 #include "xml-support.h"
     29 #include "xml-tdesc.h"
     30 #include "osabi.h"
     31 
     32 #include "gdbsupport/gdb_obstack.h"
     33 #include "hashtab.h"
     34 #include "inferior.h"
     35 #include <algorithm>
     36 #include "completer.h"
     37 #include "readline/tilde.h"
     38 
     39 /* Types.  */
     40 
     41 struct property
     42 {
     43   property (const std::string &key_, const std::string &value_)
     44   : key (key_), value (value_)
     45   {}
     46 
     47   std::string key;
     48   std::string value;
     49 };
     50 
     51 /* Convert a tdesc_type to a gdb type.  */
     52 
     53 static type *
     54 make_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *ttype)
     55 {
     56   class gdb_type_creator : public tdesc_element_visitor
     57   {
     58   public:
     59     gdb_type_creator (struct gdbarch *gdbarch)
     60       : m_gdbarch (gdbarch)
     61     {}
     62 
     63     type *get_type ()
     64     {
     65       return m_type;
     66     }
     67 
     68     void visit (const tdesc_type_builtin *e) override
     69     {
     70       switch (e->kind)
     71 	{
     72 	  /* Predefined types.  */
     73 	case TDESC_TYPE_BOOL:
     74 	  m_type = builtin_type (m_gdbarch)->builtin_bool;
     75 	  return;
     76 	case TDESC_TYPE_INT8:
     77 	  m_type = builtin_type (m_gdbarch)->builtin_int8;
     78 	  return;
     79 	case TDESC_TYPE_INT16:
     80 	  m_type = builtin_type (m_gdbarch)->builtin_int16;
     81 	  return;
     82 	case TDESC_TYPE_INT32:
     83 	  m_type = builtin_type (m_gdbarch)->builtin_int32;
     84 	  return;
     85 	case TDESC_TYPE_INT64:
     86 	  m_type = builtin_type (m_gdbarch)->builtin_int64;
     87 	  return;
     88 	case TDESC_TYPE_INT128:
     89 	  m_type = builtin_type (m_gdbarch)->builtin_int128;
     90 	  return;
     91 	case TDESC_TYPE_UINT8:
     92 	  m_type = builtin_type (m_gdbarch)->builtin_uint8;
     93 	  return;
     94 	case TDESC_TYPE_UINT16:
     95 	  m_type = builtin_type (m_gdbarch)->builtin_uint16;
     96 	  return;
     97 	case TDESC_TYPE_UINT32:
     98 	  m_type = builtin_type (m_gdbarch)->builtin_uint32;
     99 	  return;
    100 	case TDESC_TYPE_UINT64:
    101 	  m_type = builtin_type (m_gdbarch)->builtin_uint64;
    102 	  return;
    103 	case TDESC_TYPE_UINT128:
    104 	  m_type = builtin_type (m_gdbarch)->builtin_uint128;
    105 	  return;
    106 	case TDESC_TYPE_CODE_PTR:
    107 	  m_type = builtin_type (m_gdbarch)->builtin_func_ptr;
    108 	  return;
    109 	case TDESC_TYPE_DATA_PTR:
    110 	  m_type = builtin_type (m_gdbarch)->builtin_data_ptr;
    111 	  return;
    112 	}
    113 
    114       m_type = tdesc_find_type (m_gdbarch, e->name.c_str ());
    115       if (m_type != NULL)
    116 	return;
    117 
    118       type_allocator alloc (m_gdbarch);
    119       switch (e->kind)
    120 	{
    121 	case TDESC_TYPE_IEEE_HALF:
    122 	  m_type = init_float_type (alloc, -1, "builtin_type_ieee_half",
    123 				    floatformats_ieee_half);
    124 	  return;
    125 
    126 	case TDESC_TYPE_IEEE_SINGLE:
    127 	  m_type = init_float_type (alloc, -1, "builtin_type_ieee_single",
    128 				    floatformats_ieee_single);
    129 	  return;
    130 
    131 	case TDESC_TYPE_IEEE_DOUBLE:
    132 	  m_type = init_float_type (alloc, -1, "builtin_type_ieee_double",
    133 				    floatformats_ieee_double);
    134 	  return;
    135 	case TDESC_TYPE_ARM_FPA_EXT:
    136 	  m_type = init_float_type (alloc, -1, "builtin_type_arm_ext",
    137 				    floatformats_arm_ext);
    138 	  return;
    139 
    140 	case TDESC_TYPE_I387_EXT:
    141 	  m_type = init_float_type (alloc, -1, "builtin_type_i387_ext",
    142 				    floatformats_i387_ext);
    143 	  return;
    144 
    145 	case TDESC_TYPE_BFLOAT16:
    146 	  m_type = init_float_type (alloc, -1, "builtin_type_bfloat16",
    147 				    floatformats_bfloat16);
    148 	  return;
    149 	}
    150 
    151       internal_error ("Type \"%s\" has an unknown kind %d",
    152 		      e->name.c_str (), e->kind);
    153     }
    154 
    155     void visit (const tdesc_type_vector *e) override
    156     {
    157       m_type = tdesc_find_type (m_gdbarch, e->name.c_str ());
    158       if (m_type != NULL)
    159 	return;
    160 
    161       type *element_gdb_type = make_gdb_type (m_gdbarch, e->element_type);
    162       m_type = init_vector_type (element_gdb_type, e->count);
    163       m_type->set_name (xstrdup (e->name.c_str ()));
    164       return;
    165     }
    166 
    167     void visit (const tdesc_type_with_fields *e) override
    168     {
    169       m_type = tdesc_find_type (m_gdbarch, e->name.c_str ());
    170       if (m_type != NULL)
    171 	return;
    172 
    173       switch (e->kind)
    174 	{
    175 	case TDESC_TYPE_STRUCT:
    176 	  make_gdb_type_struct (e);
    177 	  return;
    178 	case TDESC_TYPE_UNION:
    179 	  make_gdb_type_union (e);
    180 	  return;
    181 	case TDESC_TYPE_FLAGS:
    182 	  make_gdb_type_flags (e);
    183 	  return;
    184 	case TDESC_TYPE_ENUM:
    185 	  make_gdb_type_enum (e);
    186 	  return;
    187 	}
    188 
    189       internal_error ("Type \"%s\" has an unknown kind %d",
    190 		      e->name.c_str (), e->kind);
    191     }
    192 
    193   private:
    194 
    195     void make_gdb_type_struct (const tdesc_type_with_fields *e)
    196     {
    197       m_type = arch_composite_type (m_gdbarch, NULL, TYPE_CODE_STRUCT);
    198       m_type->set_name (xstrdup (e->name.c_str ()));
    199 
    200       for (const tdesc_type_field &f : e->fields)
    201 	{
    202 	  if (f.start != -1 && f.end != -1)
    203 	    {
    204 	      /* Bitfield.  */
    205 	      struct field *fld;
    206 	      struct type *field_gdb_type;
    207 	      int bitsize, total_size;
    208 
    209 	      /* This invariant should be preserved while creating types.  */
    210 	      gdb_assert (e->size != 0);
    211 	      if (f.type != NULL)
    212 		field_gdb_type = make_gdb_type (m_gdbarch, f.type);
    213 	      else if (e->size > 4)
    214 		field_gdb_type = builtin_type (m_gdbarch)->builtin_uint64;
    215 	      else
    216 		field_gdb_type = builtin_type (m_gdbarch)->builtin_uint32;
    217 
    218 	      fld = append_composite_type_field_raw
    219 		      (m_type, xstrdup (f.name.c_str ()), field_gdb_type);
    220 
    221 	      /* For little-endian, BITPOS counts from the LSB of
    222 		 the structure and marks the LSB of the field.  For
    223 		 big-endian, BITPOS counts from the MSB of the
    224 		 structure and marks the MSB of the field.  Either
    225 		 way, it is the number of bits to the "left" of the
    226 		 field.  To calculate this in big-endian, we need
    227 		 the total size of the structure.  */
    228 	      bitsize = f.end - f.start + 1;
    229 	      total_size = e->size * TARGET_CHAR_BIT;
    230 	      if (gdbarch_byte_order (m_gdbarch) == BFD_ENDIAN_BIG)
    231 		fld->set_loc_bitpos (total_size - f.start - bitsize);
    232 	      else
    233 		fld->set_loc_bitpos (f.start);
    234 	      fld->set_bitsize (bitsize);
    235 	    }
    236 	  else
    237 	    {
    238 	      gdb_assert (f.start == -1 && f.end == -1);
    239 	      type *field_gdb_type = make_gdb_type (m_gdbarch, f.type);
    240 	      append_composite_type_field (m_type,
    241 					   xstrdup (f.name.c_str ()),
    242 					   field_gdb_type);
    243 	    }
    244 	}
    245 
    246       if (e->size != 0)
    247 	m_type->set_length (e->size);
    248     }
    249 
    250     void make_gdb_type_union (const tdesc_type_with_fields *e)
    251     {
    252       m_type = arch_composite_type (m_gdbarch, NULL, TYPE_CODE_UNION);
    253       m_type->set_name (xstrdup (e->name.c_str ()));
    254 
    255       for (const tdesc_type_field &f : e->fields)
    256 	{
    257 	  type* field_gdb_type = make_gdb_type (m_gdbarch, f.type);
    258 	  append_composite_type_field (m_type, xstrdup (f.name.c_str ()),
    259 				       field_gdb_type);
    260 
    261 	  /* If any of the children of a union are vectors, flag the
    262 	     union as a vector also.  This allows e.g. a union of two
    263 	     vector types to show up automatically in "info vector".  */
    264 	  if (field_gdb_type->is_vector ())
    265 	    m_type->set_is_vector (true);
    266 	}
    267     }
    268 
    269     void make_gdb_type_flags (const tdesc_type_with_fields *e)
    270     {
    271       m_type = arch_flags_type (m_gdbarch, e->name.c_str (),
    272 				e->size * TARGET_CHAR_BIT);
    273 
    274       for (const tdesc_type_field &f : e->fields)
    275 	{
    276 	  int bitsize = f.end - f.start + 1;
    277 
    278 	  gdb_assert (f.type != NULL);
    279 	  type *field_gdb_type = make_gdb_type (m_gdbarch, f.type);
    280 	  append_flags_type_field (m_type, f.start, bitsize,
    281 				   field_gdb_type, f.name.c_str ());
    282 	}
    283     }
    284 
    285     void make_gdb_type_enum (const tdesc_type_with_fields *e)
    286     {
    287       m_type = (type_allocator (m_gdbarch)
    288 		.new_type (TYPE_CODE_ENUM, e->size * TARGET_CHAR_BIT,
    289 			   e->name.c_str ()));
    290 
    291       m_type->set_is_unsigned (true);
    292 
    293       for (const tdesc_type_field &f : e->fields)
    294 	{
    295 	  struct field *fld
    296 	    = append_composite_type_field_raw (m_type,
    297 					       xstrdup (f.name.c_str ()),
    298 					       NULL);
    299 
    300 	  fld->set_loc_enumval (f.start);
    301 	}
    302     }
    303 
    304     /* The gdbarch used.  */
    305     struct gdbarch *m_gdbarch;
    306 
    307     /* The type created.  */
    308     type *m_type;
    309   };
    310 
    311   gdb_type_creator gdb_type (gdbarch);
    312   ttype->accept (gdb_type);
    313   return gdb_type.get_type ();
    314 }
    315 
    316 /* Wrapper around bfd_arch_info_type.  A class with this name is used in
    317    the API that is shared between gdb and gdbserver code, but gdbserver
    318    doesn't use compatibility information, so its version of this class is
    319    empty.  */
    320 
    321 class tdesc_compatible_info
    322 {
    323 public:
    324   /* Constructor.  */
    325   explicit tdesc_compatible_info (const bfd_arch_info_type *arch)
    326     : m_arch (arch)
    327   { /* Nothing.  */ }
    328 
    329   /* Access the contained pointer.  */
    330   const bfd_arch_info_type *arch () const
    331   { return m_arch; }
    332 
    333 private:
    334   /* Architecture information looked up from the <compatible> entity within
    335      a target description.  */
    336   const bfd_arch_info_type *m_arch;
    337 };
    338 
    339 /* A target description.  */
    340 
    341 struct target_desc : tdesc_element
    342 {
    343   target_desc ()
    344   {}
    345 
    346   virtual ~target_desc () = default;
    347 
    348   target_desc (const target_desc &) = delete;
    349   void operator= (const target_desc &) = delete;
    350 
    351   /* The architecture reported by the target, if any.  */
    352   const struct bfd_arch_info *arch = NULL;
    353 
    354   /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN
    355      otherwise.  */
    356   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
    357 
    358   /* The list of compatible architectures reported by the target.  */
    359   std::vector<tdesc_compatible_info_up> compatible;
    360 
    361   /* Any architecture-specific properties specified by the target.  */
    362   std::vector<property> properties;
    363 
    364   /* The features associated with this target.  */
    365   std::vector<tdesc_feature_up> features;
    366 
    367   /* Used to cache the generated xml version of the target description.  */
    368   mutable char *xmltarget = nullptr;
    369 
    370   void accept (tdesc_element_visitor &v) const override
    371   {
    372     v.visit_pre (this);
    373 
    374     for (const tdesc_feature_up &feature : features)
    375       feature->accept (v);
    376 
    377     v.visit_post (this);
    378   }
    379 
    380   bool operator== (const target_desc &other) const
    381   {
    382     if (arch != other.arch)
    383       return false;
    384 
    385     if (osabi != other.osabi)
    386       return false;
    387 
    388     if (features.size () != other.features.size ())
    389       return false;
    390 
    391     for (int ix = 0; ix < features.size (); ix++)
    392       {
    393 	const tdesc_feature_up &feature1 = features[ix];
    394 	const tdesc_feature_up &feature2 = other.features[ix];
    395 
    396 	if (feature1 != feature2 && *feature1 != *feature2)
    397 	  return false;
    398       }
    399 
    400     return true;
    401   }
    402 
    403   bool operator!= (const target_desc &other) const
    404   {
    405     return !(*this == other);
    406   }
    407 };
    408 
    409 /* Per-architecture data associated with a target description.  The
    410    target description may be shared by multiple architectures, but
    411    this data is private to one gdbarch.  */
    412 
    413 struct tdesc_arch_reg
    414 {
    415   tdesc_arch_reg (tdesc_reg *reg_, struct type *type_)
    416   : reg (reg_), type (type_)
    417   {}
    418 
    419   struct tdesc_reg *reg;
    420   struct type *type;
    421 };
    422 
    423 struct tdesc_arch_data
    424 {
    425   /* A list of register/type pairs, indexed by GDB's internal register number.
    426      During initialization of the gdbarch this list is used to store
    427      registers which the architecture assigns a fixed register number.
    428      Registers which are NULL in this array, or off the end, are
    429      treated as zero-sized and nameless (i.e. placeholders in the
    430      numbering).  */
    431   std::vector<tdesc_arch_reg> arch_regs;
    432 
    433   /* Functions which report the register name, type, and reggroups for
    434      pseudo-registers.  */
    435   gdbarch_register_name_ftype *pseudo_register_name = NULL;
    436   gdbarch_register_type_ftype *pseudo_register_type = NULL;
    437   gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p = NULL;
    438 };
    439 
    440 /* A handle for architecture-specific data associated with the
    441    target description (see struct tdesc_arch_data).  */
    442 
    443 static const registry<gdbarch>::key<tdesc_arch_data> tdesc_data;
    444 
    445 /* Get or create the tdesc_data.  */
    446 static tdesc_arch_data *
    447 get_arch_data (struct gdbarch *gdbarch)
    448 {
    449   tdesc_arch_data *result = tdesc_data.get (gdbarch);
    450   if (result == nullptr)
    451     result = tdesc_data.emplace (gdbarch);
    452   return result;
    453 }
    454 
    455 /* The string manipulated by the "set tdesc filename ..." command.  */
    456 
    457 static std::string tdesc_filename_cmd_string;
    458 
    459 /* Fetch the current target's description, and switch the current
    460    architecture to one which incorporates that description.  */
    461 
    462 void
    463 target_find_description (void)
    464 {
    465   target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
    466 
    467   /* If we've already fetched a description from the target, don't do
    468      it again.  This allows a target to fetch the description early,
    469      during its to_open or to_create_inferior, if it needs extra
    470      information about the target to initialize.  */
    471   if (tdesc_info->fetched)
    472     return;
    473 
    474   /* The current architecture should not have any target description
    475      specified.  It should have been cleared, e.g. when we
    476      disconnected from the previous target.  */
    477   gdb_assert (gdbarch_target_desc (current_inferior ()->arch ()) == NULL);
    478 
    479   /* First try to fetch an XML description from the user-specified
    480      file.  */
    481   tdesc_info->tdesc = nullptr;
    482   if (!tdesc_info->filename.empty ())
    483     tdesc_info->tdesc = file_read_description_xml (tdesc_info->filename.data ());
    484 
    485   /* Next try to read the description from the current target using
    486      target objects.  */
    487   if (tdesc_info->tdesc == nullptr)
    488     tdesc_info->tdesc = target_read_description_xml
    489       (current_inferior ()->top_target ());
    490 
    491   /* If that failed try a target-specific hook.  */
    492   if (tdesc_info->tdesc == nullptr)
    493     tdesc_info->tdesc = target_read_description
    494       (current_inferior ()->top_target ());
    495 
    496   /* If a non-NULL description was returned, then update the current
    497      architecture.  */
    498   if (tdesc_info->tdesc != nullptr)
    499     {
    500       struct gdbarch_info info;
    501 
    502       info.target_desc = tdesc_info->tdesc;
    503       if (!gdbarch_update_p (info))
    504 	{
    505 	  warning (_("Architecture rejected target-supplied description"));
    506 	  tdesc_info->tdesc = nullptr;
    507 	}
    508       else
    509 	{
    510 	  struct tdesc_arch_data *data;
    511 
    512 	  data = get_arch_data (current_inferior ()->arch ());
    513 	  if (tdesc_has_registers (tdesc_info->tdesc)
    514 	      && data->arch_regs.empty ())
    515 	    warning (_("Target-supplied registers are not supported "
    516 		       "by the current architecture"));
    517 	}
    518     }
    519 
    520   /* Now that we know this description is usable, record that we
    521      fetched it.  */
    522   tdesc_info->fetched = true;
    523 }
    524 
    525 /* Discard any description fetched from the current target, and switch
    526    the current architecture to one with no target description.  */
    527 
    528 void
    529 target_clear_description (void)
    530 {
    531   target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
    532 
    533   if (!tdesc_info->fetched)
    534     return;
    535 
    536   tdesc_info->fetched = false;
    537   tdesc_info->tdesc = nullptr;
    538 
    539   gdbarch_info info;
    540   if (!gdbarch_update_p (info))
    541     internal_error (_("Could not remove target-supplied description"));
    542 }
    543 
    544 /* Return the global current target description.  This should only be
    545    used by gdbarch initialization code; most access should be through
    546    an existing gdbarch.  */
    547 
    548 const struct target_desc *
    549 target_current_description (void)
    550 {
    551   target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
    552 
    553   if (tdesc_info->fetched)
    554     return tdesc_info->tdesc;
    555 
    556   return NULL;
    557 }
    558 
    559 /* Return non-zero if this target description is compatible
    560    with the given BFD architecture.  */
    561 
    562 int
    563 tdesc_compatible_p (const struct target_desc *target_desc,
    564 		    const struct bfd_arch_info *arch)
    565 {
    566   for (const tdesc_compatible_info_up &compat : target_desc->compatible)
    567     {
    568       if (compat->arch () == arch
    569 	  || arch->compatible (arch, compat->arch ())
    570 	  || compat->arch ()->compatible (compat->arch (), arch))
    571 	return 1;
    572     }
    573 
    574   return 0;
    575 }
    576 
    577 
    579 /* Direct accessors for target descriptions.  */
    580 
    581 /* Return the string value of a property named KEY, or NULL if the
    582    property was not specified.  */
    583 
    584 const char *
    585 tdesc_property (const struct target_desc *target_desc, const char *key)
    586 {
    587   for (const property &prop : target_desc->properties)
    588     if (prop.key == key)
    589       return prop.value.c_str ();
    590 
    591   return NULL;
    592 }
    593 
    594 /* Return the BFD architecture associated with this target
    595    description, or NULL if no architecture was specified.  */
    596 
    597 const struct bfd_arch_info *
    598 tdesc_architecture (const struct target_desc *target_desc)
    599 {
    600   return target_desc->arch;
    601 }
    602 
    603 /* See gdbsupport/tdesc.h.  */
    604 
    605 const char *
    606 tdesc_architecture_name (const struct target_desc *target_desc)
    607 {
    608   if (target_desc->arch != NULL)
    609     return target_desc->arch->printable_name;
    610   return NULL;
    611 }
    612 
    613 /* See gdbsupport/tdesc.h.  */
    614 
    615 const std::vector<tdesc_compatible_info_up> &
    616 tdesc_compatible_info_list (const target_desc *target_desc)
    617 {
    618   return target_desc->compatible;
    619 }
    620 
    621 /* See gdbsupport/tdesc.h.  */
    622 
    623 const char *
    624 tdesc_compatible_info_arch_name (const tdesc_compatible_info_up &compatible)
    625 {
    626   return compatible->arch ()->printable_name;
    627 }
    628 
    629 /* Return the OSABI associated with this target description, or
    630    GDB_OSABI_UNKNOWN if no osabi was specified.  */
    631 
    632 enum gdb_osabi
    633 tdesc_osabi (const struct target_desc *target_desc)
    634 {
    635   return target_desc->osabi;
    636 }
    637 
    638 /* See gdbsupport/tdesc.h.  */
    639 
    640 const char *
    641 tdesc_osabi_name (const struct target_desc *target_desc)
    642 {
    643   enum gdb_osabi osabi = tdesc_osabi (target_desc);
    644   if (osabi > GDB_OSABI_UNKNOWN && osabi < GDB_OSABI_INVALID)
    645     return gdbarch_osabi_name (osabi);
    646   return nullptr;
    647 }
    648 
    649 /* Return 1 if this target description includes any registers.  */
    650 
    651 int
    652 tdesc_has_registers (const struct target_desc *target_desc)
    653 {
    654   if (target_desc == NULL)
    655     return 0;
    656 
    657   for (const tdesc_feature_up &feature : target_desc->features)
    658     if (!feature->registers.empty ())
    659       return 1;
    660 
    661   return 0;
    662 }
    663 
    664 /* Return the feature with the given name, if present, or NULL if
    665    the named feature is not found.  */
    666 
    667 const struct tdesc_feature *
    668 tdesc_find_feature (const struct target_desc *target_desc,
    669 		    const char *name)
    670 {
    671   for (const tdesc_feature_up &feature : target_desc->features)
    672     if (feature->name == name)
    673       return feature.get ();
    674 
    675   return NULL;
    676 }
    677 
    678 /* Return the name of FEATURE.  */
    679 
    680 const char *
    681 tdesc_feature_name (const struct tdesc_feature *feature)
    682 {
    683   return feature->name.c_str ();
    684 }
    685 
    686 /* Lookup type associated with ID.  */
    687 
    688 struct type *
    689 tdesc_find_type (struct gdbarch *gdbarch, const char *id)
    690 {
    691   tdesc_arch_data *data = get_arch_data (gdbarch);
    692 
    693   for (const tdesc_arch_reg &reg : data->arch_regs)
    694     {
    695       if (reg.reg
    696 	  && reg.reg->tdesc_type
    697 	  && reg.type
    698 	  && reg.reg->tdesc_type->name == id)
    699 	return reg.type;
    700     }
    701 
    702   return NULL;
    703 }
    704 
    705 /* Support for registers from target descriptions.  */
    706 
    707 /* Construct the per-gdbarch data.  */
    708 
    709 tdesc_arch_data_up
    710 tdesc_data_alloc (void)
    711 {
    712   return tdesc_arch_data_up (new tdesc_arch_data ());
    713 }
    714 
    715 /* See target-descriptions.h.  */
    716 
    717 void
    718 tdesc_arch_data_deleter::operator() (struct tdesc_arch_data *data) const
    719 {
    720   delete data;
    721 }
    722 
    723 /* Search FEATURE for a register named NAME.  */
    724 
    725 static struct tdesc_reg *
    726 tdesc_find_register_early (const struct tdesc_feature *feature,
    727 			   const char *name)
    728 {
    729   for (const tdesc_reg_up &reg : feature->registers)
    730     if (strcasecmp (reg->name.c_str (), name) == 0)
    731       return reg.get ();
    732 
    733   return NULL;
    734 }
    735 
    736 /* Search FEATURE for a register named NAME.  Assign REGNO to it.  */
    737 
    738 int
    739 tdesc_numbered_register (const struct tdesc_feature *feature,
    740 			 struct tdesc_arch_data *data,
    741 			 int regno, const char *name)
    742 {
    743   struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
    744 
    745   if (reg == NULL)
    746     return 0;
    747 
    748   /* Make sure the vector includes a REGNO'th element.  */
    749   while (regno >= data->arch_regs.size ())
    750     data->arch_regs.emplace_back (nullptr, nullptr);
    751 
    752   data->arch_regs[regno] = tdesc_arch_reg (reg, NULL);
    753 
    754   return 1;
    755 }
    756 
    757 /* Search FEATURE for a register named NAME, but do not assign a fixed
    758    register number to it.  */
    759 
    760 int
    761 tdesc_unnumbered_register (const struct tdesc_feature *feature,
    762 			   const char *name)
    763 {
    764   struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
    765 
    766   if (reg == NULL)
    767     return 0;
    768 
    769   return 1;
    770 }
    771 
    772 /* Search FEATURE for a register whose name is in NAMES and assign
    773    REGNO to it.  */
    774 
    775 int
    776 tdesc_numbered_register_choices (const struct tdesc_feature *feature,
    777 				 struct tdesc_arch_data *data,
    778 				 int regno, const char *const names[])
    779 {
    780   int i;
    781 
    782   for (i = 0; names[i] != NULL; i++)
    783     if (tdesc_numbered_register (feature, data, regno, names[i]))
    784       return 1;
    785 
    786   return 0;
    787 }
    788 
    789 /* See target-descriptions.h.  */
    790 
    791 bool
    792 tdesc_found_register (struct tdesc_arch_data *data, int regno)
    793 {
    794   gdb_assert (regno >= 0);
    795 
    796   return (regno < data->arch_regs.size ()
    797 	  && data->arch_regs[regno].reg != nullptr);
    798 }
    799 
    800 /* Search FEATURE for a register named NAME, and return its size in
    801    bits.  The register must exist.  */
    802 
    803 int
    804 tdesc_register_bitsize (const struct tdesc_feature *feature, const char *name)
    805 {
    806   struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
    807 
    808   gdb_assert (reg != NULL);
    809   return reg->bitsize;
    810 }
    811 
    812 /* Look up a register by its GDB internal register number.  */
    813 
    814 static struct tdesc_arch_reg *
    815 tdesc_find_arch_register (struct gdbarch *gdbarch, int regno)
    816 {
    817   struct tdesc_arch_data *data = get_arch_data (gdbarch);
    818 
    819   if (regno < data->arch_regs.size ())
    820     return &data->arch_regs[regno];
    821   else
    822     return NULL;
    823 }
    824 
    825 static struct tdesc_reg *
    826 tdesc_find_register (struct gdbarch *gdbarch, int regno)
    827 {
    828   struct tdesc_arch_reg *reg = tdesc_find_arch_register (gdbarch, regno);
    829 
    830   return reg? reg->reg : NULL;
    831 }
    832 
    833 /* Return the name of register REGNO, from the target description or
    834    from an architecture-provided pseudo_register_name method.  */
    835 
    836 const char *
    837 tdesc_register_name (struct gdbarch *gdbarch, int regno)
    838 {
    839   struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
    840   int num_regs = gdbarch_num_regs (gdbarch);
    841 
    842   if (reg != NULL)
    843     return reg->name.c_str ();
    844 
    845   if (regno >= num_regs && regno < gdbarch_num_cooked_regs (gdbarch))
    846     {
    847       struct tdesc_arch_data *data = get_arch_data (gdbarch);
    848 
    849       gdb_assert (data->pseudo_register_name != NULL);
    850       return data->pseudo_register_name (gdbarch, regno);
    851     }
    852 
    853   return "";
    854 }
    855 
    856 struct type *
    857 tdesc_register_type (struct gdbarch *gdbarch, int regno)
    858 {
    859   struct tdesc_arch_reg *arch_reg = tdesc_find_arch_register (gdbarch, regno);
    860   struct tdesc_reg *reg = arch_reg? arch_reg->reg : NULL;
    861   int num_regs = gdbarch_num_regs (gdbarch);
    862   int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
    863 
    864   if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs)
    865     {
    866       struct tdesc_arch_data *data = get_arch_data (gdbarch);
    867 
    868       gdb_assert (data->pseudo_register_type != NULL);
    869       return data->pseudo_register_type (gdbarch, regno);
    870     }
    871 
    872   if (reg == NULL)
    873     /* Return "int0_t", since "void" has a misleading size of one.  */
    874     return builtin_type (gdbarch)->builtin_int0;
    875 
    876   if (arch_reg->type == NULL)
    877     {
    878       /* First check for a predefined or target defined type.  */
    879       if (reg->tdesc_type)
    880 	arch_reg->type = make_gdb_type (gdbarch, reg->tdesc_type);
    881 
    882       /* Next try size-sensitive type shortcuts.  */
    883       else if (reg->type == "float")
    884 	{
    885 	  if (reg->bitsize == gdbarch_float_bit (gdbarch))
    886 	    arch_reg->type = builtin_type (gdbarch)->builtin_float;
    887 	  else if (reg->bitsize == gdbarch_double_bit (gdbarch))
    888 	    arch_reg->type = builtin_type (gdbarch)->builtin_double;
    889 	  else if (reg->bitsize == gdbarch_long_double_bit (gdbarch))
    890 	    arch_reg->type = builtin_type (gdbarch)->builtin_long_double;
    891 	  else
    892 	    {
    893 	      warning (_("Register \"%s\" has an unsupported size (%d bits)"),
    894 		       reg->name.c_str (), reg->bitsize);
    895 	      arch_reg->type = builtin_type (gdbarch)->builtin_double;
    896 	    }
    897 	}
    898       else if (reg->type == "int")
    899 	{
    900 	  if (reg->bitsize == gdbarch_long_bit (gdbarch))
    901 	    arch_reg->type = builtin_type (gdbarch)->builtin_long;
    902 	  else if (reg->bitsize == TARGET_CHAR_BIT)
    903 	    arch_reg->type = builtin_type (gdbarch)->builtin_char;
    904 	  else if (reg->bitsize == gdbarch_short_bit (gdbarch))
    905 	    arch_reg->type = builtin_type (gdbarch)->builtin_short;
    906 	  else if (reg->bitsize == gdbarch_int_bit (gdbarch))
    907 	    arch_reg->type = builtin_type (gdbarch)->builtin_int;
    908 	  else if (reg->bitsize == gdbarch_long_long_bit (gdbarch))
    909 	    arch_reg->type = builtin_type (gdbarch)->builtin_long_long;
    910 	  else if (reg->bitsize == gdbarch_ptr_bit (gdbarch))
    911 	  /* A bit desperate by this point...  */
    912 	    arch_reg->type = builtin_type (gdbarch)->builtin_data_ptr;
    913 	  else
    914 	    {
    915 	      warning (_("Register \"%s\" has an unsupported size (%d bits)"),
    916 		       reg->name.c_str (), reg->bitsize);
    917 	      arch_reg->type = builtin_type (gdbarch)->builtin_long;
    918 	    }
    919 	}
    920 
    921       if (arch_reg->type == NULL)
    922 	internal_error ("Register \"%s\" has an unknown type \"%s\"",
    923 			reg->name.c_str (), reg->type.c_str ());
    924     }
    925 
    926   return arch_reg->type;
    927 }
    928 
    929 static int
    930 tdesc_remote_register_number (struct gdbarch *gdbarch, int regno)
    931 {
    932   struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
    933 
    934   if (reg != NULL)
    935     return reg->target_regnum;
    936   else
    937     return -1;
    938 }
    939 
    940 /* Check whether REGNUM is a member of REGGROUP.  Registers from the
    941    target description may be classified as general, float, vector or other
    942    register groups registered with reggroup_add().  Unlike a gdbarch
    943    register_reggroup_p method, this function will return -1 if it does not
    944    know; the caller should handle registers with no specified group.
    945 
    946    The names of containing features are not used.  This might be extended
    947    to display registers in some more useful groupings.
    948 
    949    The save-restore flag is also implemented here.  */
    950 
    951 int
    952 tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
    953 			      const struct reggroup *reggroup)
    954 {
    955   struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
    956 
    957   if (reg != NULL && !reg->group.empty ()
    958       && (reg->group == reggroup->name ()))
    959 	return 1;
    960 
    961   if (reg != NULL
    962       && (reggroup == save_reggroup || reggroup == restore_reggroup))
    963     return reg->save_restore;
    964 
    965   return -1;
    966 }
    967 
    968 /* Check whether REGNUM is a member of REGGROUP.  Registers with no
    969    group specified go to the default reggroup function and are handled
    970    by type.  */
    971 
    972 static int
    973 tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
    974 			   const struct reggroup *reggroup)
    975 {
    976   int num_regs = gdbarch_num_regs (gdbarch);
    977   int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
    978   int ret;
    979 
    980   if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
    981     {
    982       struct tdesc_arch_data *data = get_arch_data (gdbarch);
    983 
    984       if (data->pseudo_register_reggroup_p != NULL)
    985 	return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup);
    986       /* Otherwise fall through to the default reggroup_p.  */
    987     }
    988 
    989   ret = tdesc_register_in_reggroup_p (gdbarch, regno, reggroup);
    990   if (ret != -1)
    991     return ret;
    992 
    993   return default_register_reggroup_p (gdbarch, regno, reggroup);
    994 }
    995 
    996 /* Record architecture-specific functions to call for pseudo-register
    997    support.  */
    998 
    999 void
   1000 set_tdesc_pseudo_register_name (struct gdbarch *gdbarch,
   1001 				gdbarch_register_name_ftype *pseudo_name)
   1002 {
   1003   struct tdesc_arch_data *data = get_arch_data (gdbarch);
   1004 
   1005   data->pseudo_register_name = pseudo_name;
   1006 }
   1007 
   1008 void
   1009 set_tdesc_pseudo_register_type (struct gdbarch *gdbarch,
   1010 				gdbarch_register_type_ftype *pseudo_type)
   1011 {
   1012   struct tdesc_arch_data *data = get_arch_data (gdbarch);
   1013 
   1014   data->pseudo_register_type = pseudo_type;
   1015 }
   1016 
   1017 void
   1018 set_tdesc_pseudo_register_reggroup_p
   1019   (struct gdbarch *gdbarch,
   1020    gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
   1021 {
   1022   struct tdesc_arch_data *data = get_arch_data (gdbarch);
   1023 
   1024   data->pseudo_register_reggroup_p = pseudo_reggroup_p;
   1025 }
   1026 
   1027 /* Update GDBARCH to use the target description for registers.  */
   1028 
   1029 void
   1030 tdesc_use_registers (struct gdbarch *gdbarch,
   1031 		     const struct target_desc *target_desc,
   1032 		     tdesc_arch_data_up &&early_data,
   1033 		     tdesc_unknown_register_ftype unk_reg_cb)
   1034 {
   1035   int num_regs = gdbarch_num_regs (gdbarch);
   1036   struct tdesc_arch_data *data;
   1037 
   1038   /* We can't use the description for registers if it doesn't describe
   1039      any.  This function should only be called after validating
   1040      registers, so the caller should know that registers are
   1041      included.  */
   1042   gdb_assert (tdesc_has_registers (target_desc));
   1043 
   1044   data = get_arch_data (gdbarch);
   1045   data->arch_regs = std::move (early_data->arch_regs);
   1046 
   1047   /* Build up a set of all registers, so that we can assign register
   1048      numbers where needed.  The hash table expands as necessary, so
   1049      the initial size is arbitrary.  */
   1050   htab_up reg_hash (htab_create (37, htab_hash_pointer, htab_eq_pointer,
   1051 				 NULL));
   1052   for (const tdesc_feature_up &feature : target_desc->features)
   1053     for (const tdesc_reg_up &reg : feature->registers)
   1054       {
   1055 	void **slot = htab_find_slot (reg_hash.get (), reg.get (), INSERT);
   1056 
   1057 	*slot = reg.get ();
   1058 	/* Add reggroup if its new.  */
   1059 	if (!reg->group.empty ())
   1060 	  if (reggroup_find (gdbarch, reg->group.c_str ()) == NULL)
   1061 	    reggroup_add (gdbarch, reggroup_gdbarch_new (gdbarch,
   1062 							 reg->group.c_str (),
   1063 							 USER_REGGROUP));
   1064       }
   1065 
   1066   /* Remove any registers which were assigned numbers by the
   1067      architecture.  */
   1068   for (const tdesc_arch_reg &arch_reg : data->arch_regs)
   1069     if (arch_reg.reg != NULL)
   1070       htab_remove_elt (reg_hash.get (), arch_reg.reg);
   1071 
   1072   /* Assign numbers to the remaining registers and add them to the
   1073      list of registers.  The new numbers are always above gdbarch_num_regs.
   1074      Iterate over the features, not the hash table, so that the order
   1075      matches that in the target description.  */
   1076 
   1077   gdb_assert (data->arch_regs.size () <= num_regs);
   1078   while (data->arch_regs.size () < num_regs)
   1079     data->arch_regs.emplace_back (nullptr, nullptr);
   1080 
   1081   /* First we give the target a chance to number previously unknown
   1082      registers.  This allows targets to record the numbers assigned based
   1083      on which feature the register was from.  */
   1084   if (unk_reg_cb != NULL)
   1085     {
   1086       for (const tdesc_feature_up &feature : target_desc->features)
   1087 	for (const tdesc_reg_up &reg : feature->registers)
   1088 	  if (htab_find (reg_hash.get (), reg.get ()) != NULL)
   1089 	    {
   1090 	      int regno = unk_reg_cb (gdbarch, feature.get (),
   1091 				      reg->name.c_str (), num_regs);
   1092 	      gdb_assert (regno == -1 || regno >= num_regs);
   1093 	      if (regno != -1)
   1094 		{
   1095 		  while (regno >= data->arch_regs.size ())
   1096 		    data->arch_regs.emplace_back (nullptr, nullptr);
   1097 		  data->arch_regs[regno] = tdesc_arch_reg (reg.get (), NULL);
   1098 		  num_regs = regno + 1;
   1099 		  htab_remove_elt (reg_hash.get (), reg.get ());
   1100 		}
   1101 	    }
   1102     }
   1103 
   1104   /* Ensure the array was sized correctly above.  */
   1105   gdb_assert (data->arch_regs.size () == num_regs);
   1106 
   1107   /* Now in a final pass we assign register numbers to any remaining
   1108      unnumbered registers.  */
   1109   for (const tdesc_feature_up &feature : target_desc->features)
   1110     for (const tdesc_reg_up &reg : feature->registers)
   1111       if (htab_find (reg_hash.get (), reg.get ()) != NULL)
   1112 	{
   1113 	  data->arch_regs.emplace_back (reg.get (), nullptr);
   1114 	  num_regs++;
   1115 	}
   1116 
   1117   /* Update the architecture.  */
   1118   set_gdbarch_num_regs (gdbarch, num_regs);
   1119   set_gdbarch_register_name (gdbarch, tdesc_register_name);
   1120   set_gdbarch_register_type (gdbarch, tdesc_register_type);
   1121   set_gdbarch_remote_register_number (gdbarch,
   1122 				      tdesc_remote_register_number);
   1123   set_gdbarch_register_reggroup_p (gdbarch, tdesc_register_reggroup_p);
   1124 }
   1125 
   1126 /* See gdbsupport/tdesc.h.  */
   1127 
   1128 struct tdesc_feature *
   1129 tdesc_create_feature (struct target_desc *tdesc, const char *name)
   1130 {
   1131   struct tdesc_feature *new_feature = new tdesc_feature (name);
   1132 
   1133   tdesc->features.emplace_back (new_feature);
   1134 
   1135   return new_feature;
   1136 }
   1137 
   1138 /* See gdbsupport/tdesc.h.  */
   1139 
   1140 target_desc_up
   1141 allocate_target_description (void)
   1142 {
   1143   return target_desc_up (new target_desc ());
   1144 }
   1145 
   1146 /* See gdbsupport/tdesc.h.  */
   1147 
   1148 void
   1149 target_desc_deleter::operator() (struct target_desc *target_desc) const
   1150 {
   1151   delete target_desc;
   1152 }
   1153 
   1154 void
   1155 tdesc_add_compatible (struct target_desc *target_desc,
   1156 		      const struct bfd_arch_info *compatible)
   1157 {
   1158   /* If this instance of GDB is compiled without BFD support for the
   1159      compatible architecture, simply ignore it -- we would not be able
   1160      to handle it anyway.  */
   1161   if (compatible == NULL)
   1162     return;
   1163 
   1164   for (const tdesc_compatible_info_up &compat : target_desc->compatible)
   1165     if (compat->arch () == compatible)
   1166       internal_error (_("Attempted to add duplicate "
   1167 			"compatible architecture \"%s\""),
   1168 		      compatible->printable_name);
   1169 
   1170   target_desc->compatible.push_back
   1171     (std::unique_ptr<tdesc_compatible_info>
   1172      (new tdesc_compatible_info (compatible)));
   1173 }
   1174 
   1175 void
   1176 set_tdesc_property (struct target_desc *target_desc,
   1177 		    const char *key, const char *value)
   1178 {
   1179   gdb_assert (key != NULL && value != NULL);
   1180 
   1181   if (tdesc_property (target_desc, key) != NULL)
   1182     internal_error (_("Attempted to add duplicate property \"%s\""), key);
   1183 
   1184   target_desc->properties.emplace_back (key, value);
   1185 }
   1186 
   1187 /* See gdbsupport/tdesc.h.  */
   1188 
   1189 void
   1190 set_tdesc_architecture (struct target_desc *target_desc,
   1191 			const char *name)
   1192 {
   1193   set_tdesc_architecture (target_desc, bfd_scan_arch (name));
   1194 }
   1195 
   1196 void
   1197 set_tdesc_architecture (struct target_desc *target_desc,
   1198 			const struct bfd_arch_info *arch)
   1199 {
   1200   target_desc->arch = arch;
   1201 }
   1202 
   1203 /* See gdbsupport/tdesc.h.  */
   1204 
   1205 void
   1206 set_tdesc_osabi (struct target_desc *target_desc, const char *name)
   1207 {
   1208   set_tdesc_osabi (target_desc, osabi_from_tdesc_string (name));
   1209 }
   1210 
   1211 void
   1212 set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
   1213 {
   1214   target_desc->osabi = osabi;
   1215 }
   1216 
   1217 
   1219 static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
   1220 static struct cmd_list_element *tdesc_unset_cmdlist;
   1221 
   1222 /* Helper functions for the CLI commands.  */
   1223 
   1224 static void
   1225 set_tdesc_filename_cmd (const char *args, int from_tty,
   1226 			struct cmd_list_element *c)
   1227 {
   1228   target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
   1229 
   1230   tdesc_info->filename = tdesc_filename_cmd_string;
   1231 
   1232   target_clear_description ();
   1233   target_find_description ();
   1234 }
   1235 
   1236 static void
   1237 show_tdesc_filename_cmd (struct ui_file *file, int from_tty,
   1238 			 struct cmd_list_element *c,
   1239 			 const char *value)
   1240 {
   1241   value = current_inferior ()->tdesc_info.filename.data ();
   1242 
   1243   if (value != NULL && *value != '\0')
   1244     gdb_printf (file,
   1245 		_("The target description will be read from \"%s\".\n"),
   1246 		value);
   1247   else
   1248     gdb_printf (file,
   1249 		_("The target description will be "
   1250 		  "read from the target.\n"));
   1251 }
   1252 
   1253 static void
   1254 unset_tdesc_filename_cmd (const char *args, int from_tty)
   1255 {
   1256   target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
   1257 
   1258   tdesc_info->filename.clear ();
   1259   target_clear_description ();
   1260   target_find_description ();
   1261 }
   1262 
   1263 /* Print target description in C.  */
   1264 
   1265 class print_c_tdesc : public tdesc_element_visitor
   1266 {
   1267 public:
   1268   print_c_tdesc (std::string &filename_after_features)
   1269     : m_filename_after_features (filename_after_features)
   1270   {
   1271     const char *inp;
   1272     char *outp;
   1273     const char *filename = lbasename (m_filename_after_features.c_str ());
   1274 
   1275     m_function = (char *) xmalloc (strlen (filename) + 1);
   1276     for (inp = filename, outp = m_function; *inp != '\0'; inp++)
   1277       if (*inp == '.')
   1278 	break;
   1279       else if (*inp == '-')
   1280 	*outp++ = '_';
   1281       else if (*inp == ' ')
   1282 	*outp++ = '_';
   1283       else
   1284 	*outp++ = *inp;
   1285     *outp = '\0';
   1286 
   1287     /* Standard boilerplate.  */
   1288     gdb_printf ("/* THIS FILE IS GENERATED.  "
   1289 		"-*- buffer-read-only: t -*- vi"
   1290 		":set ro:\n");
   1291   }
   1292 
   1293   ~print_c_tdesc ()
   1294   {
   1295     xfree (m_function);
   1296   }
   1297 
   1298   void visit_pre (const target_desc *e) override
   1299   {
   1300     gdb_printf ("  Original: %s */\n\n",
   1301 		lbasename (m_filename_after_features.c_str ()));
   1302 
   1303     gdb_printf ("#include \"osabi.h\"\n");
   1304     gdb_printf ("#include \"target-descriptions.h\"\n");
   1305     gdb_printf ("\n");
   1306 
   1307     gdb_printf ("const struct target_desc *tdesc_%s;\n", m_function);
   1308     gdb_printf ("static void\n");
   1309     gdb_printf ("initialize_tdesc_%s (void)\n", m_function);
   1310     gdb_printf ("{\n");
   1311     gdb_printf
   1312       ("  target_desc_up result = allocate_target_description ();\n");
   1313 
   1314     if (tdesc_architecture (e) != NULL)
   1315       {
   1316 	gdb_printf
   1317 	  ("  set_tdesc_architecture (result.get (), bfd_scan_arch (\"%s\"));\n",
   1318 	   tdesc_architecture (e)->printable_name);
   1319 	gdb_printf ("\n");
   1320       }
   1321     if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN
   1322 	&& tdesc_osabi (e) < GDB_OSABI_INVALID)
   1323       {
   1324 	gdb_printf
   1325 	  ("  set_tdesc_osabi (result.get (), osabi_from_tdesc_string (\"%s\"));\n",
   1326 	   gdbarch_osabi_name (tdesc_osabi (e)));
   1327 	gdb_printf ("\n");
   1328       }
   1329 
   1330     for (const tdesc_compatible_info_up &compatible : e->compatible)
   1331       gdb_printf
   1332 	("  tdesc_add_compatible (result.get (), bfd_scan_arch (\"%s\"));\n",
   1333 	 compatible->arch ()->printable_name);
   1334 
   1335     if (!e->compatible.empty ())
   1336       gdb_printf ("\n");
   1337 
   1338     for (const property &prop : e->properties)
   1339       gdb_printf ("  set_tdesc_property (result.get (), \"%s\", \"%s\");\n",
   1340 		  prop.key.c_str (), prop.value.c_str ());
   1341 
   1342     gdb_printf ("  struct tdesc_feature *feature;\n");
   1343   }
   1344 
   1345   void visit_pre (const tdesc_feature *e) override
   1346   {
   1347     gdb_printf ("\n  feature = tdesc_create_feature (result.get (), \"%s\");\n",
   1348 		e->name.c_str ());
   1349   }
   1350 
   1351   void visit_post (const tdesc_feature *e) override
   1352   {}
   1353 
   1354   void visit_post (const target_desc *e) override
   1355   {
   1356     gdb_printf ("\n  tdesc_%s = result.release ();\n", m_function);
   1357     gdb_printf ("}\n");
   1358   }
   1359 
   1360   void visit (const tdesc_type_builtin *type) override
   1361   {
   1362     error (_("C output is not supported type \"%s\"."), type->name.c_str ());
   1363   }
   1364 
   1365   void visit (const tdesc_type_vector *type) override
   1366   {
   1367     if (!m_printed_element_type)
   1368       {
   1369 	gdb_printf ("  tdesc_type *element_type;\n");
   1370 	m_printed_element_type = true;
   1371       }
   1372 
   1373     gdb_printf
   1374       ("  element_type = tdesc_named_type (feature, \"%s\");\n",
   1375        type->element_type->name.c_str ());
   1376     gdb_printf
   1377       ("  tdesc_create_vector (feature, \"%s\", element_type, %d);\n",
   1378        type->name.c_str (), type->count);
   1379 
   1380     gdb_printf ("\n");
   1381   }
   1382 
   1383   void visit (const tdesc_type_with_fields *type) override
   1384   {
   1385     if (!m_printed_type_with_fields)
   1386       {
   1387 	gdb_printf ("  tdesc_type_with_fields *type_with_fields;\n");
   1388 	m_printed_type_with_fields = true;
   1389       }
   1390 
   1391     switch (type->kind)
   1392       {
   1393       case TDESC_TYPE_STRUCT:
   1394       case TDESC_TYPE_FLAGS:
   1395 	if (type->kind == TDESC_TYPE_STRUCT)
   1396 	  {
   1397 	    gdb_printf
   1398 	      ("  type_with_fields = tdesc_create_struct (feature, \"%s\");\n",
   1399 	       type->name.c_str ());
   1400 	    if (type->size != 0)
   1401 	      gdb_printf
   1402 		("  tdesc_set_struct_size (type_with_fields, %d);\n", type->size);
   1403 	  }
   1404 	else
   1405 	  {
   1406 	    gdb_printf
   1407 	      ("  type_with_fields = tdesc_create_flags (feature, \"%s\", %d);\n",
   1408 	       type->name.c_str (), type->size);
   1409 	  }
   1410 	for (const tdesc_type_field &f : type->fields)
   1411 	  {
   1412 	    const char *type_name;
   1413 
   1414 	    gdb_assert (f.type != NULL);
   1415 	    type_name = f.type->name.c_str ();
   1416 
   1417 	    /* To minimize changes to generated files, don't emit type
   1418 	       info for fields that have defaulted types.  */
   1419 	    if (f.start != -1)
   1420 	      {
   1421 		gdb_assert (f.end != -1);
   1422 		if (f.type->kind == TDESC_TYPE_BOOL)
   1423 		  {
   1424 		    gdb_assert (f.start == f.end);
   1425 		    gdb_printf
   1426 		      ("  tdesc_add_flag (type_with_fields, %d, \"%s\");\n",
   1427 		       f.start, f.name.c_str ());
   1428 		  }
   1429 		else if ((type->size == 4 && f.type->kind == TDESC_TYPE_UINT32)
   1430 			 || (type->size == 8
   1431 			     && f.type->kind == TDESC_TYPE_UINT64))
   1432 		  {
   1433 		    gdb_printf
   1434 		      ("  tdesc_add_bitfield (type_with_fields, \"%s\", %d, %d);\n",
   1435 		       f.name.c_str (), f.start, f.end);
   1436 		  }
   1437 		else
   1438 		  {
   1439 		    printf_field_type_assignment
   1440 		      ("tdesc_named_type (feature, \"%s\");\n",
   1441 		       type_name);
   1442 		    gdb_printf
   1443 		      ("  tdesc_add_typed_bitfield (type_with_fields, \"%s\","
   1444 		       " %d, %d, field_type);\n",
   1445 		       f.name.c_str (), f.start, f.end);
   1446 		  }
   1447 	      }
   1448 	    else /* Not a bitfield.  */
   1449 	      {
   1450 		gdb_assert (f.end == -1);
   1451 		gdb_assert (type->kind == TDESC_TYPE_STRUCT);
   1452 		printf_field_type_assignment
   1453 		  ("tdesc_named_type (feature, \"%s\");\n", type_name);
   1454 		gdb_printf
   1455 		  ("  tdesc_add_field (type_with_fields, \"%s\", field_type);\n",
   1456 		   f.name.c_str ());
   1457 	      }
   1458 	  }
   1459 	break;
   1460       case TDESC_TYPE_UNION:
   1461 	gdb_printf
   1462 	  ("  type_with_fields = tdesc_create_union (feature, \"%s\");\n",
   1463 	   type->name.c_str ());
   1464 	for (const tdesc_type_field &f : type->fields)
   1465 	  {
   1466 	    printf_field_type_assignment
   1467 	      ("tdesc_named_type (feature, \"%s\");\n", f.type->name.c_str ());
   1468 	    gdb_printf
   1469 	      ("  tdesc_add_field (type_with_fields, \"%s\", field_type);\n",
   1470 	       f.name.c_str ());
   1471 	  }
   1472 	break;
   1473       case TDESC_TYPE_ENUM:
   1474 	gdb_printf
   1475 	  ("  type_with_fields = tdesc_create_enum (feature, \"%s\", %d);\n",
   1476 	   type->name.c_str (), type->size);
   1477 	for (const tdesc_type_field &f : type->fields)
   1478 	  gdb_printf
   1479 	    ("  tdesc_add_enum_value (type_with_fields, %d, \"%s\");\n",
   1480 	     f.start, f.name.c_str ());
   1481 	break;
   1482       default:
   1483 	error (_("C output is not supported type \"%s\"."), type->name.c_str ());
   1484       }
   1485 
   1486     gdb_printf ("\n");
   1487   }
   1488 
   1489   void visit (const tdesc_reg *reg) override
   1490   {
   1491     gdb_printf ("  tdesc_create_reg (feature, \"%s\", %ld, %d, ",
   1492 		reg->name.c_str (), reg->target_regnum,
   1493 		reg->save_restore);
   1494     if (!reg->group.empty ())
   1495       gdb_printf ("\"%s\", ", reg->group.c_str ());
   1496     else
   1497       gdb_printf ("NULL, ");
   1498     gdb_printf ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
   1499   }
   1500 
   1501 protected:
   1502   std::string m_filename_after_features;
   1503 
   1504 private:
   1505 
   1506   /* Print an assignment to the field_type variable.  Print the declaration
   1507      of field_type if that has not been done yet.  */
   1508   ATTRIBUTE_PRINTF (2, 3)
   1509   void printf_field_type_assignment (const char *fmt, ...)
   1510   {
   1511     if (!m_printed_field_type)
   1512       {
   1513 	gdb_printf ("  tdesc_type *field_type;\n");
   1514 	m_printed_field_type = true;
   1515       }
   1516 
   1517     gdb_printf ("  field_type = ");
   1518 
   1519     va_list args;
   1520     va_start (args, fmt);
   1521     gdb_vprintf (fmt, args);
   1522     va_end (args);
   1523   }
   1524 
   1525   char *m_function;
   1526 
   1527   /* Did we print "struct tdesc_type *element_type;" yet?  */
   1528   bool m_printed_element_type = false;
   1529 
   1530   /* Did we print "struct tdesc_type_with_fields *element_type;" yet?  */
   1531   bool m_printed_type_with_fields = false;
   1532 
   1533   /* Did we print "struct tdesc_type *field_type;" yet?  */
   1534   bool m_printed_field_type = false;
   1535 };
   1536 
   1537 /* Print target description feature in C.  */
   1538 
   1539 class print_c_feature : public print_c_tdesc
   1540 {
   1541 public:
   1542   print_c_feature (std::string &file)
   1543     : print_c_tdesc (file)
   1544   {
   1545     /* Trim ".tmp".  */
   1546     auto const pos = m_filename_after_features.find_last_of ('.');
   1547 
   1548     m_filename_after_features = m_filename_after_features.substr (0, pos);
   1549   }
   1550 
   1551   void visit_pre (const target_desc *e) override
   1552   {
   1553     gdb_printf ("  Original: %s */\n\n",
   1554 		lbasename (m_filename_after_features.c_str ()));
   1555 
   1556     gdb_printf ("#include \"gdbsupport/tdesc.h\"\n");
   1557     gdb_printf ("\n");
   1558   }
   1559 
   1560   void visit_post (const target_desc *e) override
   1561   {}
   1562 
   1563   void visit_pre (const tdesc_feature *e) override
   1564   {
   1565     std::string name (m_filename_after_features);
   1566 
   1567     auto pos = name.find_first_of ('.');
   1568 
   1569     name = name.substr (0, pos);
   1570     std::replace (name.begin (), name.end (), '/', '_');
   1571     std::replace (name.begin (), name.end (), '-', '_');
   1572 
   1573     gdb_printf ("static int\n");
   1574     gdb_printf ("create_feature_%s ", name.c_str ());
   1575     gdb_printf ("(struct target_desc *result, long regnum)\n");
   1576 
   1577     gdb_printf ("{\n");
   1578     gdb_printf ("  struct tdesc_feature *feature;\n");
   1579 
   1580     gdb_printf
   1581       ("\n  feature = tdesc_create_feature (result, \"%s\");\n",
   1582        e->name.c_str ());
   1583   }
   1584 
   1585   void visit_post (const tdesc_feature *e) override
   1586   {
   1587     gdb_printf ("  return regnum;\n");
   1588     gdb_printf ("}\n");
   1589   }
   1590 
   1591   void visit (const tdesc_reg *reg) override
   1592   {
   1593     /* Most "reg" in XML target descriptions don't have "regnum"
   1594        attribute, so the register number is allocated sequentially.
   1595        In case that reg has "regnum" attribute, register number
   1596        should be set by that explicitly.  */
   1597 
   1598     if (reg->target_regnum < m_next_regnum)
   1599       {
   1600 	/* The integrity check, it can catch some errors on register
   1601 	   number collision, like this,
   1602 
   1603 	  <reg name="x0" bitsize="32"/>
   1604 	  <reg name="x1" bitsize="32"/>
   1605 	  <reg name="x2" bitsize="32"/>
   1606 	  <reg name="x3" bitsize="32"/>
   1607 	  <reg name="ps" bitsize="32" regnum="3"/>
   1608 
   1609 	  but it also has false negatives.  The target description
   1610 	  below is correct,
   1611 
   1612 	  <reg name="x1" bitsize="32" regnum="1"/>
   1613 	  <reg name="x3" bitsize="32" regnum="3"/>
   1614 	  <reg name="x2" bitsize="32" regnum="2"/>
   1615 	  <reg name="x4" bitsize="32" regnum="4"/>
   1616 
   1617 	  but it is not a good practice, so still error on this,
   1618 	  and also print the message so that it can be saved in the
   1619 	  generated c file.  */
   1620 
   1621 	gdb_printf ("ERROR: \"regnum\" attribute %ld ",
   1622 		    reg->target_regnum);
   1623 	gdb_printf ("is not the largest number (%d).\n",
   1624 		    m_next_regnum);
   1625 	error (_("\"regnum\" attribute %ld is not the largest number (%d)."),
   1626 	       reg->target_regnum, m_next_regnum);
   1627       }
   1628 
   1629     if (reg->target_regnum > m_next_regnum)
   1630       {
   1631 	gdb_printf ("  regnum = %ld;\n", reg->target_regnum);
   1632 	m_next_regnum = reg->target_regnum;
   1633       }
   1634 
   1635     gdb_printf ("  tdesc_create_reg (feature, \"%s\", regnum++, %d, ",
   1636 		reg->name.c_str (), reg->save_restore);
   1637     if (!reg->group.empty ())
   1638       gdb_printf ("\"%s\", ", reg->group.c_str ());
   1639     else
   1640       gdb_printf ("NULL, ");
   1641     gdb_printf ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ());
   1642 
   1643     m_next_regnum++;
   1644   }
   1645 
   1646 private:
   1647   /* The register number to use for the next register we see.  */
   1648   int m_next_regnum = 0;
   1649 };
   1650 
   1651 /* See gdbsupport/tdesc.h.  */
   1652 
   1653 const char *
   1654 tdesc_get_features_xml (const target_desc *tdesc)
   1655 {
   1656   if (tdesc->xmltarget == nullptr)
   1657     {
   1658       std::string buffer ("@");
   1659       print_xml_feature v (&buffer);
   1660       tdesc->accept (v);
   1661       tdesc->xmltarget = xstrdup (buffer.c_str ());
   1662     }
   1663   return tdesc->xmltarget;
   1664 }
   1665 
   1666 /* Data structures and functions to setup the option flags for 'maintenance
   1667    print c-tdesc command.  */
   1668 
   1669 struct maint_print_c_tdesc_options
   1670 {
   1671   /* True when the '-single-feature' flag was passed.  */
   1672   bool single_feature = false;
   1673 };
   1674 
   1675 using maint_print_c_tdesc_opt_def
   1676   = gdb::option::flag_option_def<maint_print_c_tdesc_options>;
   1677 
   1678 static const gdb::option::option_def maint_print_c_tdesc_opt_defs[] = {
   1679   maint_print_c_tdesc_opt_def {
   1680     "single-feature",
   1681     [] (maint_print_c_tdesc_options *opt) { return &opt->single_feature; },
   1682     N_("Print C description of just a single feature.")
   1683   },
   1684 };
   1685 
   1686 static inline gdb::option::option_def_group
   1687 make_maint_print_c_tdesc_options_def_group (maint_print_c_tdesc_options *opts)
   1688 {
   1689   return {{maint_print_c_tdesc_opt_defs}, opts};
   1690 }
   1691 
   1692 /* Implement 'maintenance print c-tdesc' command.  */
   1693 
   1694 static void
   1695 maint_print_c_tdesc_cmd (const char *args, int from_tty)
   1696 {
   1697   const struct target_desc *tdesc;
   1698   const char *filename;
   1699 
   1700   maint_print_c_tdesc_options opts;
   1701   auto grp = make_maint_print_c_tdesc_options_def_group (&opts);
   1702   gdb::option::process_options
   1703     (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
   1704 
   1705   if (args == NULL)
   1706     {
   1707       /* Use the global target-supplied description, not the current
   1708 	 architecture's.  This lets a GDB for one architecture generate C
   1709 	 for another architecture's description, even though the gdbarch
   1710 	 initialization code will reject the new description.  */
   1711       target_desc_info *tdesc_info = &current_inferior ()->tdesc_info;
   1712       tdesc = tdesc_info->tdesc;
   1713       filename = tdesc_info->filename.data ();
   1714     }
   1715   else
   1716     {
   1717       /* Use the target description from the XML file.  */
   1718       filename = args;
   1719       tdesc = file_read_description_xml (filename);
   1720     }
   1721 
   1722   if (tdesc == NULL)
   1723     error (_("There is no target description to print."));
   1724 
   1725   if (filename == NULL)
   1726     filename = "fetched from target";
   1727 
   1728   std::string filename_after_features (filename);
   1729   auto loc = filename_after_features.rfind ("/features/");
   1730 
   1731   if (loc != std::string::npos)
   1732     filename_after_features = filename_after_features.substr (loc + 10);
   1733 
   1734   /* Print c files for target features instead of target descriptions,
   1735      because c files got from target features are more flexible than the
   1736      counterparts.  */
   1737   if (opts.single_feature)
   1738     {
   1739       if (tdesc->features.size () != 1)
   1740 	error (_("only target descriptions with 1 feature can be used "
   1741 		 "with -single-feature option"));
   1742 
   1743       print_c_feature v (filename_after_features);
   1744 
   1745       tdesc->accept (v);
   1746     }
   1747   else
   1748     {
   1749       print_c_tdesc v (filename_after_features);
   1750 
   1751       tdesc->accept (v);
   1752     }
   1753 }
   1754 
   1755 /* Completer for the "backtrace" command.  */
   1756 
   1757 static void
   1758 maint_print_c_tdesc_cmd_completer (struct cmd_list_element *ignore,
   1759 				   completion_tracker &tracker,
   1760 				   const char *text, const char *word)
   1761 {
   1762   auto grp = make_maint_print_c_tdesc_options_def_group (nullptr);
   1763   if (gdb::option::complete_options
   1764       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
   1765     return;
   1766 
   1767   word = advance_to_filename_complete_word_point (tracker, text);
   1768   filename_completer (ignore, tracker, text, word);
   1769 }
   1770 
   1771 /* Implement the maintenance print xml-tdesc command.  */
   1772 
   1773 static void
   1774 maint_print_xml_tdesc_cmd (const char *args, int from_tty)
   1775 {
   1776   const struct target_desc *tdesc;
   1777 
   1778   if (args == NULL)
   1779     {
   1780       /* Use the global target-supplied description, not the current
   1781 	 architecture's.  This lets a GDB for one architecture generate XML
   1782 	 for another architecture's description, even though the gdbarch
   1783 	 initialization code will reject the new description.  */
   1784       tdesc = current_inferior ()->tdesc_info.tdesc;
   1785     }
   1786   else
   1787     {
   1788       /* Use the target description from the XML file.  */
   1789       tdesc = file_read_description_xml (args);
   1790     }
   1791 
   1792   if (tdesc == NULL)
   1793     error (_("There is no target description to print."));
   1794 
   1795   std::string buf;
   1796   print_xml_feature v (&buf);
   1797   tdesc->accept (v);
   1798   gdb_puts (buf.c_str ());
   1799 }
   1800 
   1801 namespace selftests {
   1802 
   1803 /* A reference target description, used for testing (see record_xml_tdesc).  */
   1804 
   1805 struct xml_test_tdesc
   1806 {
   1807   xml_test_tdesc (const char *name, std::unique_ptr<const target_desc> &&tdesc)
   1808     : name (name), tdesc (std::move (tdesc))
   1809   {}
   1810 
   1811   const char *name;
   1812   std::unique_ptr<const target_desc> tdesc;
   1813 };
   1814 
   1815 static std::vector<xml_test_tdesc> xml_tdesc;
   1816 
   1817 #if GDB_SELF_TEST
   1818 
   1819 /* See target-descriptions.h.  */
   1820 
   1821 void
   1822 record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc)
   1823 {
   1824   xml_tdesc.emplace_back (xml_file, std::unique_ptr<const target_desc> (tdesc));
   1825 }
   1826 #endif
   1827 
   1828 }
   1829 
   1830 /* Test the conversion process of a target description to/from xml: Take a target
   1831    description TDESC, convert to xml, back to a description, and confirm the new
   1832    tdesc is identical to the original.  */
   1833 static bool
   1834 maintenance_check_tdesc_xml_convert (const target_desc *tdesc, const char *name)
   1835 {
   1836   const char *xml = tdesc_get_features_xml (tdesc);
   1837 
   1838   if (xml == nullptr || *xml != '@')
   1839     {
   1840       gdb_printf (_("Could not convert description for %s to xml.\n"),
   1841 		  name);
   1842       return false;
   1843     }
   1844 
   1845   const target_desc *tdesc_trans = string_read_description_xml (xml + 1);
   1846 
   1847   if (tdesc_trans == nullptr)
   1848     {
   1849       gdb_printf (_("Could not convert description for %s from xml.\n"),
   1850 		  name);
   1851       return false;
   1852     }
   1853   else if (*tdesc != *tdesc_trans)
   1854     {
   1855       gdb_printf (_("Converted description for %s does not match.\n"),
   1856 		  name);
   1857       return false;
   1858     }
   1859   return true;
   1860 }
   1861 
   1862 
   1863 /* Check that the target descriptions created dynamically by
   1864    architecture-specific code equal the descriptions created from XML files
   1865    found in the specified directory DIR.  */
   1866 
   1867 static void
   1868 maintenance_check_xml_descriptions (const char *dir, int from_tty)
   1869 {
   1870   if (dir == NULL)
   1871     error (_("Missing dir name"));
   1872 
   1873   gdb::unique_xmalloc_ptr<char> dir1 (tilde_expand (dir));
   1874   std::string feature_dir (dir1.get ());
   1875   unsigned int failed = 0;
   1876 
   1877   for (auto const &e : selftests::xml_tdesc)
   1878     {
   1879       std::string tdesc_xml = (feature_dir + SLASH_STRING + e.name);
   1880       const target_desc *tdesc
   1881 	= file_read_description_xml (tdesc_xml.data ());
   1882 
   1883       if (tdesc == NULL || *tdesc != *e.tdesc)
   1884 	{
   1885 	  gdb_printf ( _("Descriptions for %s do not match.\n"), e.name);
   1886 	  failed++;
   1887 	}
   1888       else if (!maintenance_check_tdesc_xml_convert (tdesc, e.name)
   1889 	       || !maintenance_check_tdesc_xml_convert (e.tdesc.get (), e.name))
   1890 	failed++;
   1891     }
   1892   gdb_printf (_("Tested %lu XML files, %d failed\n"),
   1893 	      (long) selftests::xml_tdesc.size (), failed);
   1894 }
   1895 
   1896 void _initialize_target_descriptions ();
   1897 void
   1898 _initialize_target_descriptions ()
   1899 {
   1900   cmd_list_element *cmd;
   1901 
   1902   add_setshow_prefix_cmd ("tdesc", class_maintenance,
   1903 			  _("Set target description specific variables."),
   1904 			  _("Show target description specific variables."),
   1905 			  &tdesc_set_cmdlist, &tdesc_show_cmdlist,
   1906 			  &setlist, &showlist);
   1907 
   1908   add_basic_prefix_cmd ("tdesc", class_maintenance, _("\
   1909 Unset target description specific variables."),
   1910 			&tdesc_unset_cmdlist,
   1911 			0 /* allow-unknown */, &unsetlist);
   1912 
   1913   add_setshow_filename_cmd ("filename", class_obscure,
   1914 			    &tdesc_filename_cmd_string,
   1915 			    _("\
   1916 Set the file to read for an XML target description."), _("\
   1917 Show the file to read for an XML target description."), _("\
   1918 When set, GDB will read the target description from a local\n\
   1919 file instead of querying the remote target."),
   1920 			    set_tdesc_filename_cmd,
   1921 			    show_tdesc_filename_cmd,
   1922 			    &tdesc_set_cmdlist, &tdesc_show_cmdlist);
   1923 
   1924   add_cmd ("filename", class_obscure, unset_tdesc_filename_cmd, _("\
   1925 Unset the file to read for an XML target description.\n\
   1926 When unset, GDB will read the description from the target."),
   1927 	   &tdesc_unset_cmdlist);
   1928 
   1929   auto grp = make_maint_print_c_tdesc_options_def_group (nullptr);
   1930   static std::string help_text
   1931     = gdb::option::build_help (_("\
   1932 Print the current target description as a C source file.\n\
   1933 Usage: maintenance print c-tdesc [OPTION] [FILENAME]\n\
   1934 \n\
   1935 Options:\n\
   1936 %OPTIONS%\n\
   1937 \n\
   1938 When FILENAME is not provided then print the current target\n\
   1939 description, otherwise an XML target description is read from\n\
   1940 FILENAME and printed as a C function.\n\
   1941 \n\
   1942 When '-single-feature' is used then the target description should\n\
   1943 contain a single feature and the generated C code will only create\n\
   1944 that feature within an already existing target_desc object."), grp);
   1945   cmd = add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd,
   1946 		 help_text.c_str (), &maintenanceprintlist);
   1947   set_cmd_completer_handle_brkchars (cmd, maint_print_c_tdesc_cmd_completer);
   1948 
   1949   cmd = add_cmd ("xml-tdesc", class_maintenance, maint_print_xml_tdesc_cmd, _("\
   1950 Print the current target description as an XML file."),
   1951 		 &maintenanceprintlist);
   1952   set_cmd_completer (cmd, filename_completer);
   1953 
   1954   cmd = add_cmd ("xml-descriptions", class_maintenance,
   1955 		 maintenance_check_xml_descriptions, _("\
   1956 Check equality of GDB target descriptions and XML created descriptions.\n\
   1957 Check the target descriptions created in GDB equal the descriptions\n\
   1958 created from XML files in the directory.\n\
   1959 The parameter is the directory name."),
   1960 		 &maintenancechecklist);
   1961   set_cmd_completer (cmd, filename_completer);
   1962 }
   1963