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