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