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