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