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