]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/target-descriptions.c
merge from gcc
[thirdparty/binutils-gdb.git] / gdb / target-descriptions.c
CommitLineData
424163ea
DJ
1/* Target description support for GDB.
2
4c38e0a4 3 Copyright (C) 2006, 2007, 2008, 2009, 2010 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"
424163ea
DJ
32
33#include "gdb_assert.h"
123dc839
DJ
34#include "gdb_obstack.h"
35#include "hashtab.h"
424163ea
DJ
36
37/* Types. */
38
29709017
DJ
39typedef struct property
40{
23181151
DJ
41 char *key;
42 char *value;
29709017
DJ
43} property_s;
44DEF_VEC_O(property_s);
45
123dc839
DJ
46/* An individual register from a target description. */
47
48typedef struct tdesc_reg
49{
50 /* The name of this register. In standard features, it may be
51 recognized by the architecture support code, or it may be purely
52 for the user. */
53 char *name;
54
55 /* The register number used by this target to refer to this
56 register. This is used for remote p/P packets and to determine
57 the ordering of registers in the remote g/G packets. */
58 long target_regnum;
59
60 /* If this flag is set, GDB should save and restore this register
61 around calls to an inferior function. */
62 int save_restore;
63
64 /* The name of the register group containing this register, or NULL
65 if the group should be automatically determined from the
66 register's type. If this is "general", "float", or "vector", the
67 corresponding "info" command should display this register's
68 value. It can be an arbitrary string, but should be limited to
69 alphanumeric characters and internal hyphens. Currently other
70 strings are ignored (treated as NULL). */
71 char *group;
72
73 /* The size of the register, in bits. */
74 int bitsize;
75
76 /* The type of the register. This string corresponds to either
77 a named type from the target description or a predefined
78 type from GDB. */
79 char *type;
80
81 /* The target-described type corresponding to TYPE, if found. */
ad068eab 82 struct tdesc_type *tdesc_type;
123dc839
DJ
83} *tdesc_reg_p;
84DEF_VEC_P(tdesc_reg_p);
85
86/* A named type from a target description. */
ad068eab
UW
87
88typedef struct tdesc_type_field
89{
90 char *name;
91 struct tdesc_type *type;
92} tdesc_type_field;
93DEF_VEC_O(tdesc_type_field);
94
95typedef struct tdesc_type
96{
97 /* The name of this type. */
98 char *name;
99
100 /* Identify the kind of this type. */
101 enum
102 {
103 /* Predefined types. */
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
120 /* Types defined by a target feature. */
121 TDESC_TYPE_VECTOR,
122 TDESC_TYPE_UNION
123 } kind;
124
125 /* Kind-specific data. */
126 union
127 {
128 /* Vector type. */
129 struct
130 {
131 struct tdesc_type *type;
132 int count;
133 } v;
134
135 /* Union type. */
136 struct
137 {
138 VEC(tdesc_type_field) *fields;
139 } u;
140 } u;
141} *tdesc_type_p;
142DEF_VEC_P(tdesc_type_p);
123dc839
DJ
143
144/* A feature from a target description. Each feature is a collection
145 of other elements, e.g. registers and types. */
146
147typedef struct tdesc_feature
148{
149 /* The name of this feature. It may be recognized by the architecture
150 support code. */
151 char *name;
152
153 /* The registers associated with this feature. */
154 VEC(tdesc_reg_p) *registers;
155
156 /* The types associated with this feature. */
ad068eab 157 VEC(tdesc_type_p) *types;
123dc839
DJ
158} *tdesc_feature_p;
159DEF_VEC_P(tdesc_feature_p);
160
e35359c5
UW
161/* A compatible architecture from a target description. */
162typedef const struct bfd_arch_info *arch_p;
163DEF_VEC_P(arch_p);
164
123dc839
DJ
165/* A target description. */
166
424163ea
DJ
167struct target_desc
168{
23181151
DJ
169 /* The architecture reported by the target, if any. */
170 const struct bfd_arch_info *arch;
171
08d16641
PA
172 /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN
173 otherwise. */
174 enum gdb_osabi osabi;
175
e35359c5
UW
176 /* The list of compatible architectures reported by the target. */
177 VEC(arch_p) *compatible;
178
29709017
DJ
179 /* Any architecture-specific properties specified by the target. */
180 VEC(property_s) *properties;
123dc839
DJ
181
182 /* The features associated with this target. */
183 VEC(tdesc_feature_p) *features;
184};
185
186/* Per-architecture data associated with a target description. The
187 target description may be shared by multiple architectures, but
188 this data is private to one gdbarch. */
189
ad068eab
UW
190typedef struct tdesc_arch_reg
191{
192 struct tdesc_reg *reg;
193 struct type *type;
194} tdesc_arch_reg;
195DEF_VEC_O(tdesc_arch_reg);
196
123dc839
DJ
197struct tdesc_arch_data
198{
ad068eab 199 /* A list of register/type pairs, indexed by GDB's internal register number.
123dc839
DJ
200 During initialization of the gdbarch this list is used to store
201 registers which the architecture assigns a fixed register number.
202 Registers which are NULL in this array, or off the end, are
203 treated as zero-sized and nameless (i.e. placeholders in the
204 numbering). */
ad068eab 205 VEC(tdesc_arch_reg) *arch_regs;
123dc839
DJ
206
207 /* Functions which report the register name, type, and reggroups for
208 pseudo-registers. */
209 gdbarch_register_name_ftype *pseudo_register_name;
210 gdbarch_register_type_ftype *pseudo_register_type;
211 gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p;
424163ea
DJ
212};
213
214/* Global state. These variables are associated with the current
215 target; if GDB adds support for multiple simultaneous targets, then
216 these variables should become target-specific data. */
217
218/* A flag indicating that a description has already been fetched from
219 the current target, so it should not be queried again. */
220
221static int target_desc_fetched;
222
223/* The description fetched from the current target, or NULL if the
224 current target did not supply any description. Only valid when
225 target_desc_fetched is set. Only the description initialization
226 code should access this; normally, the description should be
227 accessed through the gdbarch object. */
228
229static const struct target_desc *current_target_desc;
230
23181151
DJ
231/* Other global variables. */
232
233/* The filename to read a target description from. */
234
235static char *target_description_filename;
236
123dc839
DJ
237/* A handle for architecture-specific data associated with the
238 target description (see struct tdesc_arch_data). */
239
240static struct gdbarch_data *tdesc_data;
241
424163ea
DJ
242/* Fetch the current target's description, and switch the current
243 architecture to one which incorporates that description. */
244
245void
246target_find_description (void)
247{
248 /* If we've already fetched a description from the target, don't do
249 it again. This allows a target to fetch the description early,
250 during its to_open or to_create_inferior, if it needs extra
251 information about the target to initialize. */
252 if (target_desc_fetched)
253 return;
254
255 /* The current architecture should not have any target description
256 specified. It should have been cleared, e.g. when we
257 disconnected from the previous target. */
1cf3db46 258 gdb_assert (gdbarch_target_desc (target_gdbarch) == NULL);
424163ea 259
23181151
DJ
260 /* First try to fetch an XML description from the user-specified
261 file. */
262 current_target_desc = NULL;
263 if (target_description_filename != NULL
264 && *target_description_filename != '\0')
265 current_target_desc
266 = file_read_description_xml (target_description_filename);
267
268 /* Next try to read the description from the current target using
269 target objects. */
270 if (current_target_desc == NULL)
271 current_target_desc = target_read_description_xml (&current_target);
272
273 /* If that failed try a target-specific hook. */
274 if (current_target_desc == NULL)
275 current_target_desc = target_read_description (&current_target);
424163ea
DJ
276
277 /* If a non-NULL description was returned, then update the current
278 architecture. */
279 if (current_target_desc)
280 {
281 struct gdbarch_info info;
282
283 gdbarch_info_init (&info);
284 info.target_desc = current_target_desc;
285 if (!gdbarch_update_p (info))
123dc839
DJ
286 warning (_("Architecture rejected target-supplied description"));
287 else
288 {
289 struct tdesc_arch_data *data;
290
1cf3db46 291 data = gdbarch_data (target_gdbarch, tdesc_data);
123dc839 292 if (tdesc_has_registers (current_target_desc)
ad068eab 293 && data->arch_regs == NULL)
123dc839
DJ
294 warning (_("Target-supplied registers are not supported "
295 "by the current architecture"));
296 }
424163ea
DJ
297 }
298
299 /* Now that we know this description is usable, record that we
300 fetched it. */
301 target_desc_fetched = 1;
302}
303
304/* Discard any description fetched from the current target, and switch
305 the current architecture to one with no target description. */
306
307void
308target_clear_description (void)
309{
310 struct gdbarch_info info;
311
312 if (!target_desc_fetched)
313 return;
314
315 target_desc_fetched = 0;
316 current_target_desc = NULL;
317
318 gdbarch_info_init (&info);
319 if (!gdbarch_update_p (info))
320 internal_error (__FILE__, __LINE__,
321 _("Could not remove target-supplied description"));
322}
323
324/* Return the global current target description. This should only be
325 used by gdbarch initialization code; most access should be through
326 an existing gdbarch. */
327
328const struct target_desc *
329target_current_description (void)
330{
331 if (target_desc_fetched)
332 return current_target_desc;
333
334 return NULL;
335}
e35359c5
UW
336
337/* Return non-zero if this target description is compatible
338 with the given BFD architecture. */
339
340int
341tdesc_compatible_p (const struct target_desc *target_desc,
342 const struct bfd_arch_info *arch)
343{
344 const struct bfd_arch_info *compat;
345 int ix;
346
347 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
348 ix++)
349 {
350 if (compat == arch
351 || arch->compatible (arch, compat)
352 || compat->compatible (compat, arch))
353 return 1;
354 }
355
356 return 0;
357}
23181151
DJ
358\f
359
123dc839 360/* Direct accessors for target descriptions. */
424163ea 361
29709017
DJ
362/* Return the string value of a property named KEY, or NULL if the
363 property was not specified. */
364
365const char *
366tdesc_property (const struct target_desc *target_desc, const char *key)
367{
368 struct property *prop;
369 int ix;
370
371 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
372 ix++)
373 if (strcmp (prop->key, key) == 0)
374 return prop->value;
375
376 return NULL;
377}
378
23181151
DJ
379/* Return the BFD architecture associated with this target
380 description, or NULL if no architecture was specified. */
381
382const struct bfd_arch_info *
383tdesc_architecture (const struct target_desc *target_desc)
384{
385 return target_desc->arch;
386}
08d16641
PA
387
388/* Return the OSABI associated with this target description, or
389 GDB_OSABI_UNKNOWN if no osabi was specified. */
390
391enum gdb_osabi
392tdesc_osabi (const struct target_desc *target_desc)
393{
394 return target_desc->osabi;
395}
396
23181151
DJ
397\f
398
123dc839
DJ
399/* Return 1 if this target description includes any registers. */
400
401int
402tdesc_has_registers (const struct target_desc *target_desc)
403{
404 int ix;
405 struct tdesc_feature *feature;
406
407 if (target_desc == NULL)
408 return 0;
409
410 for (ix = 0;
411 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
412 ix++)
413 if (! VEC_empty (tdesc_reg_p, feature->registers))
414 return 1;
415
416 return 0;
417}
418
419/* Return the feature with the given name, if present, or NULL if
420 the named feature is not found. */
421
422const struct tdesc_feature *
423tdesc_find_feature (const struct target_desc *target_desc,
424 const char *name)
425{
426 int ix;
427 struct tdesc_feature *feature;
428
429 for (ix = 0;
430 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
431 ix++)
432 if (strcmp (feature->name, name) == 0)
433 return feature;
434
435 return NULL;
436}
437
438/* Return the name of FEATURE. */
439
440const char *
441tdesc_feature_name (const struct tdesc_feature *feature)
442{
443 return feature->name;
444}
445
ad068eab
UW
446/* Predefined types. */
447static struct tdesc_type tdesc_predefined_types[] =
81adfced 448{
ad068eab
UW
449 { "int8", TDESC_TYPE_INT8 },
450 { "int16", TDESC_TYPE_INT16 },
451 { "int32", TDESC_TYPE_INT32 },
452 { "int64", TDESC_TYPE_INT64 },
453 { "int128", TDESC_TYPE_INT128 },
454 { "uint8", TDESC_TYPE_UINT8 },
455 { "uint16", TDESC_TYPE_UINT16 },
456 { "uint32", TDESC_TYPE_UINT32 },
457 { "uint64", TDESC_TYPE_UINT64 },
458 { "uint128", TDESC_TYPE_UINT128 },
459 { "code_ptr", TDESC_TYPE_CODE_PTR },
460 { "data_ptr", TDESC_TYPE_DATA_PTR },
461 { "ieee_single", TDESC_TYPE_IEEE_SINGLE },
462 { "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
463 { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT }
464};
81adfced 465
123dc839
DJ
466/* Return the type associated with ID in the context of FEATURE, or
467 NULL if none. */
468
ad068eab 469struct tdesc_type *
123dc839
DJ
470tdesc_named_type (const struct tdesc_feature *feature, const char *id)
471{
472 int ix;
ad068eab 473 struct tdesc_type *type;
123dc839
DJ
474
475 /* First try target-defined types. */
ad068eab
UW
476 for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++)
477 if (strcmp (type->name, id) == 0)
478 return type;
123dc839 479
81adfced
DJ
480 /* Next try the predefined types. */
481 for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
482 if (strcmp (tdesc_predefined_types[ix].name, id) == 0)
ad068eab 483 return &tdesc_predefined_types[ix];
123dc839
DJ
484
485 return NULL;
486}
ad068eab
UW
487
488/* Construct, if necessary, and return the GDB type implementing target
489 type TDESC_TYPE for architecture GDBARCH. */
490
491static struct type *
492tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type)
493{
494 switch (tdesc_type->kind)
495 {
496 /* Predefined types. */
497 case TDESC_TYPE_INT8:
df4df182 498 return builtin_type (gdbarch)->builtin_int8;
ad068eab
UW
499
500 case TDESC_TYPE_INT16:
df4df182 501 return builtin_type (gdbarch)->builtin_int16;
ad068eab
UW
502
503 case TDESC_TYPE_INT32:
df4df182 504 return builtin_type (gdbarch)->builtin_int32;
ad068eab
UW
505
506 case TDESC_TYPE_INT64:
df4df182 507 return builtin_type (gdbarch)->builtin_int64;
ad068eab
UW
508
509 case TDESC_TYPE_INT128:
df4df182 510 return builtin_type (gdbarch)->builtin_int128;
ad068eab
UW
511
512 case TDESC_TYPE_UINT8:
df4df182 513 return builtin_type (gdbarch)->builtin_uint8;
ad068eab
UW
514
515 case TDESC_TYPE_UINT16:
df4df182 516 return builtin_type (gdbarch)->builtin_uint16;
ad068eab
UW
517
518 case TDESC_TYPE_UINT32:
df4df182 519 return builtin_type (gdbarch)->builtin_uint32;
ad068eab
UW
520
521 case TDESC_TYPE_UINT64:
df4df182 522 return builtin_type (gdbarch)->builtin_uint64;
ad068eab
UW
523
524 case TDESC_TYPE_UINT128:
df4df182 525 return builtin_type (gdbarch)->builtin_uint128;
ad068eab
UW
526
527 case TDESC_TYPE_CODE_PTR:
528 return builtin_type (gdbarch)->builtin_func_ptr;
529
530 case TDESC_TYPE_DATA_PTR:
531 return builtin_type (gdbarch)->builtin_data_ptr;
532
533 case TDESC_TYPE_IEEE_SINGLE:
e9bb382b 534 return arch_float_type (gdbarch, -1, "builtin_type_ieee_single",
27067745 535 floatformats_ieee_single);
ad068eab
UW
536
537 case TDESC_TYPE_IEEE_DOUBLE:
e9bb382b 538 return arch_float_type (gdbarch, -1, "builtin_type_ieee_double",
27067745 539 floatformats_ieee_double);
ad068eab
UW
540
541 case TDESC_TYPE_ARM_FPA_EXT:
e9bb382b 542 return arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
27067745 543 floatformats_arm_ext);
ad068eab
UW
544
545 /* Types defined by a target feature. */
546 case TDESC_TYPE_VECTOR:
547 {
548 struct type *type, *field_type;
549
550 field_type = tdesc_gdb_type (gdbarch, tdesc_type->u.v.type);
551 type = init_vector_type (field_type, tdesc_type->u.v.count);
552 TYPE_NAME (type) = xstrdup (tdesc_type->name);
553
554 return type;
555 }
556
557 case TDESC_TYPE_UNION:
558 {
559 struct type *type, *field_type;
560 struct tdesc_type_field *f;
561 int ix;
562
e9bb382b 563 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
ad068eab
UW
564 TYPE_NAME (type) = xstrdup (tdesc_type->name);
565
566 for (ix = 0;
567 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
568 ix++)
569 {
570 field_type = tdesc_gdb_type (gdbarch, f->type);
571 append_composite_type_field (type, xstrdup (f->name), field_type);
572
573 /* If any of the children of this union are vectors, flag the
574 union as a vector also. This allows e.g. a union of two
575 vector types to show up automatically in "info vector". */
576 if (TYPE_VECTOR (field_type))
577 TYPE_VECTOR (type) = 1;
578 }
579
580 return type;
581 }
582 }
583
584 internal_error (__FILE__, __LINE__,
585 "Type \"%s\" has an unknown kind %d",
586 tdesc_type->name, tdesc_type->kind);
587}
123dc839
DJ
588\f
589
590/* Support for registers from target descriptions. */
591
592/* Construct the per-gdbarch data. */
593
594static void *
595tdesc_data_init (struct obstack *obstack)
596{
597 struct tdesc_arch_data *data;
598
599 data = OBSTACK_ZALLOC (obstack, struct tdesc_arch_data);
600 return data;
601}
602
603/* Similar, but for the temporary copy used during architecture
604 initialization. */
605
606struct tdesc_arch_data *
607tdesc_data_alloc (void)
608{
609 return XZALLOC (struct tdesc_arch_data);
610}
611
612/* Free something allocated by tdesc_data_alloc, if it is not going
613 to be used (for instance if it was unsuitable for the
614 architecture). */
615
616void
617tdesc_data_cleanup (void *data_untyped)
618{
619 struct tdesc_arch_data *data = data_untyped;
620
ad068eab 621 VEC_free (tdesc_arch_reg, data->arch_regs);
123dc839
DJ
622 xfree (data);
623}
624
625/* Search FEATURE for a register named NAME. */
626
7cc46491
DJ
627static struct tdesc_reg *
628tdesc_find_register_early (const struct tdesc_feature *feature,
629 const char *name)
123dc839
DJ
630{
631 int ixr;
632 struct tdesc_reg *reg;
633
634 for (ixr = 0;
635 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
636 ixr++)
637 if (strcasecmp (reg->name, name) == 0)
7cc46491 638 return reg;
123dc839 639
7cc46491
DJ
640 return NULL;
641}
642
643/* Search FEATURE for a register named NAME. Assign REGNO to it. */
644
645int
646tdesc_numbered_register (const struct tdesc_feature *feature,
647 struct tdesc_arch_data *data,
648 int regno, const char *name)
649{
ad068eab 650 struct tdesc_arch_reg arch_reg = { 0 };
7cc46491
DJ
651 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
652
653 if (reg == NULL)
654 return 0;
655
656 /* Make sure the vector includes a REGNO'th element. */
ad068eab
UW
657 while (regno >= VEC_length (tdesc_arch_reg, data->arch_regs))
658 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &arch_reg);
659
660 arch_reg.reg = reg;
661 VEC_replace (tdesc_arch_reg, data->arch_regs, regno, &arch_reg);
7cc46491 662 return 1;
123dc839
DJ
663}
664
58d6951d
DJ
665/* Search FEATURE for a register named NAME, but do not assign a fixed
666 register number to it. */
667
668int
669tdesc_unnumbered_register (const struct tdesc_feature *feature,
670 const char *name)
671{
672 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
673
674 if (reg == NULL)
675 return 0;
676
677 return 1;
678}
679
7cc46491
DJ
680/* Search FEATURE for a register whose name is in NAMES and assign
681 REGNO to it. */
123dc839
DJ
682
683int
684tdesc_numbered_register_choices (const struct tdesc_feature *feature,
685 struct tdesc_arch_data *data,
686 int regno, const char *const names[])
687{
688 int i;
689
690 for (i = 0; names[i] != NULL; i++)
691 if (tdesc_numbered_register (feature, data, regno, names[i]))
692 return 1;
693
694 return 0;
695}
696
7cc46491
DJ
697/* Search FEATURE for a register named NAME, and return its size in
698 bits. The register must exist. */
699
700int
701tdesc_register_size (const struct tdesc_feature *feature,
702 const char *name)
703{
704 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
705
706 gdb_assert (reg != NULL);
707 return reg->bitsize;
708}
709
123dc839
DJ
710/* Look up a register by its GDB internal register number. */
711
ad068eab
UW
712static struct tdesc_arch_reg *
713tdesc_find_arch_register (struct gdbarch *gdbarch, int regno)
123dc839 714{
ad068eab 715 struct tdesc_arch_reg *reg;
123dc839
DJ
716 struct tdesc_arch_data *data;
717
718 data = gdbarch_data (gdbarch, tdesc_data);
ad068eab
UW
719 if (regno < VEC_length (tdesc_arch_reg, data->arch_regs))
720 return VEC_index (tdesc_arch_reg, data->arch_regs, regno);
123dc839
DJ
721 else
722 return NULL;
723}
724
ad068eab
UW
725static struct tdesc_reg *
726tdesc_find_register (struct gdbarch *gdbarch, int regno)
727{
728 struct tdesc_arch_reg *reg = tdesc_find_arch_register (gdbarch, regno);
729 return reg? reg->reg : NULL;
730}
731
f8b73d13
DJ
732/* Return the name of register REGNO, from the target description or
733 from an architecture-provided pseudo_register_name method. */
734
735const char *
d93859e2 736tdesc_register_name (struct gdbarch *gdbarch, int regno)
123dc839 737{
d93859e2
UW
738 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
739 int num_regs = gdbarch_num_regs (gdbarch);
740 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
123dc839
DJ
741
742 if (reg != NULL)
743 return reg->name;
744
745 if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
746 {
d93859e2 747 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
123dc839 748 gdb_assert (data->pseudo_register_name != NULL);
d93859e2 749 return data->pseudo_register_name (gdbarch, regno);
123dc839
DJ
750 }
751
752 return "";
753}
754
58d6951d 755struct type *
123dc839
DJ
756tdesc_register_type (struct gdbarch *gdbarch, int regno)
757{
ad068eab
UW
758 struct tdesc_arch_reg *arch_reg = tdesc_find_arch_register (gdbarch, regno);
759 struct tdesc_reg *reg = arch_reg? arch_reg->reg : NULL;
123dc839
DJ
760 int num_regs = gdbarch_num_regs (gdbarch);
761 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
762
763 if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs)
764 {
765 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
766 gdb_assert (data->pseudo_register_type != NULL);
767 return data->pseudo_register_type (gdbarch, regno);
768 }
769
770 if (reg == NULL)
771 /* Return "int0_t", since "void" has a misleading size of one. */
df4df182 772 return builtin_type (gdbarch)->builtin_int0;
123dc839 773
ad068eab 774 if (arch_reg->type == NULL)
123dc839 775 {
ad068eab
UW
776 /* First check for a predefined or target defined type. */
777 if (reg->tdesc_type)
778 arch_reg->type = tdesc_gdb_type (gdbarch, reg->tdesc_type);
779
780 /* Next try size-sensitive type shortcuts. */
781 else if (strcmp (reg->type, "float") == 0)
782 {
783 if (reg->bitsize == gdbarch_float_bit (gdbarch))
784 arch_reg->type = builtin_type (gdbarch)->builtin_float;
785 else if (reg->bitsize == gdbarch_double_bit (gdbarch))
786 arch_reg->type = builtin_type (gdbarch)->builtin_double;
787 else if (reg->bitsize == gdbarch_long_double_bit (gdbarch))
788 arch_reg->type = builtin_type (gdbarch)->builtin_long_double;
789 else
790 {
791 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
792 reg->name, reg->bitsize);
793 arch_reg->type = builtin_type (gdbarch)->builtin_double;
794 }
795 }
796 else if (strcmp (reg->type, "int") == 0)
797 {
798 if (reg->bitsize == gdbarch_long_bit (gdbarch))
799 arch_reg->type = builtin_type (gdbarch)->builtin_long;
800 else if (reg->bitsize == TARGET_CHAR_BIT)
801 arch_reg->type = builtin_type (gdbarch)->builtin_char;
802 else if (reg->bitsize == gdbarch_short_bit (gdbarch))
803 arch_reg->type = builtin_type (gdbarch)->builtin_short;
804 else if (reg->bitsize == gdbarch_int_bit (gdbarch))
805 arch_reg->type = builtin_type (gdbarch)->builtin_int;
806 else if (reg->bitsize == gdbarch_long_long_bit (gdbarch))
807 arch_reg->type = builtin_type (gdbarch)->builtin_long_long;
808 else if (reg->bitsize == gdbarch_ptr_bit (gdbarch))
809 /* A bit desperate by this point... */
810 arch_reg->type = builtin_type (gdbarch)->builtin_data_ptr;
811 else
812 {
813 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
814 reg->name, reg->bitsize);
815 arch_reg->type = builtin_type (gdbarch)->builtin_long;
816 }
817 }
818
819 if (arch_reg->type == NULL)
820 internal_error (__FILE__, __LINE__,
821 "Register \"%s\" has an unknown type \"%s\"",
822 reg->name, reg->type);
123dc839 823 }
123dc839 824
ad068eab 825 return arch_reg->type;
123dc839
DJ
826}
827
828static int
829tdesc_remote_register_number (struct gdbarch *gdbarch, int regno)
830{
831 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
832
833 if (reg != NULL)
834 return reg->target_regnum;
835 else
836 return -1;
837}
838
839/* Check whether REGNUM is a member of REGGROUP. Registers from the
840 target description may be classified as general, float, or vector.
f8b73d13
DJ
841 Unlike a gdbarch register_reggroup_p method, this function will
842 return -1 if it does not know; the caller should handle registers
843 with no specified group.
123dc839
DJ
844
845 Arbitrary strings (other than "general", "float", and "vector")
846 from the description are not used; they cause the register to be
847 displayed in "info all-registers" but excluded from "info
848 registers" et al. The names of containing features are also not
849 used. This might be extended to display registers in some more
850 useful groupings.
851
852 The save-restore flag is also implemented here. */
853
f8b73d13
DJ
854int
855tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
856 struct reggroup *reggroup)
123dc839 857{
123dc839
DJ
858 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
859
123dc839
DJ
860 if (reg != NULL && reg->group != NULL)
861 {
862 int general_p = 0, float_p = 0, vector_p = 0;
863
864 if (strcmp (reg->group, "general") == 0)
865 general_p = 1;
866 else if (strcmp (reg->group, "float") == 0)
867 float_p = 1;
868 else if (strcmp (reg->group, "vector") == 0)
869 vector_p = 1;
870
871 if (reggroup == float_reggroup)
872 return float_p;
873
874 if (reggroup == vector_reggroup)
875 return vector_p;
876
877 if (reggroup == general_reggroup)
878 return general_p;
879 }
880
881 if (reg != NULL
882 && (reggroup == save_reggroup || reggroup == restore_reggroup))
883 return reg->save_restore;
884
f8b73d13
DJ
885 return -1;
886}
887
888/* Check whether REGNUM is a member of REGGROUP. Registers with no
889 group specified go to the default reggroup function and are handled
890 by type. */
891
892static int
893tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
894 struct reggroup *reggroup)
895{
896 int num_regs = gdbarch_num_regs (gdbarch);
897 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
898 int ret;
899
900 if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
901 {
902 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
58d6951d
DJ
903 if (data->pseudo_register_reggroup_p != NULL)
904 return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup);
905 /* Otherwise fall through to the default reggroup_p. */
f8b73d13
DJ
906 }
907
908 ret = tdesc_register_in_reggroup_p (gdbarch, regno, reggroup);
909 if (ret != -1)
910 return ret;
911
123dc839
DJ
912 return default_register_reggroup_p (gdbarch, regno, reggroup);
913}
914
915/* Record architecture-specific functions to call for pseudo-register
916 support. */
917
918void
919set_tdesc_pseudo_register_name (struct gdbarch *gdbarch,
920 gdbarch_register_name_ftype *pseudo_name)
921{
922 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
923
924 data->pseudo_register_name = pseudo_name;
925}
926
927void
928set_tdesc_pseudo_register_type (struct gdbarch *gdbarch,
929 gdbarch_register_type_ftype *pseudo_type)
930{
931 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
932
933 data->pseudo_register_type = pseudo_type;
934}
935
936void
937set_tdesc_pseudo_register_reggroup_p
938 (struct gdbarch *gdbarch,
939 gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
940{
941 struct tdesc_arch_data *data = gdbarch_data (gdbarch, tdesc_data);
942
943 data->pseudo_register_reggroup_p = pseudo_reggroup_p;
944}
945
946/* Update GDBARCH to use the target description for registers. */
947
948void
949tdesc_use_registers (struct gdbarch *gdbarch,
7cc46491 950 const struct target_desc *target_desc,
123dc839
DJ
951 struct tdesc_arch_data *early_data)
952{
953 int num_regs = gdbarch_num_regs (gdbarch);
954 int i, ixf, ixr;
123dc839
DJ
955 struct tdesc_feature *feature;
956 struct tdesc_reg *reg;
957 struct tdesc_arch_data *data;
ad068eab 958 struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 };
123dc839
DJ
959 htab_t reg_hash;
960
123dc839
DJ
961 /* We can't use the description for registers if it doesn't describe
962 any. This function should only be called after validating
963 registers, so the caller should know that registers are
964 included. */
965 gdb_assert (tdesc_has_registers (target_desc));
966
967 data = gdbarch_data (gdbarch, tdesc_data);
ad068eab 968 data->arch_regs = early_data->arch_regs;
123dc839
DJ
969 xfree (early_data);
970
971 /* Build up a set of all registers, so that we can assign register
972 numbers where needed. The hash table expands as necessary, so
973 the initial size is arbitrary. */
974 reg_hash = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
975 for (ixf = 0;
976 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
977 ixf++)
978 for (ixr = 0;
979 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
980 ixr++)
981 {
982 void **slot = htab_find_slot (reg_hash, reg, INSERT);
983
984 *slot = reg;
985 }
986
987 /* Remove any registers which were assigned numbers by the
988 architecture. */
ad068eab
UW
989 for (ixr = 0;
990 VEC_iterate (tdesc_arch_reg, data->arch_regs, ixr, arch_reg);
991 ixr++)
992 if (arch_reg->reg)
993 htab_remove_elt (reg_hash, arch_reg->reg);
123dc839
DJ
994
995 /* Assign numbers to the remaining registers and add them to the
f57d151a 996 list of registers. The new numbers are always above gdbarch_num_regs.
123dc839
DJ
997 Iterate over the features, not the hash table, so that the order
998 matches that in the target description. */
999
ad068eab
UW
1000 gdb_assert (VEC_length (tdesc_arch_reg, data->arch_regs) <= num_regs);
1001 while (VEC_length (tdesc_arch_reg, data->arch_regs) < num_regs)
1002 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
123dc839
DJ
1003 for (ixf = 0;
1004 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
1005 ixf++)
1006 for (ixr = 0;
1007 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1008 ixr++)
1009 if (htab_find (reg_hash, reg) != NULL)
1010 {
ad068eab
UW
1011 new_arch_reg.reg = reg;
1012 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
123dc839
DJ
1013 num_regs++;
1014 }
1015
1016 htab_delete (reg_hash);
1017
1018 /* Update the architecture. */
1019 set_gdbarch_num_regs (gdbarch, num_regs);
1020 set_gdbarch_register_name (gdbarch, tdesc_register_name);
1021 set_gdbarch_register_type (gdbarch, tdesc_register_type);
1022 set_gdbarch_remote_register_number (gdbarch,
1023 tdesc_remote_register_number);
1024 set_gdbarch_register_reggroup_p (gdbarch, tdesc_register_reggroup_p);
1025}
1026\f
1027
424163ea
DJ
1028/* Methods for constructing a target description. */
1029
123dc839
DJ
1030static void
1031tdesc_free_reg (struct tdesc_reg *reg)
1032{
1033 xfree (reg->name);
1034 xfree (reg->type);
1035 xfree (reg->group);
1036 xfree (reg);
1037}
1038
1039void
1040tdesc_create_reg (struct tdesc_feature *feature, const char *name,
1041 int regnum, int save_restore, const char *group,
1042 int bitsize, const char *type)
1043{
1044 struct tdesc_reg *reg = XZALLOC (struct tdesc_reg);
1045
1046 reg->name = xstrdup (name);
1047 reg->target_regnum = regnum;
1048 reg->save_restore = save_restore;
1049 reg->group = group ? xstrdup (group) : NULL;
1050 reg->bitsize = bitsize;
c8c12293 1051 reg->type = type ? xstrdup (type) : xstrdup ("<unknown>");
123dc839
DJ
1052
1053 /* If the register's type is target-defined, look it up now. We may not
1054 have easy access to the containing feature when we want it later. */
ad068eab 1055 reg->tdesc_type = tdesc_named_type (feature, reg->type);
123dc839
DJ
1056
1057 VEC_safe_push (tdesc_reg_p, feature->registers, reg);
1058}
1059
ad068eab
UW
1060static void
1061tdesc_free_type (struct tdesc_type *type)
1062{
1063
1064 switch (type->kind)
1065 {
1066 case TDESC_TYPE_UNION:
1067 {
1068 struct tdesc_type_field *f;
1069 int ix;
1070
1071 for (ix = 0;
1072 VEC_iterate (tdesc_type_field, type->u.u.fields, ix, f);
1073 ix++)
1074 xfree (f->name);
1075
1076 VEC_free (tdesc_type_field, type->u.u.fields);
1077 }
1078 break;
1079
1080 default:
1081 break;
1082 }
1083
1084 xfree (type->name);
1085 xfree (type);
1086}
1087
1088struct tdesc_type *
1089tdesc_create_vector (struct tdesc_feature *feature, const char *name,
1090 struct tdesc_type *field_type, int count)
1091{
1092 struct tdesc_type *type = XZALLOC (struct tdesc_type);
1093
1094 type->name = xstrdup (name);
1095 type->kind = TDESC_TYPE_VECTOR;
1096 type->u.v.type = field_type;
1097 type->u.v.count = count;
1098
1099 VEC_safe_push (tdesc_type_p, feature->types, type);
1100 return type;
1101}
1102
1103struct tdesc_type *
1104tdesc_create_union (struct tdesc_feature *feature, const char *name)
1105{
1106 struct tdesc_type *type = XZALLOC (struct tdesc_type);
1107
1108 type->name = xstrdup (name);
1109 type->kind = TDESC_TYPE_UNION;
1110
1111 VEC_safe_push (tdesc_type_p, feature->types, type);
1112 return type;
1113}
1114
1115void
1116tdesc_add_field (struct tdesc_type *type, const char *field_name,
1117 struct tdesc_type *field_type)
1118{
1119 struct tdesc_type_field f = { 0 };
1120
1121 gdb_assert (type->kind == TDESC_TYPE_UNION);
1122
1123 f.name = xstrdup (field_name);
1124 f.type = field_type;
1125
1126 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1127}
1128
123dc839
DJ
1129static void
1130tdesc_free_feature (struct tdesc_feature *feature)
1131{
1132 struct tdesc_reg *reg;
ad068eab 1133 struct tdesc_type *type;
123dc839
DJ
1134 int ix;
1135
1136 for (ix = 0; VEC_iterate (tdesc_reg_p, feature->registers, ix, reg); ix++)
1137 tdesc_free_reg (reg);
1138 VEC_free (tdesc_reg_p, feature->registers);
1139
ad068eab
UW
1140 for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++)
1141 tdesc_free_type (type);
1142 VEC_free (tdesc_type_p, feature->types);
123dc839
DJ
1143
1144 xfree (feature->name);
1145 xfree (feature);
1146}
1147
1148struct tdesc_feature *
1149tdesc_create_feature (struct target_desc *tdesc, const char *name)
1150{
1151 struct tdesc_feature *new_feature = XZALLOC (struct tdesc_feature);
1152
1153 new_feature->name = xstrdup (name);
1154
1155 VEC_safe_push (tdesc_feature_p, tdesc->features, new_feature);
1156 return new_feature;
1157}
1158
424163ea
DJ
1159struct target_desc *
1160allocate_target_description (void)
1161{
1162 return XZALLOC (struct target_desc);
1163}
29709017 1164
23181151
DJ
1165static void
1166free_target_description (void *arg)
1167{
1168 struct target_desc *target_desc = arg;
123dc839 1169 struct tdesc_feature *feature;
23181151
DJ
1170 struct property *prop;
1171 int ix;
1172
123dc839
DJ
1173 for (ix = 0;
1174 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
1175 ix++)
1176 tdesc_free_feature (feature);
1177 VEC_free (tdesc_feature_p, target_desc->features);
1178
23181151
DJ
1179 for (ix = 0;
1180 VEC_iterate (property_s, target_desc->properties, ix, prop);
1181 ix++)
1182 {
1183 xfree (prop->key);
1184 xfree (prop->value);
1185 }
1186 VEC_free (property_s, target_desc->properties);
1187
e35359c5
UW
1188 VEC_free (arch_p, target_desc->compatible);
1189
23181151
DJ
1190 xfree (target_desc);
1191}
1192
1193struct cleanup *
1194make_cleanup_free_target_description (struct target_desc *target_desc)
1195{
1196 return make_cleanup (free_target_description, target_desc);
1197}
1198
e35359c5
UW
1199void
1200tdesc_add_compatible (struct target_desc *target_desc,
1201 const struct bfd_arch_info *compatible)
1202{
1203 const struct bfd_arch_info *compat;
1204 int ix;
1205
1206 /* If this instance of GDB is compiled without BFD support for the
1207 compatible architecture, simply ignore it -- we would not be able
1208 to handle it anyway. */
1209 if (compatible == NULL)
1210 return;
1211
1212 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
1213 ix++)
1214 if (compat == compatible)
1215 internal_error (__FILE__, __LINE__,
1216 _("Attempted to add duplicate "
1217 "compatible architecture \"%s\""),
1218 compatible->printable_name);
1219
1220 VEC_safe_push (arch_p, target_desc->compatible, compatible);
1221}
1222
29709017
DJ
1223void
1224set_tdesc_property (struct target_desc *target_desc,
1225 const char *key, const char *value)
1226{
1227 struct property *prop, new_prop;
1228 int ix;
1229
1230 gdb_assert (key != NULL && value != NULL);
1231
1232 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
1233 ix++)
1234 if (strcmp (prop->key, key) == 0)
1235 internal_error (__FILE__, __LINE__,
1236 _("Attempted to add duplicate property \"%s\""), key);
1237
23181151
DJ
1238 new_prop.key = xstrdup (key);
1239 new_prop.value = xstrdup (value);
29709017
DJ
1240 VEC_safe_push (property_s, target_desc->properties, &new_prop);
1241}
23181151
DJ
1242
1243void
1244set_tdesc_architecture (struct target_desc *target_desc,
1245 const struct bfd_arch_info *arch)
1246{
1247 target_desc->arch = arch;
1248}
08d16641
PA
1249
1250void
1251set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
1252{
1253 target_desc->osabi = osabi;
1254}
23181151
DJ
1255\f
1256
1257static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
1258static struct cmd_list_element *tdesc_unset_cmdlist;
1259
1260/* Helper functions for the CLI commands. */
1261
1262static void
1263set_tdesc_cmd (char *args, int from_tty)
1264{
1265 help_list (tdesc_set_cmdlist, "set tdesc ", -1, gdb_stdout);
1266}
1267
1268static void
1269show_tdesc_cmd (char *args, int from_tty)
1270{
1271 cmd_show_list (tdesc_show_cmdlist, from_tty, "");
1272}
1273
1274static void
1275unset_tdesc_cmd (char *args, int from_tty)
1276{
1277 help_list (tdesc_unset_cmdlist, "unset tdesc ", -1, gdb_stdout);
1278}
1279
1280static void
1281set_tdesc_filename_cmd (char *args, int from_tty,
1282 struct cmd_list_element *c)
1283{
1284 target_clear_description ();
1285 target_find_description ();
1286}
1287
1288static void
1289show_tdesc_filename_cmd (struct ui_file *file, int from_tty,
1290 struct cmd_list_element *c,
1291 const char *value)
1292{
1293 if (value != NULL && *value != '\0')
1294 printf_filtered (_("\
1295The target description will be read from \"%s\".\n"),
1296 value);
1297 else
1298 printf_filtered (_("\
1299The target description will be read from the target.\n"));
1300}
1301
1302static void
1303unset_tdesc_filename_cmd (char *args, int from_tty)
1304{
1305 xfree (target_description_filename);
1306 target_description_filename = NULL;
1307 target_clear_description ();
1308 target_find_description ();
1309}
1310
81adfced
DJ
1311static void
1312maint_print_c_tdesc_cmd (char *args, int from_tty)
1313{
1314 const struct target_desc *tdesc;
e35359c5 1315 const struct bfd_arch_info *compatible;
81adfced
DJ
1316 const char *filename, *inp;
1317 char *function, *outp;
1318 struct property *prop;
1319 struct tdesc_feature *feature;
1320 struct tdesc_reg *reg;
ad068eab
UW
1321 struct tdesc_type *type;
1322 struct tdesc_type_field *f;
81adfced
DJ
1323 int ix, ix2, ix3;
1324
1325 /* Use the global target-supplied description, not the current
1326 architecture's. This lets a GDB for one architecture generate C
1327 for another architecture's description, even though the gdbarch
1328 initialization code will reject the new description. */
1329 tdesc = current_target_desc;
1330 if (tdesc == NULL)
1331 error (_("There is no target description to print."));
1332
1333 if (target_description_filename == NULL)
1334 error (_("The current target description did not come from an XML file."));
1335
1336 filename = lbasename (target_description_filename);
db3b9a10 1337 function = alloca (strlen (filename) + 1);
81adfced
DJ
1338 for (inp = filename, outp = function; *inp != '\0'; inp++)
1339 if (*inp == '.')
1340 break;
1341 else if (*inp == '-')
1342 *outp++ = '_';
1343 else
1344 *outp++ = *inp;
1345 *outp = '\0';
1346
1347 /* Standard boilerplate. */
1348 printf_unfiltered ("/* THIS FILE IS GENERATED. Original: %s */\n\n",
1349 filename);
1350 printf_unfiltered ("#include \"defs.h\"\n");
81adfced
DJ
1351 printf_unfiltered ("#include \"target-descriptions.h\"\n");
1352 printf_unfiltered ("\n");
1353
1354 printf_unfiltered ("struct target_desc *tdesc_%s;\n", function);
1355 printf_unfiltered ("static void\n");
1356 printf_unfiltered ("initialize_tdesc_%s (void)\n", function);
1357 printf_unfiltered ("{\n");
1358 printf_unfiltered
1359 (" struct target_desc *result = allocate_target_description ();\n");
1360 printf_unfiltered (" struct tdesc_feature *feature;\n");
ad068eab 1361 printf_unfiltered (" struct tdesc_type *field_type, *type;\n");
81adfced
DJ
1362 printf_unfiltered ("\n");
1363
1364 if (tdesc_architecture (tdesc) != NULL)
1365 {
1366 printf_unfiltered
1367 (" set_tdesc_architecture (result, bfd_scan_arch (\"%s\"));\n",
1368 tdesc_architecture (tdesc)->printable_name);
1369 printf_unfiltered ("\n");
1370 }
1371
e35359c5
UW
1372 for (ix = 0; VEC_iterate (arch_p, tdesc->compatible, ix, compatible);
1373 ix++)
1374 {
1375 printf_unfiltered
1376 (" tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n",
1377 compatible->printable_name);
1378 }
1379 if (ix)
1380 printf_unfiltered ("\n");
1381
81adfced
DJ
1382 for (ix = 0; VEC_iterate (property_s, tdesc->properties, ix, prop);
1383 ix++)
1384 {
1385 printf_unfiltered (" set_tdesc_property (result, \"%s\", \"%s\");\n",
1386 prop->key, prop->value);
1387 }
1388
1389 for (ix = 0;
1390 VEC_iterate (tdesc_feature_p, tdesc->features, ix, feature);
1391 ix++)
1392 {
1393 printf_unfiltered (" feature = tdesc_create_feature (result, \"%s\");\n",
1394 feature->name);
1395
1396 for (ix2 = 0;
ad068eab 1397 VEC_iterate (tdesc_type_p, feature->types, ix2, type);
81adfced
DJ
1398 ix2++)
1399 {
ad068eab 1400 switch (type->kind)
81adfced 1401 {
ad068eab 1402 case TDESC_TYPE_VECTOR:
81adfced
DJ
1403 printf_unfiltered
1404 (" field_type = tdesc_named_type (feature, \"%s\");\n",
ad068eab 1405 type->u.v.type->name);
81adfced 1406 printf_unfiltered
ad068eab
UW
1407 (" tdesc_create_vector (feature, \"%s\", field_type, %d);\n",
1408 type->name, type->u.v.count);
81adfced 1409 break;
ad068eab 1410 case TDESC_TYPE_UNION:
81adfced 1411 printf_unfiltered
ad068eab
UW
1412 (" type = tdesc_create_union (feature, \"%s\");\n",
1413 type->name);
1414 for (ix3 = 0;
1415 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
1416 ix3++)
81adfced
DJ
1417 {
1418 printf_unfiltered
1419 (" field_type = tdesc_named_type (feature, \"%s\");\n",
ad068eab 1420 f->type->name);
81adfced 1421 printf_unfiltered
ad068eab
UW
1422 (" tdesc_add_field (type, \"%s\", field_type);\n",
1423 f->name);
81adfced 1424 }
81adfced
DJ
1425 break;
1426 default:
ad068eab 1427 error (_("C output is not supported type \"%s\"."), type->name);
81adfced 1428 }
81adfced
DJ
1429 printf_unfiltered ("\n");
1430 }
1431
1432 for (ix2 = 0;
1433 VEC_iterate (tdesc_reg_p, feature->registers, ix2, reg);
1434 ix2++)
1435 {
1436 printf_unfiltered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ",
1437 reg->name, reg->target_regnum, reg->save_restore);
1438 if (reg->group)
1439 printf_unfiltered ("\"%s\", ", reg->group);
1440 else
1441 printf_unfiltered ("NULL, ");
1442 printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type);
1443 }
1444
1445 printf_unfiltered ("\n");
1446 }
1447
1448 printf_unfiltered (" tdesc_%s = result;\n", function);
1449 printf_unfiltered ("}\n");
1450}
1451
2c0b251b
PA
1452/* Provide a prototype to silence -Wmissing-prototypes. */
1453extern initialize_file_ftype _initialize_target_descriptions;
1454
23181151
DJ
1455void
1456_initialize_target_descriptions (void)
1457{
123dc839
DJ
1458 tdesc_data = gdbarch_data_register_pre_init (tdesc_data_init);
1459
23181151
DJ
1460 add_prefix_cmd ("tdesc", class_maintenance, set_tdesc_cmd, _("\
1461Set target description specific variables."),
1462 &tdesc_set_cmdlist, "set tdesc ",
1463 0 /* allow-unknown */, &setlist);
1464 add_prefix_cmd ("tdesc", class_maintenance, show_tdesc_cmd, _("\
1465Show target description specific variables."),
1466 &tdesc_show_cmdlist, "show tdesc ",
1467 0 /* allow-unknown */, &showlist);
1468 add_prefix_cmd ("tdesc", class_maintenance, unset_tdesc_cmd, _("\
1469Unset target description specific variables."),
1470 &tdesc_unset_cmdlist, "unset tdesc ",
1471 0 /* allow-unknown */, &unsetlist);
1472
1473 add_setshow_filename_cmd ("filename", class_obscure,
1474 &target_description_filename,
1475 _("\
1476Set the file to read for an XML target description"), _("\
1477Show the file to read for an XML target description"), _("\
1478When set, GDB will read the target description from a local\n\
1479file instead of querying the remote target."),
1480 set_tdesc_filename_cmd,
1481 show_tdesc_filename_cmd,
1482 &tdesc_set_cmdlist, &tdesc_show_cmdlist);
1483
1484 add_cmd ("filename", class_obscure, unset_tdesc_filename_cmd, _("\
1485Unset the file to read for an XML target description. When unset,\n\
1486GDB will read the description from the target."),
1487 &tdesc_unset_cmdlist);
81adfced
DJ
1488
1489 add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\
1490Print the current target description as a C source file."),
1491 &maintenanceprintlist);
23181151 1492}