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