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