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