Constify some commands in target-descriptions.c
[external/binutils.git] / gdb / target-descriptions.c
1 /* Target description support for GDB.
2
3    Copyright (C) 2006-2017 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 "vec.h"
30 #include "xml-support.h"
31 #include "xml-tdesc.h"
32 #include "osabi.h"
33
34 #include "gdb_obstack.h"
35 #include "hashtab.h"
36 #include "inferior.h"
37 #include <algorithm>
38 #include "completer.h"
39 #include "readline/tilde.h" /* tilde_expand */
40
41 /* The interface to visit different elements of target description.  */
42
43 class tdesc_element_visitor
44 {
45 public:
46   virtual void visit_pre (const target_desc *e) = 0;
47   virtual void visit_post (const target_desc *e) = 0;
48
49   virtual void visit_pre (const tdesc_feature *e) = 0;
50   virtual void visit_post (const tdesc_feature *e) = 0;
51
52   virtual void visit (const tdesc_type *e) = 0;
53   virtual void visit (const tdesc_reg *e) = 0;
54 };
55
56 class tdesc_element
57 {
58 public:
59   virtual void accept (tdesc_element_visitor &v) const = 0;
60 };
61
62 /* Types.  */
63
64 typedef struct property
65 {
66   char *key;
67   char *value;
68 } property_s;
69 DEF_VEC_O(property_s);
70
71 /* An individual register from a target description.  */
72
73 typedef struct tdesc_reg : tdesc_element
74 {
75   tdesc_reg (struct tdesc_feature *feature, const char *name_,
76              int regnum, int save_restore_, const char *group_,
77              int bitsize_, const char *type_)
78     : name (xstrdup (name_)), target_regnum (regnum),
79       save_restore (save_restore_),
80       group (group_ != NULL ? xstrdup (group_) : NULL),
81       bitsize (bitsize_),
82       type (type_ != NULL ? xstrdup (type_) : xstrdup ("<unknown>"))
83   {
84     /* If the register's type is target-defined, look it up now.  We may not
85        have easy access to the containing feature when we want it later.  */
86     tdesc_type = tdesc_named_type (feature, type);
87   }
88
89   virtual ~tdesc_reg ()
90   {
91     xfree (name);
92     xfree (type);
93     xfree (group);
94   }
95
96   DISABLE_COPY_AND_ASSIGN (tdesc_reg);
97
98   /* The name of this register.  In standard features, it may be
99      recognized by the architecture support code, or it may be purely
100      for the user.  */
101   char *name;
102
103   /* The register number used by this target to refer to this
104      register.  This is used for remote p/P packets and to determine
105      the ordering of registers in the remote g/G packets.  */
106   long target_regnum;
107
108   /* If this flag is set, GDB should save and restore this register
109      around calls to an inferior function.  */
110   int save_restore;
111
112   /* The name of the register group containing this register, or NULL
113      if the group should be automatically determined from the
114      register's type.  If this is "general", "float", or "vector", the
115      corresponding "info" command should display this register's
116      value.  It can be an arbitrary string, but should be limited to
117      alphanumeric characters and internal hyphens.  Currently other
118      strings are ignored (treated as NULL).  */
119   char *group;
120
121   /* The size of the register, in bits.  */
122   int bitsize;
123
124   /* The type of the register.  This string corresponds to either
125      a named type from the target description or a predefined
126      type from GDB.  */
127   char *type;
128
129   /* The target-described type corresponding to TYPE, if found.  */
130   struct tdesc_type *tdesc_type;
131
132   void accept (tdesc_element_visitor &v) const override
133   {
134     v.visit (this);
135   }
136
137   bool operator== (const tdesc_reg &other) const
138   {
139     return (streq (name, other.name)
140             && target_regnum == other.target_regnum
141             && save_restore == other.save_restore
142             && bitsize == other.bitsize
143             && (group == other.group || streq (group, other.group))
144             && streq (type, other.type));
145   }
146
147   bool operator!= (const tdesc_reg &other) const
148   {
149     return !(*this == other);
150   }
151 } *tdesc_reg_p;
152 DEF_VEC_P(tdesc_reg_p);
153
154 /* A named type from a target description.  */
155
156 typedef struct tdesc_type_field
157 {
158   char *name;
159   struct tdesc_type *type;
160   /* For non-enum-values, either both are -1 (non-bitfield), or both are
161      not -1 (bitfield).  For enum values, start is the value (which could be
162      -1), end is -1.  */
163   int start, end;
164 } tdesc_type_field;
165 DEF_VEC_O(tdesc_type_field);
166
167 enum tdesc_type_kind
168 {
169   /* Predefined types.  */
170   TDESC_TYPE_BOOL,
171   TDESC_TYPE_INT8,
172   TDESC_TYPE_INT16,
173   TDESC_TYPE_INT32,
174   TDESC_TYPE_INT64,
175   TDESC_TYPE_INT128,
176   TDESC_TYPE_UINT8,
177   TDESC_TYPE_UINT16,
178   TDESC_TYPE_UINT32,
179   TDESC_TYPE_UINT64,
180   TDESC_TYPE_UINT128,
181   TDESC_TYPE_CODE_PTR,
182   TDESC_TYPE_DATA_PTR,
183   TDESC_TYPE_IEEE_SINGLE,
184   TDESC_TYPE_IEEE_DOUBLE,
185   TDESC_TYPE_ARM_FPA_EXT,
186   TDESC_TYPE_I387_EXT,
187
188   /* Types defined by a target feature.  */
189   TDESC_TYPE_VECTOR,
190   TDESC_TYPE_STRUCT,
191   TDESC_TYPE_UNION,
192   TDESC_TYPE_FLAGS,
193   TDESC_TYPE_ENUM
194 };
195
196 typedef struct tdesc_type : tdesc_element
197 {
198   tdesc_type (const char *name_, enum tdesc_type_kind kind_)
199     : name (xstrdup (name_)), kind (kind_)
200   {
201     memset (&u, 0, sizeof (u));
202   }
203
204   virtual ~tdesc_type ()
205   {
206     switch (kind)
207       {
208       case TDESC_TYPE_STRUCT:
209       case TDESC_TYPE_UNION:
210       case TDESC_TYPE_FLAGS:
211       case TDESC_TYPE_ENUM:
212         {
213           struct tdesc_type_field *f;
214           int ix;
215
216           for (ix = 0;
217                VEC_iterate (tdesc_type_field, u.u.fields, ix, f);
218                ix++)
219             xfree (f->name);
220
221           VEC_free (tdesc_type_field, u.u.fields);
222         }
223         break;
224
225       default:
226         break;
227       }
228     xfree ((char *) name);
229   }
230
231   DISABLE_COPY_AND_ASSIGN (tdesc_type);
232
233   /* The name of this type.  If this type is a built-in type, this is
234      a pointer to a constant string.  Otherwise, it's a
235      malloc-allocated string (and thus must be freed).  */
236   const char *name;
237
238   /* Identify the kind of this type.  */
239   enum tdesc_type_kind kind;
240
241   /* Kind-specific data.  */
242   union
243   {
244     /* Vector type.  */
245     struct
246     {
247       struct tdesc_type *type;
248       int count;
249     } v;
250
251     /* Struct, union, flags, or enum type.  */
252     struct
253     {
254       VEC(tdesc_type_field) *fields;
255       int size;
256     } u;
257   } u;
258
259   void accept (tdesc_element_visitor &v) const override
260   {
261     v.visit (this);
262   }
263
264   bool operator== (const tdesc_type &other) const
265   {
266     return (streq (name, other.name) && kind == other.kind);
267   }
268
269   bool operator!= (const tdesc_type &other) const
270   {
271     return !(*this == other);
272   }
273 } *tdesc_type_p;
274 DEF_VEC_P(tdesc_type_p);
275
276 /* A feature from a target description.  Each feature is a collection
277    of other elements, e.g. registers and types.  */
278
279 typedef struct tdesc_feature : tdesc_element
280 {
281   tdesc_feature (const char *name_)
282     : name (xstrdup (name_))
283   {}
284
285   virtual ~tdesc_feature ()
286   {
287     struct tdesc_reg *reg;
288     struct tdesc_type *type;
289     int ix;
290
291     for (ix = 0; VEC_iterate (tdesc_reg_p, registers, ix, reg); ix++)
292       delete reg;
293     VEC_free (tdesc_reg_p, registers);
294
295     for (ix = 0; VEC_iterate (tdesc_type_p, types, ix, type); ix++)
296       delete type;
297     VEC_free (tdesc_type_p, types);
298
299     xfree (name);
300   }
301
302   DISABLE_COPY_AND_ASSIGN (tdesc_feature);
303
304   /* The name of this feature.  It may be recognized by the architecture
305      support code.  */
306   char *name;
307
308   /* The registers associated with this feature.  */
309   VEC(tdesc_reg_p) *registers = NULL;
310
311   /* The types associated with this feature.  */
312   VEC(tdesc_type_p) *types = NULL;
313
314   void accept (tdesc_element_visitor &v) const override
315   {
316     v.visit_pre (this);
317
318     struct tdesc_type *type;
319
320     for (int ix = 0;
321          VEC_iterate (tdesc_type_p, types, ix, type);
322          ix++)
323       type->accept (v);
324
325     struct tdesc_reg *reg;
326
327     for (int ix = 0;
328          VEC_iterate (tdesc_reg_p, registers, ix, reg);
329          ix++)
330       reg->accept (v);
331
332
333     v.visit_post (this);
334   }
335
336   bool operator== (const tdesc_feature &other) const
337   {
338     if (strcmp (name, other.name) != 0)
339       return false;
340
341     if (VEC_length (tdesc_reg_p, registers)
342         != VEC_length (tdesc_reg_p, other.registers))
343       return false;
344
345     struct tdesc_reg *reg;
346
347     for (int ix = 0;
348          VEC_iterate (tdesc_reg_p, registers, ix, reg);
349          ix++)
350       {
351         tdesc_reg *reg2
352           = VEC_index (tdesc_reg_p, other.registers, ix);
353
354         if (reg != reg2 && *reg != *reg2)
355           return false;
356       }
357
358     if (VEC_length (tdesc_type_p, types)
359         != VEC_length (tdesc_type_p, other.types))
360       return false;
361
362     tdesc_type *type;
363
364     for (int ix = 0;
365          VEC_iterate (tdesc_type_p, types, ix, type);
366          ix++)
367       {
368         tdesc_type *type2
369           = VEC_index (tdesc_type_p, other.types, ix);
370
371         if (type != type2 && *type != *type2)
372           return false;
373       }
374
375     return true;
376   }
377
378   bool operator!= (const tdesc_feature &other) const
379   {
380     return !(*this == other);
381   }
382
383 } *tdesc_feature_p;
384 DEF_VEC_P(tdesc_feature_p);
385
386 /* A compatible architecture from a target description.  */
387 typedef const struct bfd_arch_info *arch_p;
388 DEF_VEC_P(arch_p);
389
390 /* A target description.  */
391
392 struct target_desc : tdesc_element
393 {
394   target_desc ()
395   {}
396
397   virtual ~target_desc ()
398   {
399     struct tdesc_feature *feature;
400     struct property *prop;
401     int ix;
402
403     for (ix = 0;
404          VEC_iterate (tdesc_feature_p, features, ix, feature);
405          ix++)
406       delete feature;
407     VEC_free (tdesc_feature_p, features);
408
409     for (ix = 0;
410          VEC_iterate (property_s, properties, ix, prop);
411          ix++)
412       {
413         xfree (prop->key);
414         xfree (prop->value);
415       }
416
417     VEC_free (property_s, properties);
418     VEC_free (arch_p, compatible);
419   }
420
421   target_desc (const target_desc &) = delete;
422   void operator= (const target_desc &) = delete;
423
424   /* The architecture reported by the target, if any.  */
425   const struct bfd_arch_info *arch = NULL;
426
427   /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN
428      otherwise.  */
429   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
430
431   /* The list of compatible architectures reported by the target.  */
432   VEC(arch_p) *compatible = NULL;
433
434   /* Any architecture-specific properties specified by the target.  */
435   VEC(property_s) *properties = NULL;
436
437   /* The features associated with this target.  */
438   VEC(tdesc_feature_p) *features = NULL;
439
440   void accept (tdesc_element_visitor &v) const override
441   {
442     v.visit_pre (this);
443
444     struct tdesc_feature *feature;
445
446     for (int ix = 0;
447          VEC_iterate (tdesc_feature_p, features, ix, feature);
448          ix++)
449       feature->accept (v);
450
451     v.visit_post (this);
452   }
453
454   bool operator== (const target_desc &other) const
455   {
456     if (arch != other.arch)
457       return false;
458
459     if (osabi != other.osabi)
460       return false;
461
462     if (VEC_length (tdesc_feature_p, features)
463         != VEC_length (tdesc_feature_p, other.features))
464       return false;
465
466     struct tdesc_feature *feature;
467
468     for (int ix = 0;
469          VEC_iterate (tdesc_feature_p, features, ix, feature);
470          ix++)
471       {
472         struct tdesc_feature *feature2
473           = VEC_index (tdesc_feature_p, other.features, ix);
474
475         if (feature != feature2 && *feature != *feature2)
476           return false;
477       }
478
479     return true;
480   }
481
482   bool operator!= (const target_desc &other) const
483   {
484     return !(*this == other);
485   }
486 };
487
488 /* Per-architecture data associated with a target description.  The
489    target description may be shared by multiple architectures, but
490    this data is private to one gdbarch.  */
491
492 typedef struct tdesc_arch_reg
493 {
494   struct tdesc_reg *reg;
495   struct type *type;
496 } tdesc_arch_reg;
497 DEF_VEC_O(tdesc_arch_reg);
498
499 struct tdesc_arch_data
500 {
501   /* A list of register/type pairs, indexed by GDB's internal register number.
502      During initialization of the gdbarch this list is used to store
503      registers which the architecture assigns a fixed register number.
504      Registers which are NULL in this array, or off the end, are
505      treated as zero-sized and nameless (i.e. placeholders in the
506      numbering).  */
507   VEC(tdesc_arch_reg) *arch_regs;
508
509   /* Functions which report the register name, type, and reggroups for
510      pseudo-registers.  */
511   gdbarch_register_name_ftype *pseudo_register_name;
512   gdbarch_register_type_ftype *pseudo_register_type;
513   gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p;
514 };
515
516 /* Info about an inferior's target description.  There's one of these
517    for each inferior.  */
518
519 struct target_desc_info
520 {
521   /* A flag indicating that a description has already been fetched
522      from the target, so it should not be queried again.  */
523
524   int fetched;
525
526   /* The description fetched from the target, or NULL if the target
527      did not supply any description.  Only valid when
528      target_desc_fetched is set.  Only the description initialization
529      code should access this; normally, the description should be
530      accessed through the gdbarch object.  */
531
532   const struct target_desc *tdesc;
533
534   /* The filename to read a target description from, as set by "set
535      tdesc filename ..."  */
536
537   char *filename;
538 };
539
540 /* Get the inferior INF's target description info, allocating one on
541    the stop if necessary.  */
542
543 static struct target_desc_info *
544 get_tdesc_info (struct inferior *inf)
545 {
546   if (inf->tdesc_info == NULL)
547     inf->tdesc_info = XCNEW (struct target_desc_info);
548   return inf->tdesc_info;
549 }
550
551 /* A handle for architecture-specific data associated with the
552    target description (see struct tdesc_arch_data).  */
553
554 static struct gdbarch_data *tdesc_data;
555
556 /* See target-descriptions.h.  */
557
558 int
559 target_desc_info_from_user_p (struct target_desc_info *info)
560 {
561   return info != NULL && info->filename != NULL;
562 }
563
564 /* See target-descriptions.h.  */
565
566 void
567 copy_inferior_target_desc_info (struct inferior *destinf, struct inferior *srcinf)
568 {
569   struct target_desc_info *src = get_tdesc_info (srcinf);
570   struct target_desc_info *dest = get_tdesc_info (destinf);
571
572   dest->fetched = src->fetched;
573   dest->tdesc = src->tdesc;
574   dest->filename = src->filename != NULL ? xstrdup (src->filename) : NULL;
575 }
576
577 /* See target-descriptions.h.  */
578
579 void
580 target_desc_info_free (struct target_desc_info *tdesc_info)
581 {
582   if (tdesc_info != NULL)
583     {
584       xfree (tdesc_info->filename);
585       xfree (tdesc_info);
586     }
587 }
588
589 /* Convenience helper macros.  */
590
591 #define target_desc_fetched \
592   get_tdesc_info (current_inferior ())->fetched
593 #define current_target_desc \
594   get_tdesc_info (current_inferior ())->tdesc
595 #define target_description_filename \
596   get_tdesc_info (current_inferior ())->filename
597
598 /* The string manipulated by the "set tdesc filename ..." command.  */
599
600 static char *tdesc_filename_cmd_string;
601
602 /* Fetch the current target's description, and switch the current
603    architecture to one which incorporates that description.  */
604
605 void
606 target_find_description (void)
607 {
608   /* If we've already fetched a description from the target, don't do
609      it again.  This allows a target to fetch the description early,
610      during its to_open or to_create_inferior, if it needs extra
611      information about the target to initialize.  */
612   if (target_desc_fetched)
613     return;
614
615   /* The current architecture should not have any target description
616      specified.  It should have been cleared, e.g. when we
617      disconnected from the previous target.  */
618   gdb_assert (gdbarch_target_desc (target_gdbarch ()) == NULL);
619
620   /* First try to fetch an XML description from the user-specified
621      file.  */
622   current_target_desc = NULL;
623   if (target_description_filename != NULL
624       && *target_description_filename != '\0')
625     current_target_desc
626       = file_read_description_xml (target_description_filename);
627
628   /* Next try to read the description from the current target using
629      target objects.  */
630   if (current_target_desc == NULL)
631     current_target_desc = target_read_description_xml (&current_target);
632
633   /* If that failed try a target-specific hook.  */
634   if (current_target_desc == NULL)
635     current_target_desc = target_read_description (&current_target);
636
637   /* If a non-NULL description was returned, then update the current
638      architecture.  */
639   if (current_target_desc)
640     {
641       struct gdbarch_info info;
642
643       gdbarch_info_init (&info);
644       info.target_desc = current_target_desc;
645       if (!gdbarch_update_p (info))
646         warning (_("Architecture rejected target-supplied description"));
647       else
648         {
649           struct tdesc_arch_data *data;
650
651           data = ((struct tdesc_arch_data *)
652                   gdbarch_data (target_gdbarch (), tdesc_data));
653           if (tdesc_has_registers (current_target_desc)
654               && data->arch_regs == NULL)
655             warning (_("Target-supplied registers are not supported "
656                        "by the current architecture"));
657         }
658     }
659
660   /* Now that we know this description is usable, record that we
661      fetched it.  */
662   target_desc_fetched = 1;
663 }
664
665 /* Discard any description fetched from the current target, and switch
666    the current architecture to one with no target description.  */
667
668 void
669 target_clear_description (void)
670 {
671   struct gdbarch_info info;
672
673   if (!target_desc_fetched)
674     return;
675
676   target_desc_fetched = 0;
677   current_target_desc = NULL;
678
679   gdbarch_info_init (&info);
680   if (!gdbarch_update_p (info))
681     internal_error (__FILE__, __LINE__,
682                     _("Could not remove target-supplied description"));
683 }
684
685 /* Return the global current target description.  This should only be
686    used by gdbarch initialization code; most access should be through
687    an existing gdbarch.  */
688
689 const struct target_desc *
690 target_current_description (void)
691 {
692   if (target_desc_fetched)
693     return current_target_desc;
694
695   return NULL;
696 }
697
698 /* Return non-zero if this target description is compatible
699    with the given BFD architecture.  */
700
701 int
702 tdesc_compatible_p (const struct target_desc *target_desc,
703                     const struct bfd_arch_info *arch)
704 {
705   const struct bfd_arch_info *compat;
706   int ix;
707
708   for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
709        ix++)
710     {
711       if (compat == arch
712           || arch->compatible (arch, compat)
713           || compat->compatible (compat, arch))
714         return 1;
715     }
716
717   return 0;
718 }
719 \f
720
721 /* Direct accessors for target descriptions.  */
722
723 /* Return the string value of a property named KEY, or NULL if the
724    property was not specified.  */
725
726 const char *
727 tdesc_property (const struct target_desc *target_desc, const char *key)
728 {
729   struct property *prop;
730   int ix;
731
732   for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
733        ix++)
734     if (strcmp (prop->key, key) == 0)
735       return prop->value;
736
737   return NULL;
738 }
739
740 /* Return the BFD architecture associated with this target
741    description, or NULL if no architecture was specified.  */
742
743 const struct bfd_arch_info *
744 tdesc_architecture (const struct target_desc *target_desc)
745 {
746   return target_desc->arch;
747 }
748
749 /* Return the OSABI associated with this target description, or
750    GDB_OSABI_UNKNOWN if no osabi was specified.  */
751
752 enum gdb_osabi
753 tdesc_osabi (const struct target_desc *target_desc)
754 {
755   return target_desc->osabi;
756 }
757
758 \f
759
760 /* Return 1 if this target description includes any registers.  */
761
762 int
763 tdesc_has_registers (const struct target_desc *target_desc)
764 {
765   int ix;
766   struct tdesc_feature *feature;
767
768   if (target_desc == NULL)
769     return 0;
770
771   for (ix = 0;
772        VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
773        ix++)
774     if (! VEC_empty (tdesc_reg_p, feature->registers))
775       return 1;
776
777   return 0;
778 }
779
780 /* Return the feature with the given name, if present, or NULL if
781    the named feature is not found.  */
782
783 const struct tdesc_feature *
784 tdesc_find_feature (const struct target_desc *target_desc,
785                     const char *name)
786 {
787   int ix;
788   struct tdesc_feature *feature;
789
790   for (ix = 0;
791        VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
792        ix++)
793     if (strcmp (feature->name, name) == 0)
794       return feature;
795
796   return NULL;
797 }
798
799 /* Return the name of FEATURE.  */
800
801 const char *
802 tdesc_feature_name (const struct tdesc_feature *feature)
803 {
804   return feature->name;
805 }
806
807 /* Predefined types.  */
808 static struct tdesc_type tdesc_predefined_types[] =
809 {
810   { "bool", TDESC_TYPE_BOOL },
811   { "int8", TDESC_TYPE_INT8 },
812   { "int16", TDESC_TYPE_INT16 },
813   { "int32", TDESC_TYPE_INT32 },
814   { "int64", TDESC_TYPE_INT64 },
815   { "int128", TDESC_TYPE_INT128 },
816   { "uint8", TDESC_TYPE_UINT8 },
817   { "uint16", TDESC_TYPE_UINT16 },
818   { "uint32", TDESC_TYPE_UINT32 },
819   { "uint64", TDESC_TYPE_UINT64 },
820   { "uint128", TDESC_TYPE_UINT128 },
821   { "code_ptr", TDESC_TYPE_CODE_PTR },
822   { "data_ptr", TDESC_TYPE_DATA_PTR },
823   { "ieee_single", TDESC_TYPE_IEEE_SINGLE },
824   { "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
825   { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT },
826   { "i387_ext", TDESC_TYPE_I387_EXT }
827 };
828
829 /* Lookup a predefined type.  */
830
831 static struct tdesc_type *
832 tdesc_predefined_type (enum tdesc_type_kind kind)
833 {
834   int ix;
835   struct tdesc_type *type;
836
837   for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
838     if (tdesc_predefined_types[ix].kind == kind)
839       return &tdesc_predefined_types[ix];
840
841   gdb_assert_not_reached ("bad predefined tdesc type");
842 }
843
844 /* See arch/tdesc.h.  */
845
846 struct tdesc_type *
847 tdesc_named_type (const struct tdesc_feature *feature, const char *id)
848 {
849   int ix;
850   struct tdesc_type *type;
851
852   /* First try target-defined types.  */
853   for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++)
854     if (strcmp (type->name, id) == 0)
855       return type;
856
857   /* Next try the predefined types.  */
858   for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
859     if (strcmp (tdesc_predefined_types[ix].name, id) == 0)
860       return &tdesc_predefined_types[ix];
861
862   return NULL;
863 }
864
865 /* Lookup type associated with ID.  */
866
867 struct type *
868 tdesc_find_type (struct gdbarch *gdbarch, const char *id)
869 {
870   struct tdesc_arch_reg *reg;
871   struct tdesc_arch_data *data;
872   int i, num_regs;
873
874   data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
875   num_regs = VEC_length (tdesc_arch_reg, data->arch_regs);
876   for (i = 0; i < num_regs; i++)
877     {
878       reg = VEC_index (tdesc_arch_reg, data->arch_regs, i);
879       if (reg->reg
880           && reg->reg->tdesc_type
881           && reg->type
882           && strcmp (id, reg->reg->tdesc_type->name) == 0)
883         return reg->type;
884     }
885
886   return NULL;
887 }
888
889 /* Construct, if necessary, and return the GDB type implementing target
890    type TDESC_TYPE for architecture GDBARCH.  */
891
892 static struct type *
893 tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type)
894 {
895   struct type *type;
896
897   switch (tdesc_type->kind)
898     {
899     /* Predefined types.  */
900     case TDESC_TYPE_BOOL:
901       return builtin_type (gdbarch)->builtin_bool;
902
903     case TDESC_TYPE_INT8:
904       return builtin_type (gdbarch)->builtin_int8;
905
906     case TDESC_TYPE_INT16:
907       return builtin_type (gdbarch)->builtin_int16;
908
909     case TDESC_TYPE_INT32:
910       return builtin_type (gdbarch)->builtin_int32;
911
912     case TDESC_TYPE_INT64:
913       return builtin_type (gdbarch)->builtin_int64;
914
915     case TDESC_TYPE_INT128:
916       return builtin_type (gdbarch)->builtin_int128;
917
918     case TDESC_TYPE_UINT8:
919       return builtin_type (gdbarch)->builtin_uint8;
920
921     case TDESC_TYPE_UINT16:
922       return builtin_type (gdbarch)->builtin_uint16;
923
924     case TDESC_TYPE_UINT32:
925       return builtin_type (gdbarch)->builtin_uint32;
926
927     case TDESC_TYPE_UINT64:
928       return builtin_type (gdbarch)->builtin_uint64;
929
930     case TDESC_TYPE_UINT128:
931       return builtin_type (gdbarch)->builtin_uint128;
932
933     case TDESC_TYPE_CODE_PTR:
934       return builtin_type (gdbarch)->builtin_func_ptr;
935
936     case TDESC_TYPE_DATA_PTR:
937       return builtin_type (gdbarch)->builtin_data_ptr;
938
939     default:
940       break;
941     }
942
943   type = tdesc_find_type (gdbarch, tdesc_type->name);
944   if (type)
945     return type;
946
947   switch (tdesc_type->kind)
948     {
949     case TDESC_TYPE_IEEE_SINGLE:
950       return arch_float_type (gdbarch, -1, "builtin_type_ieee_single",
951                               floatformats_ieee_single);
952
953     case TDESC_TYPE_IEEE_DOUBLE:
954       return arch_float_type (gdbarch, -1, "builtin_type_ieee_double",
955                               floatformats_ieee_double);
956
957     case TDESC_TYPE_ARM_FPA_EXT:
958       return arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
959                               floatformats_arm_ext);
960
961     case TDESC_TYPE_I387_EXT:
962       return arch_float_type (gdbarch, -1, "builtin_type_i387_ext",
963                               floatformats_i387_ext);
964
965     /* Types defined by a target feature.  */
966     case TDESC_TYPE_VECTOR:
967       {
968         struct type *type, *field_type;
969
970         field_type = tdesc_gdb_type (gdbarch, tdesc_type->u.v.type);
971         type = init_vector_type (field_type, tdesc_type->u.v.count);
972         TYPE_NAME (type) = xstrdup (tdesc_type->name);
973
974         return type;
975       }
976
977     case TDESC_TYPE_STRUCT:
978       {
979         struct type *type, *field_type;
980         struct tdesc_type_field *f;
981         int ix;
982
983         type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
984         TYPE_NAME (type) = xstrdup (tdesc_type->name);
985         TYPE_TAG_NAME (type) = TYPE_NAME (type);
986
987         for (ix = 0;
988              VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
989              ix++)
990           {
991             if (f->start != -1 && f->end != -1)
992               {
993                 /* Bitfield.  */
994                 struct field *fld;
995                 struct type *field_type;
996                 int bitsize, total_size;
997
998                 /* This invariant should be preserved while creating types.  */
999                 gdb_assert (tdesc_type->u.u.size != 0);
1000                 if (f->type != NULL)
1001                   field_type = tdesc_gdb_type (gdbarch, f->type);
1002                 else if (tdesc_type->u.u.size > 4)
1003                   field_type = builtin_type (gdbarch)->builtin_uint64;
1004                 else
1005                   field_type = builtin_type (gdbarch)->builtin_uint32;
1006
1007                 fld = append_composite_type_field_raw (type, xstrdup (f->name),
1008                                                        field_type);
1009
1010                 /* For little-endian, BITPOS counts from the LSB of
1011                    the structure and marks the LSB of the field.  For
1012                    big-endian, BITPOS counts from the MSB of the
1013                    structure and marks the MSB of the field.  Either
1014                    way, it is the number of bits to the "left" of the
1015                    field.  To calculate this in big-endian, we need
1016                    the total size of the structure.  */
1017                 bitsize = f->end - f->start + 1;
1018                 total_size = tdesc_type->u.u.size * TARGET_CHAR_BIT;
1019                 if (gdbarch_bits_big_endian (gdbarch))
1020                   SET_FIELD_BITPOS (fld[0], total_size - f->start - bitsize);
1021                 else
1022                   SET_FIELD_BITPOS (fld[0], f->start);
1023                 FIELD_BITSIZE (fld[0]) = bitsize;
1024               }
1025             else
1026               {
1027                 gdb_assert (f->start == -1 && f->end == -1);
1028                 field_type = tdesc_gdb_type (gdbarch, f->type);
1029                 append_composite_type_field (type, xstrdup (f->name),
1030                                              field_type);
1031               }
1032           }
1033
1034         if (tdesc_type->u.u.size != 0)
1035           TYPE_LENGTH (type) = tdesc_type->u.u.size;
1036         return type;
1037       }
1038
1039     case TDESC_TYPE_UNION:
1040       {
1041         struct type *type, *field_type;
1042         struct tdesc_type_field *f;
1043         int ix;
1044
1045         type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
1046         TYPE_NAME (type) = xstrdup (tdesc_type->name);
1047
1048         for (ix = 0;
1049              VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1050              ix++)
1051           {
1052             field_type = tdesc_gdb_type (gdbarch, f->type);
1053             append_composite_type_field (type, xstrdup (f->name), field_type);
1054
1055             /* If any of the children of a union are vectors, flag the
1056                union as a vector also.  This allows e.g. a union of two
1057                vector types to show up automatically in "info vector".  */
1058             if (TYPE_VECTOR (field_type))
1059               TYPE_VECTOR (type) = 1;
1060           }
1061         return type;
1062       }
1063
1064     case TDESC_TYPE_FLAGS:
1065       {
1066         struct tdesc_type_field *f;
1067         int ix;
1068
1069         type = arch_flags_type (gdbarch, tdesc_type->name,
1070                                 tdesc_type->u.u.size);
1071         for (ix = 0;
1072              VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1073              ix++)
1074           {
1075             struct type *field_type;
1076             int bitsize = f->end - f->start + 1;
1077
1078             gdb_assert (f->type != NULL);
1079             field_type = tdesc_gdb_type (gdbarch, f->type);
1080             append_flags_type_field (type, f->start, bitsize,
1081                                      field_type, f->name);
1082           }
1083
1084         return type;
1085       }
1086
1087     case TDESC_TYPE_ENUM:
1088       {
1089         struct tdesc_type_field *f;
1090         int ix;
1091
1092         type = arch_type (gdbarch, TYPE_CODE_ENUM,
1093                           tdesc_type->u.u.size, tdesc_type->name);
1094         TYPE_UNSIGNED (type) = 1;
1095         for (ix = 0;
1096              VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1097              ix++)
1098           {
1099             struct field *fld
1100               = append_composite_type_field_raw (type, xstrdup (f->name),
1101                                                  NULL);
1102
1103             SET_FIELD_BITPOS (fld[0], f->start);
1104           }
1105
1106         return type;
1107       }
1108     }
1109
1110   internal_error (__FILE__, __LINE__,
1111                   "Type \"%s\" has an unknown kind %d",
1112                   tdesc_type->name, tdesc_type->kind);
1113 }
1114 \f
1115
1116 /* Support for registers from target descriptions.  */
1117
1118 /* Construct the per-gdbarch data.  */
1119
1120 static void *
1121 tdesc_data_init (struct obstack *obstack)
1122 {
1123   struct tdesc_arch_data *data;
1124
1125   data = OBSTACK_ZALLOC (obstack, struct tdesc_arch_data);
1126   return data;
1127 }
1128
1129 /* Similar, but for the temporary copy used during architecture
1130    initialization.  */
1131
1132 struct tdesc_arch_data *
1133 tdesc_data_alloc (void)
1134 {
1135   return XCNEW (struct tdesc_arch_data);
1136 }
1137
1138 /* Free something allocated by tdesc_data_alloc, if it is not going
1139    to be used (for instance if it was unsuitable for the
1140    architecture).  */
1141
1142 void
1143 tdesc_data_cleanup (void *data_untyped)
1144 {
1145   struct tdesc_arch_data *data = (struct tdesc_arch_data *) data_untyped;
1146
1147   VEC_free (tdesc_arch_reg, data->arch_regs);
1148   xfree (data);
1149 }
1150
1151 /* Search FEATURE for a register named NAME.  */
1152
1153 static struct tdesc_reg *
1154 tdesc_find_register_early (const struct tdesc_feature *feature,
1155                            const char *name)
1156 {
1157   int ixr;
1158   struct tdesc_reg *reg;
1159
1160   for (ixr = 0;
1161        VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1162        ixr++)
1163     if (strcasecmp (reg->name, name) == 0)
1164       return reg;
1165
1166   return NULL;
1167 }
1168
1169 /* Search FEATURE for a register named NAME.  Assign REGNO to it.  */
1170
1171 int
1172 tdesc_numbered_register (const struct tdesc_feature *feature,
1173                          struct tdesc_arch_data *data,
1174                          int regno, const char *name)
1175 {
1176   struct tdesc_arch_reg arch_reg = { 0 };
1177   struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1178
1179   if (reg == NULL)
1180     return 0;
1181
1182   /* Make sure the vector includes a REGNO'th element.  */
1183   while (regno >= VEC_length (tdesc_arch_reg, data->arch_regs))
1184     VEC_safe_push (tdesc_arch_reg, data->arch_regs, &arch_reg);
1185
1186   arch_reg.reg = reg;
1187   VEC_replace (tdesc_arch_reg, data->arch_regs, regno, &arch_reg);
1188   return 1;
1189 }
1190
1191 /* Search FEATURE for a register named NAME, but do not assign a fixed
1192    register number to it.  */
1193
1194 int
1195 tdesc_unnumbered_register (const struct tdesc_feature *feature,
1196                            const char *name)
1197 {
1198   struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1199
1200   if (reg == NULL)
1201     return 0;
1202
1203   return 1;
1204 }
1205
1206 /* Search FEATURE for a register whose name is in NAMES and assign
1207    REGNO to it.  */
1208
1209 int
1210 tdesc_numbered_register_choices (const struct tdesc_feature *feature,
1211                                  struct tdesc_arch_data *data,
1212                                  int regno, const char *const names[])
1213 {
1214   int i;
1215
1216   for (i = 0; names[i] != NULL; i++)
1217     if (tdesc_numbered_register (feature, data, regno, names[i]))
1218       return 1;
1219
1220   return 0;
1221 }
1222
1223 /* Search FEATURE for a register named NAME, and return its size in
1224    bits.  The register must exist.  */
1225
1226 int
1227 tdesc_register_size (const struct tdesc_feature *feature,
1228                      const char *name)
1229 {
1230   struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1231
1232   gdb_assert (reg != NULL);
1233   return reg->bitsize;
1234 }
1235
1236 /* Look up a register by its GDB internal register number.  */
1237
1238 static struct tdesc_arch_reg *
1239 tdesc_find_arch_register (struct gdbarch *gdbarch, int regno)
1240 {
1241   struct tdesc_arch_data *data;
1242
1243   data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1244   if (regno < VEC_length (tdesc_arch_reg, data->arch_regs))
1245     return VEC_index (tdesc_arch_reg, data->arch_regs, regno);
1246   else
1247     return NULL;
1248 }
1249
1250 static struct tdesc_reg *
1251 tdesc_find_register (struct gdbarch *gdbarch, int regno)
1252 {
1253   struct tdesc_arch_reg *reg = tdesc_find_arch_register (gdbarch, regno);
1254
1255   return reg? reg->reg : NULL;
1256 }
1257
1258 /* Return the name of register REGNO, from the target description or
1259    from an architecture-provided pseudo_register_name method.  */
1260
1261 const char *
1262 tdesc_register_name (struct gdbarch *gdbarch, int regno)
1263 {
1264   struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1265   int num_regs = gdbarch_num_regs (gdbarch);
1266   int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1267
1268   if (reg != NULL)
1269     return reg->name;
1270
1271   if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
1272     {
1273       struct tdesc_arch_data *data
1274         = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1275
1276       gdb_assert (data->pseudo_register_name != NULL);
1277       return data->pseudo_register_name (gdbarch, regno);
1278     }
1279
1280   return "";
1281 }
1282
1283 struct type *
1284 tdesc_register_type (struct gdbarch *gdbarch, int regno)
1285 {
1286   struct tdesc_arch_reg *arch_reg = tdesc_find_arch_register (gdbarch, regno);
1287   struct tdesc_reg *reg = arch_reg? arch_reg->reg : NULL;
1288   int num_regs = gdbarch_num_regs (gdbarch);
1289   int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1290
1291   if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs)
1292     {
1293       struct tdesc_arch_data *data
1294         = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1295
1296       gdb_assert (data->pseudo_register_type != NULL);
1297       return data->pseudo_register_type (gdbarch, regno);
1298     }
1299
1300   if (reg == NULL)
1301     /* Return "int0_t", since "void" has a misleading size of one.  */
1302     return builtin_type (gdbarch)->builtin_int0;
1303
1304   if (arch_reg->type == NULL)
1305     {
1306       /* First check for a predefined or target defined type.  */
1307       if (reg->tdesc_type)
1308         arch_reg->type = tdesc_gdb_type (gdbarch, reg->tdesc_type);
1309
1310       /* Next try size-sensitive type shortcuts.  */
1311       else if (strcmp (reg->type, "float") == 0)
1312         {
1313           if (reg->bitsize == gdbarch_float_bit (gdbarch))
1314             arch_reg->type = builtin_type (gdbarch)->builtin_float;
1315           else if (reg->bitsize == gdbarch_double_bit (gdbarch))
1316             arch_reg->type = builtin_type (gdbarch)->builtin_double;
1317           else if (reg->bitsize == gdbarch_long_double_bit (gdbarch))
1318             arch_reg->type = builtin_type (gdbarch)->builtin_long_double;
1319           else
1320             {
1321               warning (_("Register \"%s\" has an unsupported size (%d bits)"),
1322                        reg->name, reg->bitsize);
1323               arch_reg->type = builtin_type (gdbarch)->builtin_double;
1324             }
1325         }
1326       else if (strcmp (reg->type, "int") == 0)
1327         {
1328           if (reg->bitsize == gdbarch_long_bit (gdbarch))
1329             arch_reg->type = builtin_type (gdbarch)->builtin_long;
1330           else if (reg->bitsize == TARGET_CHAR_BIT)
1331             arch_reg->type = builtin_type (gdbarch)->builtin_char;
1332           else if (reg->bitsize == gdbarch_short_bit (gdbarch))
1333             arch_reg->type = builtin_type (gdbarch)->builtin_short;
1334           else if (reg->bitsize == gdbarch_int_bit (gdbarch))
1335             arch_reg->type = builtin_type (gdbarch)->builtin_int;
1336           else if (reg->bitsize == gdbarch_long_long_bit (gdbarch))
1337             arch_reg->type = builtin_type (gdbarch)->builtin_long_long;
1338           else if (reg->bitsize == gdbarch_ptr_bit (gdbarch))
1339           /* A bit desperate by this point...  */
1340             arch_reg->type = builtin_type (gdbarch)->builtin_data_ptr;
1341           else
1342             {
1343               warning (_("Register \"%s\" has an unsupported size (%d bits)"),
1344                        reg->name, reg->bitsize);
1345               arch_reg->type = builtin_type (gdbarch)->builtin_long;
1346             }
1347         }
1348
1349       if (arch_reg->type == NULL)
1350         internal_error (__FILE__, __LINE__,
1351                         "Register \"%s\" has an unknown type \"%s\"",
1352                         reg->name, reg->type);
1353     }
1354
1355   return arch_reg->type;
1356 }
1357
1358 static int
1359 tdesc_remote_register_number (struct gdbarch *gdbarch, int regno)
1360 {
1361   struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1362
1363   if (reg != NULL)
1364     return reg->target_regnum;
1365   else
1366     return -1;
1367 }
1368
1369 /* Check whether REGNUM is a member of REGGROUP.  Registers from the
1370    target description may be classified as general, float, or vector.
1371    Unlike a gdbarch register_reggroup_p method, this function will
1372    return -1 if it does not know; the caller should handle registers
1373    with no specified group.
1374
1375    Arbitrary strings (other than "general", "float", and "vector")
1376    from the description are not used; they cause the register to be
1377    displayed in "info all-registers" but excluded from "info
1378    registers" et al.  The names of containing features are also not
1379    used.  This might be extended to display registers in some more
1380    useful groupings.
1381
1382    The save-restore flag is also implemented here.  */
1383
1384 int
1385 tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
1386                               struct reggroup *reggroup)
1387 {
1388   struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1389
1390   if (reg != NULL && reg->group != NULL)
1391     {
1392       int general_p = 0, float_p = 0, vector_p = 0;
1393
1394       if (strcmp (reg->group, "general") == 0)
1395         general_p = 1;
1396       else if (strcmp (reg->group, "float") == 0)
1397         float_p = 1;
1398       else if (strcmp (reg->group, "vector") == 0)
1399         vector_p = 1;
1400
1401       if (reggroup == float_reggroup)
1402         return float_p;
1403
1404       if (reggroup == vector_reggroup)
1405         return vector_p;
1406
1407       if (reggroup == general_reggroup)
1408         return general_p;
1409     }
1410
1411   if (reg != NULL
1412       && (reggroup == save_reggroup || reggroup == restore_reggroup))
1413     return reg->save_restore;
1414
1415   return -1;
1416 }
1417
1418 /* Check whether REGNUM is a member of REGGROUP.  Registers with no
1419    group specified go to the default reggroup function and are handled
1420    by type.  */
1421
1422 static int
1423 tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
1424                            struct reggroup *reggroup)
1425 {
1426   int num_regs = gdbarch_num_regs (gdbarch);
1427   int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1428   int ret;
1429
1430   if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
1431     {
1432       struct tdesc_arch_data *data
1433         = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1434
1435       if (data->pseudo_register_reggroup_p != NULL)
1436         return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup);
1437       /* Otherwise fall through to the default reggroup_p.  */
1438     }
1439
1440   ret = tdesc_register_in_reggroup_p (gdbarch, regno, reggroup);
1441   if (ret != -1)
1442     return ret;
1443
1444   return default_register_reggroup_p (gdbarch, regno, reggroup);
1445 }
1446
1447 /* Record architecture-specific functions to call for pseudo-register
1448    support.  */
1449
1450 void
1451 set_tdesc_pseudo_register_name (struct gdbarch *gdbarch,
1452                                 gdbarch_register_name_ftype *pseudo_name)
1453 {
1454   struct tdesc_arch_data *data
1455     = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1456
1457   data->pseudo_register_name = pseudo_name;
1458 }
1459
1460 void
1461 set_tdesc_pseudo_register_type (struct gdbarch *gdbarch,
1462                                 gdbarch_register_type_ftype *pseudo_type)
1463 {
1464   struct tdesc_arch_data *data
1465     = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1466
1467   data->pseudo_register_type = pseudo_type;
1468 }
1469
1470 void
1471 set_tdesc_pseudo_register_reggroup_p
1472   (struct gdbarch *gdbarch,
1473    gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
1474 {
1475   struct tdesc_arch_data *data
1476     = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1477
1478   data->pseudo_register_reggroup_p = pseudo_reggroup_p;
1479 }
1480
1481 /* Update GDBARCH to use the target description for registers.  */
1482
1483 void
1484 tdesc_use_registers (struct gdbarch *gdbarch,
1485                      const struct target_desc *target_desc,
1486                      struct tdesc_arch_data *early_data)
1487 {
1488   int num_regs = gdbarch_num_regs (gdbarch);
1489   int ixf, ixr;
1490   struct tdesc_feature *feature;
1491   struct tdesc_reg *reg;
1492   struct tdesc_arch_data *data;
1493   struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 };
1494   htab_t reg_hash;
1495
1496   /* We can't use the description for registers if it doesn't describe
1497      any.  This function should only be called after validating
1498      registers, so the caller should know that registers are
1499      included.  */
1500   gdb_assert (tdesc_has_registers (target_desc));
1501
1502   data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1503   data->arch_regs = early_data->arch_regs;
1504   xfree (early_data);
1505
1506   /* Build up a set of all registers, so that we can assign register
1507      numbers where needed.  The hash table expands as necessary, so
1508      the initial size is arbitrary.  */
1509   reg_hash = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1510   for (ixf = 0;
1511        VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
1512        ixf++)
1513     for (ixr = 0;
1514          VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1515          ixr++)
1516       {
1517         void **slot = htab_find_slot (reg_hash, reg, INSERT);
1518
1519         *slot = reg;
1520       }
1521
1522   /* Remove any registers which were assigned numbers by the
1523      architecture.  */
1524   for (ixr = 0;
1525        VEC_iterate (tdesc_arch_reg, data->arch_regs, ixr, arch_reg);
1526        ixr++)
1527     if (arch_reg->reg)
1528       htab_remove_elt (reg_hash, arch_reg->reg);
1529
1530   /* Assign numbers to the remaining registers and add them to the
1531      list of registers.  The new numbers are always above gdbarch_num_regs.
1532      Iterate over the features, not the hash table, so that the order
1533      matches that in the target description.  */
1534
1535   gdb_assert (VEC_length (tdesc_arch_reg, data->arch_regs) <= num_regs);
1536   while (VEC_length (tdesc_arch_reg, data->arch_regs) < num_regs)
1537     VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
1538   for (ixf = 0;
1539        VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
1540        ixf++)
1541     for (ixr = 0;
1542          VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1543          ixr++)
1544       if (htab_find (reg_hash, reg) != NULL)
1545         {
1546           new_arch_reg.reg = reg;
1547           VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
1548           num_regs++;
1549         }
1550
1551   htab_delete (reg_hash);
1552
1553   /* Update the architecture.  */
1554   set_gdbarch_num_regs (gdbarch, num_regs);
1555   set_gdbarch_register_name (gdbarch, tdesc_register_name);
1556   set_gdbarch_register_type (gdbarch, tdesc_register_type);
1557   set_gdbarch_remote_register_number (gdbarch,
1558                                       tdesc_remote_register_number);
1559   set_gdbarch_register_reggroup_p (gdbarch, tdesc_register_reggroup_p);
1560 }
1561 \f
1562
1563 /* See arch/tdesc.h.  */
1564
1565 void
1566 tdesc_create_reg (struct tdesc_feature *feature, const char *name,
1567                   int regnum, int save_restore, const char *group,
1568                   int bitsize, const char *type)
1569 {
1570   tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore,
1571                                   group, bitsize, type);
1572
1573   VEC_safe_push (tdesc_reg_p, feature->registers, reg);
1574 }
1575
1576 /* See arch/tdesc.h.  */
1577
1578 struct tdesc_type *
1579 tdesc_create_vector (struct tdesc_feature *feature, const char *name,
1580                      struct tdesc_type *field_type, int count)
1581 {
1582   struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_VECTOR);
1583
1584   type->u.v.type = field_type;
1585   type->u.v.count = count;
1586
1587   VEC_safe_push (tdesc_type_p, feature->types, type);
1588   return type;
1589 }
1590
1591 /* See arch/tdesc.h.  */
1592
1593 struct tdesc_type *
1594 tdesc_create_struct (struct tdesc_feature *feature, const char *name)
1595 {
1596   struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_STRUCT);
1597
1598   VEC_safe_push (tdesc_type_p, feature->types, type);
1599   return type;
1600 }
1601
1602 /* See arch/tdesc.h.  */
1603
1604 void
1605 tdesc_set_struct_size (struct tdesc_type *type, int size)
1606 {
1607   gdb_assert (type->kind == TDESC_TYPE_STRUCT);
1608   gdb_assert (size > 0);
1609   type->u.u.size = size;
1610 }
1611
1612 /* See arch/tdesc.h.  */
1613
1614 struct tdesc_type *
1615 tdesc_create_union (struct tdesc_feature *feature, const char *name)
1616 {
1617   struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_UNION);
1618
1619   VEC_safe_push (tdesc_type_p, feature->types, type);
1620   return type;
1621 }
1622
1623 /* See arch/tdesc.h.  */
1624
1625 struct tdesc_type *
1626 tdesc_create_flags (struct tdesc_feature *feature, const char *name,
1627                     int size)
1628 {
1629   struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_FLAGS);
1630
1631   gdb_assert (size > 0);
1632
1633   type->u.u.size = size;
1634
1635   VEC_safe_push (tdesc_type_p, feature->types, type);
1636   return type;
1637 }
1638
1639 struct tdesc_type *
1640 tdesc_create_enum (struct tdesc_feature *feature, const char *name,
1641                    int size)
1642 {
1643   struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_ENUM);
1644
1645   gdb_assert (size > 0);
1646
1647   type->u.u.size = size;
1648
1649   VEC_safe_push (tdesc_type_p, feature->types, type);
1650   return type;
1651 }
1652
1653 /* See arch/tdesc.h.  */
1654
1655 void
1656 tdesc_add_field (struct tdesc_type *type, const char *field_name,
1657                  struct tdesc_type *field_type)
1658 {
1659   struct tdesc_type_field f = { 0 };
1660
1661   gdb_assert (type->kind == TDESC_TYPE_UNION
1662               || type->kind == TDESC_TYPE_STRUCT);
1663
1664   f.name = xstrdup (field_name);
1665   f.type = field_type;
1666   /* Initialize these values so we know this is not a bit-field
1667      when we print-c-tdesc.  */
1668   f.start = -1;
1669   f.end = -1;
1670
1671   VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1672 }
1673
1674 void
1675 tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name,
1676                           int start, int end, struct tdesc_type *field_type)
1677 {
1678   struct tdesc_type_field f = { 0 };
1679
1680   gdb_assert (type->kind == TDESC_TYPE_STRUCT
1681               || type->kind == TDESC_TYPE_FLAGS);
1682   gdb_assert (start >= 0 && end >= start);
1683
1684   f.name = xstrdup (field_name);
1685   f.start = start;
1686   f.end = end;
1687   f.type = field_type;
1688
1689   VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1690 }
1691
1692 /* See arch/tdesc.h.  */
1693
1694 void
1695 tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
1696                     int start, int end)
1697 {
1698   struct tdesc_type *field_type;
1699
1700   gdb_assert (start >= 0 && end >= start);
1701
1702   if (type->u.u.size > 4)
1703     field_type = tdesc_predefined_type (TDESC_TYPE_UINT64);
1704   else
1705     field_type = tdesc_predefined_type (TDESC_TYPE_UINT32);
1706
1707   tdesc_add_typed_bitfield (type, field_name, start, end, field_type);
1708 }
1709
1710 /* See arch/tdesc.h.  */
1711
1712 void
1713 tdesc_add_flag (struct tdesc_type *type, int start,
1714                 const char *flag_name)
1715 {
1716   struct tdesc_type_field f = { 0 };
1717
1718   gdb_assert (type->kind == TDESC_TYPE_FLAGS
1719               || type->kind == TDESC_TYPE_STRUCT);
1720
1721   f.name = xstrdup (flag_name);
1722   f.start = start;
1723   f.end = start;
1724   f.type = tdesc_predefined_type (TDESC_TYPE_BOOL);
1725
1726   VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1727 }
1728
1729 void
1730 tdesc_add_enum_value (struct tdesc_type *type, int value,
1731                       const char *name)
1732 {
1733   struct tdesc_type_field f = { 0 };
1734
1735   gdb_assert (type->kind == TDESC_TYPE_ENUM);
1736
1737   f.name = xstrdup (name);
1738   f.start = value;
1739   f.end = -1;
1740   f.type = tdesc_predefined_type (TDESC_TYPE_INT32);
1741
1742   VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1743 }
1744
1745 /* See arch/tdesc.h.  */
1746
1747 struct tdesc_feature *
1748 tdesc_create_feature (struct target_desc *tdesc, const char *name,
1749                       const char *xml)
1750 {
1751   struct tdesc_feature *new_feature = new tdesc_feature (name);
1752
1753   VEC_safe_push (tdesc_feature_p, tdesc->features, new_feature);
1754   return new_feature;
1755 }
1756
1757 struct target_desc *
1758 allocate_target_description (void)
1759 {
1760   return new target_desc ();
1761 }
1762
1763 static void
1764 free_target_description (void *arg)
1765 {
1766   struct target_desc *target_desc = (struct target_desc *) arg;
1767
1768   delete target_desc;
1769 }
1770
1771 struct cleanup *
1772 make_cleanup_free_target_description (struct target_desc *target_desc)
1773 {
1774   return make_cleanup (free_target_description, target_desc);
1775 }
1776
1777 void
1778 tdesc_add_compatible (struct target_desc *target_desc,
1779                       const struct bfd_arch_info *compatible)
1780 {
1781   const struct bfd_arch_info *compat;
1782   int ix;
1783
1784   /* If this instance of GDB is compiled without BFD support for the
1785      compatible architecture, simply ignore it -- we would not be able
1786      to handle it anyway.  */
1787   if (compatible == NULL)
1788     return;
1789
1790   for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
1791        ix++)
1792     if (compat == compatible)
1793       internal_error (__FILE__, __LINE__,
1794                       _("Attempted to add duplicate "
1795                         "compatible architecture \"%s\""),
1796                       compatible->printable_name);
1797
1798   VEC_safe_push (arch_p, target_desc->compatible, compatible);
1799 }
1800
1801 void
1802 set_tdesc_property (struct target_desc *target_desc,
1803                     const char *key, const char *value)
1804 {
1805   struct property *prop, new_prop;
1806   int ix;
1807
1808   gdb_assert (key != NULL && value != NULL);
1809
1810   for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
1811        ix++)
1812     if (strcmp (prop->key, key) == 0)
1813       internal_error (__FILE__, __LINE__,
1814                       _("Attempted to add duplicate property \"%s\""), key);
1815
1816   new_prop.key = xstrdup (key);
1817   new_prop.value = xstrdup (value);
1818   VEC_safe_push (property_s, target_desc->properties, &new_prop);
1819 }
1820
1821 /* See arch/tdesc.h.  */
1822
1823 void
1824 set_tdesc_architecture (struct target_desc *target_desc,
1825                         const char *name)
1826 {
1827   set_tdesc_architecture (target_desc, bfd_scan_arch (name));
1828 }
1829
1830 void
1831 set_tdesc_architecture (struct target_desc *target_desc,
1832                         const struct bfd_arch_info *arch)
1833 {
1834   target_desc->arch = arch;
1835 }
1836
1837 /* See arch/tdesc.h.  */
1838
1839 void
1840 set_tdesc_osabi (struct target_desc *target_desc, const char *name)
1841 {
1842   set_tdesc_osabi (target_desc, osabi_from_tdesc_string (name));
1843 }
1844
1845 void
1846 set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
1847 {
1848   target_desc->osabi = osabi;
1849 }
1850 \f
1851
1852 static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
1853 static struct cmd_list_element *tdesc_unset_cmdlist;
1854
1855 /* Helper functions for the CLI commands.  */
1856
1857 static void
1858 set_tdesc_cmd (char *args, int from_tty)
1859 {
1860   help_list (tdesc_set_cmdlist, "set tdesc ", all_commands, gdb_stdout);
1861 }
1862
1863 static void
1864 show_tdesc_cmd (char *args, int from_tty)
1865 {
1866   cmd_show_list (tdesc_show_cmdlist, from_tty, "");
1867 }
1868
1869 static void
1870 unset_tdesc_cmd (char *args, int from_tty)
1871 {
1872   help_list (tdesc_unset_cmdlist, "unset tdesc ", all_commands, gdb_stdout);
1873 }
1874
1875 static void
1876 set_tdesc_filename_cmd (char *args, int from_tty,
1877                         struct cmd_list_element *c)
1878 {
1879   xfree (target_description_filename);
1880   target_description_filename = xstrdup (tdesc_filename_cmd_string);
1881
1882   target_clear_description ();
1883   target_find_description ();
1884 }
1885
1886 static void
1887 show_tdesc_filename_cmd (struct ui_file *file, int from_tty,
1888                          struct cmd_list_element *c,
1889                          const char *value)
1890 {
1891   value = target_description_filename;
1892
1893   if (value != NULL && *value != '\0')
1894     printf_filtered (_("The target description will be read from \"%s\".\n"),
1895                      value);
1896   else
1897     printf_filtered (_("The target description will be "
1898                        "read from the target.\n"));
1899 }
1900
1901 static void
1902 unset_tdesc_filename_cmd (const char *args, int from_tty)
1903 {
1904   xfree (target_description_filename);
1905   target_description_filename = NULL;
1906   target_clear_description ();
1907   target_find_description ();
1908 }
1909
1910 /* Print target description in C.  */
1911
1912 class print_c_tdesc : public tdesc_element_visitor
1913 {
1914 public:
1915   print_c_tdesc (std::string &filename_after_features)
1916     : m_filename_after_features (filename_after_features)
1917   {
1918     const char *inp;
1919     char *outp;
1920     const char *filename = lbasename (m_filename_after_features.c_str ());
1921
1922     m_function = (char *) xmalloc (strlen (filename) + 1);
1923     for (inp = filename, outp = m_function; *inp != '\0'; inp++)
1924       if (*inp == '.')
1925         break;
1926       else if (*inp == '-')
1927         *outp++ = '_';
1928       else
1929         *outp++ = *inp;
1930     *outp = '\0';
1931
1932     /* Standard boilerplate.  */
1933     printf_unfiltered ("/* THIS FILE IS GENERATED.  "
1934                        "-*- buffer-read-only: t -*- vi"
1935                        ":set ro:\n");
1936   }
1937
1938   ~print_c_tdesc ()
1939   {
1940     xfree (m_function);
1941   }
1942
1943   void visit_pre (const target_desc *e) override
1944   {
1945     printf_unfiltered ("  Original: %s */\n\n",
1946                        lbasename (m_filename_after_features.c_str ()));
1947
1948     printf_unfiltered ("#include \"defs.h\"\n");
1949     printf_unfiltered ("#include \"osabi.h\"\n");
1950     printf_unfiltered ("#include \"target-descriptions.h\"\n");
1951     printf_unfiltered ("\n");
1952
1953     printf_unfiltered ("struct target_desc *tdesc_%s;\n", m_function);
1954     printf_unfiltered ("static void\n");
1955     printf_unfiltered ("initialize_tdesc_%s (void)\n", m_function);
1956     printf_unfiltered ("{\n");
1957     printf_unfiltered
1958       ("  struct target_desc *result = allocate_target_description ();\n");
1959
1960     if (tdesc_architecture (e) != NULL)
1961       {
1962         printf_unfiltered
1963           ("  set_tdesc_architecture (result, bfd_scan_arch (\"%s\"));\n",
1964            tdesc_architecture (e)->printable_name);
1965         printf_unfiltered ("\n");
1966       }
1967     if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN
1968         && tdesc_osabi (e) < GDB_OSABI_INVALID)
1969       {
1970         printf_unfiltered
1971           ("  set_tdesc_osabi (result, osabi_from_tdesc_string (\"%s\"));\n",
1972            gdbarch_osabi_name (tdesc_osabi (e)));
1973         printf_unfiltered ("\n");
1974       }
1975
1976     int ix;
1977     const struct bfd_arch_info *compatible;
1978     struct property *prop;
1979
1980     for (ix = 0; VEC_iterate (arch_p, e->compatible, ix, compatible);
1981          ix++)
1982       {
1983         printf_unfiltered
1984           ("  tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n",
1985            compatible->printable_name);
1986       }
1987
1988     if (ix)
1989       printf_unfiltered ("\n");
1990
1991     for (ix = 0; VEC_iterate (property_s, e->properties, ix, prop);
1992          ix++)
1993       {
1994         printf_unfiltered ("  set_tdesc_property (result, \"%s\", \"%s\");\n",
1995                            prop->key, prop->value);
1996       }
1997     printf_unfiltered ("  struct tdesc_feature *feature;\n");
1998   }
1999
2000   void visit_pre (const tdesc_feature *e) override
2001   {
2002     printf_unfiltered ("\n  feature = tdesc_create_feature (result, \"%s\");\n",
2003                        e->name);
2004   }
2005
2006   void visit_post (const tdesc_feature *e) override
2007   {}
2008
2009   void visit_post (const target_desc *e) override
2010   {
2011     printf_unfiltered ("\n  tdesc_%s = result;\n", m_function);
2012     printf_unfiltered ("}\n");
2013   }
2014
2015   void visit (const tdesc_type *type) override
2016   {
2017     struct tdesc_type_field *f;
2018
2019     /* Now we do some "filtering" in order to know which variables to
2020        declare.  This is needed because otherwise we would declare unused
2021        variables `field_type' and `type'.  */
2022     if (!m_printed_field_type)
2023       {
2024         printf_unfiltered ("  struct tdesc_type *field_type;\n");
2025         m_printed_field_type = true;
2026       }
2027
2028     if ((type->kind == TDESC_TYPE_UNION
2029          || type->kind == TDESC_TYPE_STRUCT
2030          || type->kind == TDESC_TYPE_FLAGS
2031          || type->kind == TDESC_TYPE_ENUM)
2032         && VEC_length (tdesc_type_field, type->u.u.fields) > 0
2033         && !m_printed_type)
2034       {
2035         printf_unfiltered ("  struct tdesc_type *type;\n");
2036         m_printed_type = true;
2037       }
2038
2039     switch (type->kind)
2040       {
2041       case TDESC_TYPE_VECTOR:
2042         printf_unfiltered
2043           ("  field_type = tdesc_named_type (feature, \"%s\");\n",
2044            type->u.v.type->name);
2045         printf_unfiltered
2046           ("  tdesc_create_vector (feature, \"%s\", field_type, %d);\n",
2047            type->name, type->u.v.count);
2048         break;
2049       case TDESC_TYPE_STRUCT:
2050       case TDESC_TYPE_FLAGS:
2051         if (type->kind == TDESC_TYPE_STRUCT)
2052           {
2053             printf_unfiltered
2054               ("  type = tdesc_create_struct (feature, \"%s\");\n",
2055                type->name);
2056             if (type->u.u.size != 0)
2057               printf_unfiltered
2058                 ("  tdesc_set_struct_size (type, %d);\n",
2059                  type->u.u.size);
2060           }
2061         else
2062           {
2063             printf_unfiltered
2064               ("  type = tdesc_create_flags (feature, \"%s\", %d);\n",
2065                type->name, type->u.u.size);
2066           }
2067         for (int ix3 = 0;
2068              VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2069              ix3++)
2070           {
2071             const char *type_name;
2072
2073             gdb_assert (f->type != NULL);
2074             type_name = f->type->name;
2075
2076             /* To minimize changes to generated files, don't emit type
2077                info for fields that have defaulted types.  */
2078             if (f->start != -1)
2079               {
2080                 gdb_assert (f->end != -1);
2081                 if (f->type->kind == TDESC_TYPE_BOOL)
2082                   {
2083                     gdb_assert (f->start == f->end);
2084                     printf_unfiltered
2085                       ("  tdesc_add_flag (type, %d, \"%s\");\n",
2086                        f->start, f->name);
2087                   }
2088                 else if ((type->u.u.size == 4
2089                           && f->type->kind == TDESC_TYPE_UINT32)
2090                          || (type->u.u.size == 8
2091                              && f->type->kind == TDESC_TYPE_UINT64))
2092                   {
2093                     printf_unfiltered
2094                       ("  tdesc_add_bitfield (type, \"%s\", %d, %d);\n",
2095                        f->name, f->start, f->end);
2096                   }
2097                 else
2098                   {
2099                     printf_unfiltered
2100                       ("  field_type = tdesc_named_type (feature,"
2101                        " \"%s\");\n",
2102                        type_name);
2103                     printf_unfiltered
2104                       ("  tdesc_add_typed_bitfield (type, \"%s\","
2105                        " %d, %d, field_type);\n",
2106                        f->name, f->start, f->end);
2107                   }
2108               }
2109             else /* Not a bitfield.  */
2110               {
2111                 gdb_assert (f->end == -1);
2112                 gdb_assert (type->kind == TDESC_TYPE_STRUCT);
2113                 printf_unfiltered
2114                   ("  field_type = tdesc_named_type (feature,"
2115                    " \"%s\");\n",
2116                    type_name);
2117                 printf_unfiltered
2118                   ("  tdesc_add_field (type, \"%s\", field_type);\n",
2119                    f->name);
2120               }
2121           }
2122         break;
2123       case TDESC_TYPE_UNION:
2124         printf_unfiltered
2125           ("  type = tdesc_create_union (feature, \"%s\");\n",
2126            type->name);
2127         for (int ix3 = 0;
2128              VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2129              ix3++)
2130           {
2131             printf_unfiltered
2132               ("  field_type = tdesc_named_type (feature, \"%s\");\n",
2133                f->type->name);
2134             printf_unfiltered
2135               ("  tdesc_add_field (type, \"%s\", field_type);\n",
2136                f->name);
2137           }
2138         break;
2139       case TDESC_TYPE_ENUM:
2140         printf_unfiltered
2141           ("  type = tdesc_create_enum (feature, \"%s\", %d);\n",
2142            type->name, type->u.u.size);
2143         for (int ix3 = 0;
2144              VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2145              ix3++)
2146           printf_unfiltered
2147             ("  tdesc_add_enum_value (type, %d, \"%s\");\n",
2148              f->start, f->name);
2149         break;
2150       default:
2151         error (_("C output is not supported type \"%s\"."), type->name);
2152       }
2153     printf_unfiltered ("\n");
2154   }
2155
2156   void visit (const tdesc_reg *reg) override
2157   {
2158     printf_unfiltered ("  tdesc_create_reg (feature, \"%s\", %ld, %d, ",
2159                        reg->name, reg->target_regnum, reg->save_restore);
2160     if (reg->group)
2161       printf_unfiltered ("\"%s\", ", reg->group);
2162     else
2163       printf_unfiltered ("NULL, ");
2164     printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type);
2165   }
2166
2167 protected:
2168   std::string m_filename_after_features;
2169
2170 private:
2171   char *m_function;
2172   bool m_printed_field_type = false;
2173   bool m_printed_type = false;
2174 };
2175
2176 /* Print target description feature in C.  */
2177
2178 class print_c_feature : public print_c_tdesc
2179 {
2180 public:
2181   print_c_feature (std::string &file)
2182     : print_c_tdesc (file)
2183   {
2184     /* Trim ".tmp".  */
2185     auto const pos = m_filename_after_features.find_last_of ('.');
2186
2187     m_filename_after_features = m_filename_after_features.substr (0, pos);
2188   }
2189
2190   void visit_pre (const target_desc *e) override
2191   {
2192     printf_unfiltered ("  Original: %s */\n\n",
2193                        lbasename (m_filename_after_features.c_str ()));
2194
2195     printf_unfiltered ("#include \"arch/tdesc.h\"\n");
2196     printf_unfiltered ("\n");
2197   }
2198
2199   void visit_post (const target_desc *e) override
2200   {}
2201
2202   void visit_pre (const tdesc_feature *e) override
2203   {
2204     std::string name (m_filename_after_features);
2205
2206     auto pos = name.find_first_of ('.');
2207
2208     name = name.substr (0, pos);
2209     std::replace (name.begin (), name.end (), '/', '_');
2210     std::replace (name.begin (), name.end (), '-', '_');
2211
2212     printf_unfiltered ("static int\n");
2213     printf_unfiltered ("create_feature_%s ", name.c_str ());
2214     printf_unfiltered ("(struct target_desc *result, long regnum)\n");
2215
2216     printf_unfiltered ("{\n");
2217     printf_unfiltered ("  struct tdesc_feature *feature;\n");
2218
2219     printf_unfiltered
2220       ("\n  feature = tdesc_create_feature (result, \"%s\", \"%s\");\n",
2221        e->name, lbasename (m_filename_after_features.c_str ()));
2222   }
2223
2224   void visit_post (const tdesc_feature *e) override
2225   {
2226     printf_unfiltered ("  return regnum;\n");
2227     printf_unfiltered ("}\n");
2228   }
2229
2230   void visit (const tdesc_reg *reg) override
2231   {
2232     /* Most "reg" in XML target descriptions don't have "regnum"
2233        attribute, so the register number is allocated sequentially.
2234        In case that reg has "regnum" attribute, register number
2235        should be set by that explicitly.  */
2236
2237     if (reg->target_regnum < m_next_regnum)
2238       {
2239         /* The integrity check, it can catch some errors on register
2240            number collision, like this,
2241
2242           <reg name="x0" bitsize="32"/>
2243           <reg name="x1" bitsize="32"/>
2244           <reg name="x2" bitsize="32"/>
2245           <reg name="x3" bitsize="32"/>
2246           <reg name="ps" bitsize="32" regnum="3"/>
2247
2248           but it also has false negatives.  The target description
2249           below is correct,
2250
2251           <reg name="x1" bitsize="32" regnum="1"/>
2252           <reg name="x3" bitsize="32" regnum="3"/>
2253           <reg name="x2" bitsize="32" regnum="2"/>
2254           <reg name="x4" bitsize="32" regnum="4"/>
2255
2256           but it is not a good practice, so still error on this,
2257           and also print the message so that it can be saved in the
2258           generated c file.  */
2259
2260         printf_unfiltered ("ERROR: \"regnum\" attribute %ld ",
2261                            reg->target_regnum);
2262         printf_unfiltered ("is not the largest number (%d).\n",
2263                            m_next_regnum);
2264         error (_("\"regnum\" attribute %ld is not the largest number (%d)."),
2265                reg->target_regnum, m_next_regnum);
2266       }
2267
2268     if (reg->target_regnum > m_next_regnum)
2269       {
2270         printf_unfiltered ("  regnum = %ld;\n", reg->target_regnum);
2271         m_next_regnum = reg->target_regnum;
2272       }
2273
2274     printf_unfiltered ("  tdesc_create_reg (feature, \"%s\", regnum++, %d, ",
2275                        reg->name, reg->save_restore);
2276     if (reg->group)
2277       printf_unfiltered ("\"%s\", ", reg->group);
2278     else
2279       printf_unfiltered ("NULL, ");
2280     printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type);
2281
2282     m_next_regnum++;
2283   }
2284
2285 private:
2286   /* The register number to use for the next register we see.  */
2287   int m_next_regnum = 0;
2288 };
2289
2290 static void
2291 maint_print_c_tdesc_cmd (const char *args, int from_tty)
2292 {
2293   const struct target_desc *tdesc;
2294   const char *filename;
2295
2296   if (args == NULL)
2297     {
2298       /* Use the global target-supplied description, not the current
2299          architecture's.  This lets a GDB for one architecture generate C
2300          for another architecture's description, even though the gdbarch
2301          initialization code will reject the new description.  */
2302       tdesc = current_target_desc;
2303       filename = target_description_filename;
2304     }
2305   else
2306     {
2307       /* Use the target description from the XML file.  */
2308       filename = args;
2309       tdesc = file_read_description_xml (filename);
2310     }
2311
2312   if (tdesc == NULL)
2313     error (_("There is no target description to print."));
2314
2315   if (filename == NULL)
2316     error (_("The current target description did not come from an XML file."));
2317
2318   std::string filename_after_features (filename);
2319   auto loc = filename_after_features.rfind ("/features/");
2320
2321   if (loc != std::string::npos)
2322     filename_after_features = filename_after_features.substr (loc + 10);
2323
2324   /* Print c files for target features instead of target descriptions,
2325      because c files got from target features are more flexible than the
2326      counterparts.  */
2327   if (startswith (filename_after_features.c_str (), "i386/32bit-")
2328       || startswith (filename_after_features.c_str (), "i386/64bit-")
2329       || startswith (filename_after_features.c_str (), "i386/x32-core.xml"))
2330     {
2331       print_c_feature v (filename_after_features);
2332
2333       tdesc->accept (v);
2334     }
2335   else
2336     {
2337       print_c_tdesc v (filename_after_features);
2338
2339       tdesc->accept (v);
2340     }
2341 }
2342
2343 namespace selftests {
2344
2345 static std::vector<std::pair<const char*, const target_desc *>> xml_tdesc;
2346
2347 #if GDB_SELF_TEST
2348
2349 /* See target-descritpions.h.  */
2350
2351 void
2352 record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc)
2353 {
2354   xml_tdesc.emplace_back (xml_file, tdesc);
2355 }
2356 #endif
2357
2358 }
2359
2360 /* Check that the target descriptions created dynamically by
2361    architecture-specific code equal the descriptions created from XML files
2362    found in the specified directory DIR.  */
2363
2364 static void
2365 maintenance_check_xml_descriptions (const char *dir, int from_tty)
2366 {
2367   if (dir == NULL)
2368     error (_("Missing dir name"));
2369
2370   gdb::unique_xmalloc_ptr<char> dir1 (tilde_expand (dir));
2371   std::string feature_dir (dir1.get ());
2372   unsigned int failed = 0;
2373
2374   for (auto const &e : selftests::xml_tdesc)
2375     {
2376       std::string tdesc_xml = (feature_dir + SLASH_STRING + e.first);
2377       const target_desc *tdesc
2378         = file_read_description_xml (tdesc_xml.data ());
2379
2380       if (tdesc == NULL || *tdesc != *e.second)
2381         failed++;
2382     }
2383   printf_filtered (_("Tested %lu XML files, %d failed\n"),
2384                    (long) selftests::xml_tdesc.size (), failed);
2385 }
2386
2387 void
2388 _initialize_target_descriptions (void)
2389 {
2390   tdesc_data = gdbarch_data_register_pre_init (tdesc_data_init);
2391
2392   add_prefix_cmd ("tdesc", class_maintenance, set_tdesc_cmd, _("\
2393 Set target description specific variables."),
2394                   &tdesc_set_cmdlist, "set tdesc ",
2395                   0 /* allow-unknown */, &setlist);
2396   add_prefix_cmd ("tdesc", class_maintenance, show_tdesc_cmd, _("\
2397 Show target description specific variables."),
2398                   &tdesc_show_cmdlist, "show tdesc ",
2399                   0 /* allow-unknown */, &showlist);
2400   add_prefix_cmd ("tdesc", class_maintenance, unset_tdesc_cmd, _("\
2401 Unset target description specific variables."),
2402                   &tdesc_unset_cmdlist, "unset tdesc ",
2403                   0 /* allow-unknown */, &unsetlist);
2404
2405   add_setshow_filename_cmd ("filename", class_obscure,
2406                             &tdesc_filename_cmd_string,
2407                             _("\
2408 Set the file to read for an XML target description"), _("\
2409 Show the file to read for an XML target description"), _("\
2410 When set, GDB will read the target description from a local\n\
2411 file instead of querying the remote target."),
2412                             set_tdesc_filename_cmd,
2413                             show_tdesc_filename_cmd,
2414                             &tdesc_set_cmdlist, &tdesc_show_cmdlist);
2415
2416   add_cmd ("filename", class_obscure, unset_tdesc_filename_cmd, _("\
2417 Unset the file to read for an XML target description.  When unset,\n\
2418 GDB will read the description from the target."),
2419            &tdesc_unset_cmdlist);
2420
2421   add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\
2422 Print the current target description as a C source file."),
2423            &maintenanceprintlist);
2424
2425   cmd_list_element *cmd;
2426
2427   cmd = add_cmd ("xml-descriptions", class_maintenance,
2428                  maintenance_check_xml_descriptions, _("\
2429 Check the target descriptions created in GDB equal the descriptions\n\
2430 created from XML files in the directory.\n\
2431 The parameter is the directory name."),
2432                  &maintenancechecklist);
2433   set_cmd_completer (cmd, filename_completer);
2434 }