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