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