Constify some commands in target-descriptions.c
[deliverable/binutils-gdb.git] / gdb / target-descriptions.c
1 /* Target description support for GDB.
2
3 Copyright (C) 2006-2017 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 #include <algorithm>
38 #include "completer.h"
39 #include "readline/tilde.h" /* tilde_expand */
40
41 /* The interface to visit different elements of target description. */
42
43 class tdesc_element_visitor
44 {
45 public:
46 virtual void visit_pre (const target_desc *e) = 0;
47 virtual void visit_post (const target_desc *e) = 0;
48
49 virtual void visit_pre (const tdesc_feature *e) = 0;
50 virtual void visit_post (const tdesc_feature *e) = 0;
51
52 virtual void visit (const tdesc_type *e) = 0;
53 virtual void visit (const tdesc_reg *e) = 0;
54 };
55
56 class tdesc_element
57 {
58 public:
59 virtual void accept (tdesc_element_visitor &v) const = 0;
60 };
61
62 /* Types. */
63
64 typedef struct property
65 {
66 char *key;
67 char *value;
68 } property_s;
69 DEF_VEC_O(property_s);
70
71 /* An individual register from a target description. */
72
73 typedef struct tdesc_reg : tdesc_element
74 {
75 tdesc_reg (struct tdesc_feature *feature, const char *name_,
76 int regnum, int save_restore_, const char *group_,
77 int bitsize_, const char *type_)
78 : name (xstrdup (name_)), target_regnum (regnum),
79 save_restore (save_restore_),
80 group (group_ != NULL ? xstrdup (group_) : NULL),
81 bitsize (bitsize_),
82 type (type_ != NULL ? xstrdup (type_) : xstrdup ("<unknown>"))
83 {
84 /* If the register's type is target-defined, look it up now. We may not
85 have easy access to the containing feature when we want it later. */
86 tdesc_type = tdesc_named_type (feature, type);
87 }
88
89 virtual ~tdesc_reg ()
90 {
91 xfree (name);
92 xfree (type);
93 xfree (group);
94 }
95
96 DISABLE_COPY_AND_ASSIGN (tdesc_reg);
97
98 /* The name of this register. In standard features, it may be
99 recognized by the architecture support code, or it may be purely
100 for the user. */
101 char *name;
102
103 /* The register number used by this target to refer to this
104 register. This is used for remote p/P packets and to determine
105 the ordering of registers in the remote g/G packets. */
106 long target_regnum;
107
108 /* If this flag is set, GDB should save and restore this register
109 around calls to an inferior function. */
110 int save_restore;
111
112 /* The name of the register group containing this register, or NULL
113 if the group should be automatically determined from the
114 register's type. If this is "general", "float", or "vector", the
115 corresponding "info" command should display this register's
116 value. It can be an arbitrary string, but should be limited to
117 alphanumeric characters and internal hyphens. Currently other
118 strings are ignored (treated as NULL). */
119 char *group;
120
121 /* The size of the register, in bits. */
122 int bitsize;
123
124 /* The type of the register. This string corresponds to either
125 a named type from the target description or a predefined
126 type from GDB. */
127 char *type;
128
129 /* The target-described type corresponding to TYPE, if found. */
130 struct tdesc_type *tdesc_type;
131
132 void accept (tdesc_element_visitor &v) const override
133 {
134 v.visit (this);
135 }
136
137 bool operator== (const tdesc_reg &other) const
138 {
139 return (streq (name, other.name)
140 && target_regnum == other.target_regnum
141 && save_restore == other.save_restore
142 && bitsize == other.bitsize
143 && (group == other.group || streq (group, other.group))
144 && streq (type, other.type));
145 }
146
147 bool operator!= (const tdesc_reg &other) const
148 {
149 return !(*this == other);
150 }
151 } *tdesc_reg_p;
152 DEF_VEC_P(tdesc_reg_p);
153
154 /* A named type from a target description. */
155
156 typedef struct tdesc_type_field
157 {
158 char *name;
159 struct tdesc_type *type;
160 /* For non-enum-values, either both are -1 (non-bitfield), or both are
161 not -1 (bitfield). For enum values, start is the value (which could be
162 -1), end is -1. */
163 int start, end;
164 } tdesc_type_field;
165 DEF_VEC_O(tdesc_type_field);
166
167 enum tdesc_type_kind
168 {
169 /* Predefined types. */
170 TDESC_TYPE_BOOL,
171 TDESC_TYPE_INT8,
172 TDESC_TYPE_INT16,
173 TDESC_TYPE_INT32,
174 TDESC_TYPE_INT64,
175 TDESC_TYPE_INT128,
176 TDESC_TYPE_UINT8,
177 TDESC_TYPE_UINT16,
178 TDESC_TYPE_UINT32,
179 TDESC_TYPE_UINT64,
180 TDESC_TYPE_UINT128,
181 TDESC_TYPE_CODE_PTR,
182 TDESC_TYPE_DATA_PTR,
183 TDESC_TYPE_IEEE_SINGLE,
184 TDESC_TYPE_IEEE_DOUBLE,
185 TDESC_TYPE_ARM_FPA_EXT,
186 TDESC_TYPE_I387_EXT,
187
188 /* Types defined by a target feature. */
189 TDESC_TYPE_VECTOR,
190 TDESC_TYPE_STRUCT,
191 TDESC_TYPE_UNION,
192 TDESC_TYPE_FLAGS,
193 TDESC_TYPE_ENUM
194 };
195
196 typedef struct tdesc_type : tdesc_element
197 {
198 tdesc_type (const char *name_, enum tdesc_type_kind kind_)
199 : name (xstrdup (name_)), kind (kind_)
200 {
201 memset (&u, 0, sizeof (u));
202 }
203
204 virtual ~tdesc_type ()
205 {
206 switch (kind)
207 {
208 case TDESC_TYPE_STRUCT:
209 case TDESC_TYPE_UNION:
210 case TDESC_TYPE_FLAGS:
211 case TDESC_TYPE_ENUM:
212 {
213 struct tdesc_type_field *f;
214 int ix;
215
216 for (ix = 0;
217 VEC_iterate (tdesc_type_field, u.u.fields, ix, f);
218 ix++)
219 xfree (f->name);
220
221 VEC_free (tdesc_type_field, u.u.fields);
222 }
223 break;
224
225 default:
226 break;
227 }
228 xfree ((char *) name);
229 }
230
231 DISABLE_COPY_AND_ASSIGN (tdesc_type);
232
233 /* The name of this type. If this type is a built-in type, this is
234 a pointer to a constant string. Otherwise, it's a
235 malloc-allocated string (and thus must be freed). */
236 const char *name;
237
238 /* Identify the kind of this type. */
239 enum tdesc_type_kind kind;
240
241 /* Kind-specific data. */
242 union
243 {
244 /* Vector type. */
245 struct
246 {
247 struct tdesc_type *type;
248 int count;
249 } v;
250
251 /* Struct, union, flags, or enum type. */
252 struct
253 {
254 VEC(tdesc_type_field) *fields;
255 int size;
256 } u;
257 } u;
258
259 void accept (tdesc_element_visitor &v) const override
260 {
261 v.visit (this);
262 }
263
264 bool operator== (const tdesc_type &other) const
265 {
266 return (streq (name, other.name) && kind == other.kind);
267 }
268
269 bool operator!= (const tdesc_type &other) const
270 {
271 return !(*this == other);
272 }
273 } *tdesc_type_p;
274 DEF_VEC_P(tdesc_type_p);
275
276 /* A feature from a target description. Each feature is a collection
277 of other elements, e.g. registers and types. */
278
279 typedef struct tdesc_feature : tdesc_element
280 {
281 tdesc_feature (const char *name_)
282 : name (xstrdup (name_))
283 {}
284
285 virtual ~tdesc_feature ()
286 {
287 struct tdesc_reg *reg;
288 struct tdesc_type *type;
289 int ix;
290
291 for (ix = 0; VEC_iterate (tdesc_reg_p, registers, ix, reg); ix++)
292 delete reg;
293 VEC_free (tdesc_reg_p, registers);
294
295 for (ix = 0; VEC_iterate (tdesc_type_p, types, ix, type); ix++)
296 delete type;
297 VEC_free (tdesc_type_p, types);
298
299 xfree (name);
300 }
301
302 DISABLE_COPY_AND_ASSIGN (tdesc_feature);
303
304 /* The name of this feature. It may be recognized by the architecture
305 support code. */
306 char *name;
307
308 /* The registers associated with this feature. */
309 VEC(tdesc_reg_p) *registers = NULL;
310
311 /* The types associated with this feature. */
312 VEC(tdesc_type_p) *types = NULL;
313
314 void accept (tdesc_element_visitor &v) const override
315 {
316 v.visit_pre (this);
317
318 struct tdesc_type *type;
319
320 for (int ix = 0;
321 VEC_iterate (tdesc_type_p, types, ix, type);
322 ix++)
323 type->accept (v);
324
325 struct tdesc_reg *reg;
326
327 for (int ix = 0;
328 VEC_iterate (tdesc_reg_p, registers, ix, reg);
329 ix++)
330 reg->accept (v);
331
332
333 v.visit_post (this);
334 }
335
336 bool operator== (const tdesc_feature &other) const
337 {
338 if (strcmp (name, other.name) != 0)
339 return false;
340
341 if (VEC_length (tdesc_reg_p, registers)
342 != VEC_length (tdesc_reg_p, other.registers))
343 return false;
344
345 struct tdesc_reg *reg;
346
347 for (int ix = 0;
348 VEC_iterate (tdesc_reg_p, registers, ix, reg);
349 ix++)
350 {
351 tdesc_reg *reg2
352 = VEC_index (tdesc_reg_p, other.registers, ix);
353
354 if (reg != reg2 && *reg != *reg2)
355 return false;
356 }
357
358 if (VEC_length (tdesc_type_p, types)
359 != VEC_length (tdesc_type_p, other.types))
360 return false;
361
362 tdesc_type *type;
363
364 for (int ix = 0;
365 VEC_iterate (tdesc_type_p, types, ix, type);
366 ix++)
367 {
368 tdesc_type *type2
369 = VEC_index (tdesc_type_p, other.types, ix);
370
371 if (type != type2 && *type != *type2)
372 return false;
373 }
374
375 return true;
376 }
377
378 bool operator!= (const tdesc_feature &other) const
379 {
380 return !(*this == other);
381 }
382
383 } *tdesc_feature_p;
384 DEF_VEC_P(tdesc_feature_p);
385
386 /* A compatible architecture from a target description. */
387 typedef const struct bfd_arch_info *arch_p;
388 DEF_VEC_P(arch_p);
389
390 /* A target description. */
391
392 struct target_desc : tdesc_element
393 {
394 target_desc ()
395 {}
396
397 virtual ~target_desc ()
398 {
399 struct tdesc_feature *feature;
400 struct property *prop;
401 int ix;
402
403 for (ix = 0;
404 VEC_iterate (tdesc_feature_p, features, ix, feature);
405 ix++)
406 delete feature;
407 VEC_free (tdesc_feature_p, features);
408
409 for (ix = 0;
410 VEC_iterate (property_s, properties, ix, prop);
411 ix++)
412 {
413 xfree (prop->key);
414 xfree (prop->value);
415 }
416
417 VEC_free (property_s, properties);
418 VEC_free (arch_p, compatible);
419 }
420
421 target_desc (const target_desc &) = delete;
422 void operator= (const target_desc &) = delete;
423
424 /* The architecture reported by the target, if any. */
425 const struct bfd_arch_info *arch = NULL;
426
427 /* The osabi reported by the target, if any; GDB_OSABI_UNKNOWN
428 otherwise. */
429 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
430
431 /* The list of compatible architectures reported by the target. */
432 VEC(arch_p) *compatible = NULL;
433
434 /* Any architecture-specific properties specified by the target. */
435 VEC(property_s) *properties = NULL;
436
437 /* The features associated with this target. */
438 VEC(tdesc_feature_p) *features = NULL;
439
440 void accept (tdesc_element_visitor &v) const override
441 {
442 v.visit_pre (this);
443
444 struct tdesc_feature *feature;
445
446 for (int ix = 0;
447 VEC_iterate (tdesc_feature_p, features, ix, feature);
448 ix++)
449 feature->accept (v);
450
451 v.visit_post (this);
452 }
453
454 bool operator== (const target_desc &other) const
455 {
456 if (arch != other.arch)
457 return false;
458
459 if (osabi != other.osabi)
460 return false;
461
462 if (VEC_length (tdesc_feature_p, features)
463 != VEC_length (tdesc_feature_p, other.features))
464 return false;
465
466 struct tdesc_feature *feature;
467
468 for (int ix = 0;
469 VEC_iterate (tdesc_feature_p, features, ix, feature);
470 ix++)
471 {
472 struct tdesc_feature *feature2
473 = VEC_index (tdesc_feature_p, other.features, ix);
474
475 if (feature != feature2 && *feature != *feature2)
476 return false;
477 }
478
479 return true;
480 }
481
482 bool operator!= (const target_desc &other) const
483 {
484 return !(*this == other);
485 }
486 };
487
488 /* Per-architecture data associated with a target description. The
489 target description may be shared by multiple architectures, but
490 this data is private to one gdbarch. */
491
492 typedef struct tdesc_arch_reg
493 {
494 struct tdesc_reg *reg;
495 struct type *type;
496 } tdesc_arch_reg;
497 DEF_VEC_O(tdesc_arch_reg);
498
499 struct tdesc_arch_data
500 {
501 /* A list of register/type pairs, indexed by GDB's internal register number.
502 During initialization of the gdbarch this list is used to store
503 registers which the architecture assigns a fixed register number.
504 Registers which are NULL in this array, or off the end, are
505 treated as zero-sized and nameless (i.e. placeholders in the
506 numbering). */
507 VEC(tdesc_arch_reg) *arch_regs;
508
509 /* Functions which report the register name, type, and reggroups for
510 pseudo-registers. */
511 gdbarch_register_name_ftype *pseudo_register_name;
512 gdbarch_register_type_ftype *pseudo_register_type;
513 gdbarch_register_reggroup_p_ftype *pseudo_register_reggroup_p;
514 };
515
516 /* Info about an inferior's target description. There's one of these
517 for each inferior. */
518
519 struct target_desc_info
520 {
521 /* A flag indicating that a description has already been fetched
522 from the target, so it should not be queried again. */
523
524 int fetched;
525
526 /* The description fetched from the target, or NULL if the target
527 did not supply any description. Only valid when
528 target_desc_fetched is set. Only the description initialization
529 code should access this; normally, the description should be
530 accessed through the gdbarch object. */
531
532 const struct target_desc *tdesc;
533
534 /* The filename to read a target description from, as set by "set
535 tdesc filename ..." */
536
537 char *filename;
538 };
539
540 /* Get the inferior INF's target description info, allocating one on
541 the stop if necessary. */
542
543 static struct target_desc_info *
544 get_tdesc_info (struct inferior *inf)
545 {
546 if (inf->tdesc_info == NULL)
547 inf->tdesc_info = XCNEW (struct target_desc_info);
548 return inf->tdesc_info;
549 }
550
551 /* A handle for architecture-specific data associated with the
552 target description (see struct tdesc_arch_data). */
553
554 static struct gdbarch_data *tdesc_data;
555
556 /* See target-descriptions.h. */
557
558 int
559 target_desc_info_from_user_p (struct target_desc_info *info)
560 {
561 return info != NULL && info->filename != NULL;
562 }
563
564 /* See target-descriptions.h. */
565
566 void
567 copy_inferior_target_desc_info (struct inferior *destinf, struct inferior *srcinf)
568 {
569 struct target_desc_info *src = get_tdesc_info (srcinf);
570 struct target_desc_info *dest = get_tdesc_info (destinf);
571
572 dest->fetched = src->fetched;
573 dest->tdesc = src->tdesc;
574 dest->filename = src->filename != NULL ? xstrdup (src->filename) : NULL;
575 }
576
577 /* See target-descriptions.h. */
578
579 void
580 target_desc_info_free (struct target_desc_info *tdesc_info)
581 {
582 if (tdesc_info != NULL)
583 {
584 xfree (tdesc_info->filename);
585 xfree (tdesc_info);
586 }
587 }
588
589 /* Convenience helper macros. */
590
591 #define target_desc_fetched \
592 get_tdesc_info (current_inferior ())->fetched
593 #define current_target_desc \
594 get_tdesc_info (current_inferior ())->tdesc
595 #define target_description_filename \
596 get_tdesc_info (current_inferior ())->filename
597
598 /* The string manipulated by the "set tdesc filename ..." command. */
599
600 static char *tdesc_filename_cmd_string;
601
602 /* Fetch the current target's description, and switch the current
603 architecture to one which incorporates that description. */
604
605 void
606 target_find_description (void)
607 {
608 /* If we've already fetched a description from the target, don't do
609 it again. This allows a target to fetch the description early,
610 during its to_open or to_create_inferior, if it needs extra
611 information about the target to initialize. */
612 if (target_desc_fetched)
613 return;
614
615 /* The current architecture should not have any target description
616 specified. It should have been cleared, e.g. when we
617 disconnected from the previous target. */
618 gdb_assert (gdbarch_target_desc (target_gdbarch ()) == NULL);
619
620 /* First try to fetch an XML description from the user-specified
621 file. */
622 current_target_desc = NULL;
623 if (target_description_filename != NULL
624 && *target_description_filename != '\0')
625 current_target_desc
626 = file_read_description_xml (target_description_filename);
627
628 /* Next try to read the description from the current target using
629 target objects. */
630 if (current_target_desc == NULL)
631 current_target_desc = target_read_description_xml (&current_target);
632
633 /* If that failed try a target-specific hook. */
634 if (current_target_desc == NULL)
635 current_target_desc = target_read_description (&current_target);
636
637 /* If a non-NULL description was returned, then update the current
638 architecture. */
639 if (current_target_desc)
640 {
641 struct gdbarch_info info;
642
643 gdbarch_info_init (&info);
644 info.target_desc = current_target_desc;
645 if (!gdbarch_update_p (info))
646 warning (_("Architecture rejected target-supplied description"));
647 else
648 {
649 struct tdesc_arch_data *data;
650
651 data = ((struct tdesc_arch_data *)
652 gdbarch_data (target_gdbarch (), tdesc_data));
653 if (tdesc_has_registers (current_target_desc)
654 && data->arch_regs == NULL)
655 warning (_("Target-supplied registers are not supported "
656 "by the current architecture"));
657 }
658 }
659
660 /* Now that we know this description is usable, record that we
661 fetched it. */
662 target_desc_fetched = 1;
663 }
664
665 /* Discard any description fetched from the current target, and switch
666 the current architecture to one with no target description. */
667
668 void
669 target_clear_description (void)
670 {
671 struct gdbarch_info info;
672
673 if (!target_desc_fetched)
674 return;
675
676 target_desc_fetched = 0;
677 current_target_desc = NULL;
678
679 gdbarch_info_init (&info);
680 if (!gdbarch_update_p (info))
681 internal_error (__FILE__, __LINE__,
682 _("Could not remove target-supplied description"));
683 }
684
685 /* Return the global current target description. This should only be
686 used by gdbarch initialization code; most access should be through
687 an existing gdbarch. */
688
689 const struct target_desc *
690 target_current_description (void)
691 {
692 if (target_desc_fetched)
693 return current_target_desc;
694
695 return NULL;
696 }
697
698 /* Return non-zero if this target description is compatible
699 with the given BFD architecture. */
700
701 int
702 tdesc_compatible_p (const struct target_desc *target_desc,
703 const struct bfd_arch_info *arch)
704 {
705 const struct bfd_arch_info *compat;
706 int ix;
707
708 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
709 ix++)
710 {
711 if (compat == arch
712 || arch->compatible (arch, compat)
713 || compat->compatible (compat, arch))
714 return 1;
715 }
716
717 return 0;
718 }
719 \f
720
721 /* Direct accessors for target descriptions. */
722
723 /* Return the string value of a property named KEY, or NULL if the
724 property was not specified. */
725
726 const char *
727 tdesc_property (const struct target_desc *target_desc, const char *key)
728 {
729 struct property *prop;
730 int ix;
731
732 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
733 ix++)
734 if (strcmp (prop->key, key) == 0)
735 return prop->value;
736
737 return NULL;
738 }
739
740 /* Return the BFD architecture associated with this target
741 description, or NULL if no architecture was specified. */
742
743 const struct bfd_arch_info *
744 tdesc_architecture (const struct target_desc *target_desc)
745 {
746 return target_desc->arch;
747 }
748
749 /* Return the OSABI associated with this target description, or
750 GDB_OSABI_UNKNOWN if no osabi was specified. */
751
752 enum gdb_osabi
753 tdesc_osabi (const struct target_desc *target_desc)
754 {
755 return target_desc->osabi;
756 }
757
758 \f
759
760 /* Return 1 if this target description includes any registers. */
761
762 int
763 tdesc_has_registers (const struct target_desc *target_desc)
764 {
765 int ix;
766 struct tdesc_feature *feature;
767
768 if (target_desc == NULL)
769 return 0;
770
771 for (ix = 0;
772 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
773 ix++)
774 if (! VEC_empty (tdesc_reg_p, feature->registers))
775 return 1;
776
777 return 0;
778 }
779
780 /* Return the feature with the given name, if present, or NULL if
781 the named feature is not found. */
782
783 const struct tdesc_feature *
784 tdesc_find_feature (const struct target_desc *target_desc,
785 const char *name)
786 {
787 int ix;
788 struct tdesc_feature *feature;
789
790 for (ix = 0;
791 VEC_iterate (tdesc_feature_p, target_desc->features, ix, feature);
792 ix++)
793 if (strcmp (feature->name, name) == 0)
794 return feature;
795
796 return NULL;
797 }
798
799 /* Return the name of FEATURE. */
800
801 const char *
802 tdesc_feature_name (const struct tdesc_feature *feature)
803 {
804 return feature->name;
805 }
806
807 /* Predefined types. */
808 static struct tdesc_type tdesc_predefined_types[] =
809 {
810 { "bool", TDESC_TYPE_BOOL },
811 { "int8", TDESC_TYPE_INT8 },
812 { "int16", TDESC_TYPE_INT16 },
813 { "int32", TDESC_TYPE_INT32 },
814 { "int64", TDESC_TYPE_INT64 },
815 { "int128", TDESC_TYPE_INT128 },
816 { "uint8", TDESC_TYPE_UINT8 },
817 { "uint16", TDESC_TYPE_UINT16 },
818 { "uint32", TDESC_TYPE_UINT32 },
819 { "uint64", TDESC_TYPE_UINT64 },
820 { "uint128", TDESC_TYPE_UINT128 },
821 { "code_ptr", TDESC_TYPE_CODE_PTR },
822 { "data_ptr", TDESC_TYPE_DATA_PTR },
823 { "ieee_single", TDESC_TYPE_IEEE_SINGLE },
824 { "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
825 { "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT },
826 { "i387_ext", TDESC_TYPE_I387_EXT }
827 };
828
829 /* Lookup a predefined type. */
830
831 static struct tdesc_type *
832 tdesc_predefined_type (enum tdesc_type_kind kind)
833 {
834 int ix;
835 struct tdesc_type *type;
836
837 for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
838 if (tdesc_predefined_types[ix].kind == kind)
839 return &tdesc_predefined_types[ix];
840
841 gdb_assert_not_reached ("bad predefined tdesc type");
842 }
843
844 /* See arch/tdesc.h. */
845
846 struct tdesc_type *
847 tdesc_named_type (const struct tdesc_feature *feature, const char *id)
848 {
849 int ix;
850 struct tdesc_type *type;
851
852 /* First try target-defined types. */
853 for (ix = 0; VEC_iterate (tdesc_type_p, feature->types, ix, type); ix++)
854 if (strcmp (type->name, id) == 0)
855 return type;
856
857 /* Next try the predefined types. */
858 for (ix = 0; ix < ARRAY_SIZE (tdesc_predefined_types); ix++)
859 if (strcmp (tdesc_predefined_types[ix].name, id) == 0)
860 return &tdesc_predefined_types[ix];
861
862 return NULL;
863 }
864
865 /* Lookup type associated with ID. */
866
867 struct type *
868 tdesc_find_type (struct gdbarch *gdbarch, const char *id)
869 {
870 struct tdesc_arch_reg *reg;
871 struct tdesc_arch_data *data;
872 int i, num_regs;
873
874 data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
875 num_regs = VEC_length (tdesc_arch_reg, data->arch_regs);
876 for (i = 0; i < num_regs; i++)
877 {
878 reg = VEC_index (tdesc_arch_reg, data->arch_regs, i);
879 if (reg->reg
880 && reg->reg->tdesc_type
881 && reg->type
882 && strcmp (id, reg->reg->tdesc_type->name) == 0)
883 return reg->type;
884 }
885
886 return NULL;
887 }
888
889 /* Construct, if necessary, and return the GDB type implementing target
890 type TDESC_TYPE for architecture GDBARCH. */
891
892 static struct type *
893 tdesc_gdb_type (struct gdbarch *gdbarch, struct tdesc_type *tdesc_type)
894 {
895 struct type *type;
896
897 switch (tdesc_type->kind)
898 {
899 /* Predefined types. */
900 case TDESC_TYPE_BOOL:
901 return builtin_type (gdbarch)->builtin_bool;
902
903 case TDESC_TYPE_INT8:
904 return builtin_type (gdbarch)->builtin_int8;
905
906 case TDESC_TYPE_INT16:
907 return builtin_type (gdbarch)->builtin_int16;
908
909 case TDESC_TYPE_INT32:
910 return builtin_type (gdbarch)->builtin_int32;
911
912 case TDESC_TYPE_INT64:
913 return builtin_type (gdbarch)->builtin_int64;
914
915 case TDESC_TYPE_INT128:
916 return builtin_type (gdbarch)->builtin_int128;
917
918 case TDESC_TYPE_UINT8:
919 return builtin_type (gdbarch)->builtin_uint8;
920
921 case TDESC_TYPE_UINT16:
922 return builtin_type (gdbarch)->builtin_uint16;
923
924 case TDESC_TYPE_UINT32:
925 return builtin_type (gdbarch)->builtin_uint32;
926
927 case TDESC_TYPE_UINT64:
928 return builtin_type (gdbarch)->builtin_uint64;
929
930 case TDESC_TYPE_UINT128:
931 return builtin_type (gdbarch)->builtin_uint128;
932
933 case TDESC_TYPE_CODE_PTR:
934 return builtin_type (gdbarch)->builtin_func_ptr;
935
936 case TDESC_TYPE_DATA_PTR:
937 return builtin_type (gdbarch)->builtin_data_ptr;
938
939 default:
940 break;
941 }
942
943 type = tdesc_find_type (gdbarch, tdesc_type->name);
944 if (type)
945 return type;
946
947 switch (tdesc_type->kind)
948 {
949 case TDESC_TYPE_IEEE_SINGLE:
950 return arch_float_type (gdbarch, -1, "builtin_type_ieee_single",
951 floatformats_ieee_single);
952
953 case TDESC_TYPE_IEEE_DOUBLE:
954 return arch_float_type (gdbarch, -1, "builtin_type_ieee_double",
955 floatformats_ieee_double);
956
957 case TDESC_TYPE_ARM_FPA_EXT:
958 return arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
959 floatformats_arm_ext);
960
961 case TDESC_TYPE_I387_EXT:
962 return arch_float_type (gdbarch, -1, "builtin_type_i387_ext",
963 floatformats_i387_ext);
964
965 /* Types defined by a target feature. */
966 case TDESC_TYPE_VECTOR:
967 {
968 struct type *type, *field_type;
969
970 field_type = tdesc_gdb_type (gdbarch, tdesc_type->u.v.type);
971 type = init_vector_type (field_type, tdesc_type->u.v.count);
972 TYPE_NAME (type) = xstrdup (tdesc_type->name);
973
974 return type;
975 }
976
977 case TDESC_TYPE_STRUCT:
978 {
979 struct type *type, *field_type;
980 struct tdesc_type_field *f;
981 int ix;
982
983 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
984 TYPE_NAME (type) = xstrdup (tdesc_type->name);
985 TYPE_TAG_NAME (type) = TYPE_NAME (type);
986
987 for (ix = 0;
988 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
989 ix++)
990 {
991 if (f->start != -1 && f->end != -1)
992 {
993 /* Bitfield. */
994 struct field *fld;
995 struct type *field_type;
996 int bitsize, total_size;
997
998 /* This invariant should be preserved while creating types. */
999 gdb_assert (tdesc_type->u.u.size != 0);
1000 if (f->type != NULL)
1001 field_type = tdesc_gdb_type (gdbarch, f->type);
1002 else if (tdesc_type->u.u.size > 4)
1003 field_type = builtin_type (gdbarch)->builtin_uint64;
1004 else
1005 field_type = builtin_type (gdbarch)->builtin_uint32;
1006
1007 fld = append_composite_type_field_raw (type, xstrdup (f->name),
1008 field_type);
1009
1010 /* For little-endian, BITPOS counts from the LSB of
1011 the structure and marks the LSB of the field. For
1012 big-endian, BITPOS counts from the MSB of the
1013 structure and marks the MSB of the field. Either
1014 way, it is the number of bits to the "left" of the
1015 field. To calculate this in big-endian, we need
1016 the total size of the structure. */
1017 bitsize = f->end - f->start + 1;
1018 total_size = tdesc_type->u.u.size * TARGET_CHAR_BIT;
1019 if (gdbarch_bits_big_endian (gdbarch))
1020 SET_FIELD_BITPOS (fld[0], total_size - f->start - bitsize);
1021 else
1022 SET_FIELD_BITPOS (fld[0], f->start);
1023 FIELD_BITSIZE (fld[0]) = bitsize;
1024 }
1025 else
1026 {
1027 gdb_assert (f->start == -1 && f->end == -1);
1028 field_type = tdesc_gdb_type (gdbarch, f->type);
1029 append_composite_type_field (type, xstrdup (f->name),
1030 field_type);
1031 }
1032 }
1033
1034 if (tdesc_type->u.u.size != 0)
1035 TYPE_LENGTH (type) = tdesc_type->u.u.size;
1036 return type;
1037 }
1038
1039 case TDESC_TYPE_UNION:
1040 {
1041 struct type *type, *field_type;
1042 struct tdesc_type_field *f;
1043 int ix;
1044
1045 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
1046 TYPE_NAME (type) = xstrdup (tdesc_type->name);
1047
1048 for (ix = 0;
1049 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1050 ix++)
1051 {
1052 field_type = tdesc_gdb_type (gdbarch, f->type);
1053 append_composite_type_field (type, xstrdup (f->name), field_type);
1054
1055 /* If any of the children of a union are vectors, flag the
1056 union as a vector also. This allows e.g. a union of two
1057 vector types to show up automatically in "info vector". */
1058 if (TYPE_VECTOR (field_type))
1059 TYPE_VECTOR (type) = 1;
1060 }
1061 return type;
1062 }
1063
1064 case TDESC_TYPE_FLAGS:
1065 {
1066 struct tdesc_type_field *f;
1067 int ix;
1068
1069 type = arch_flags_type (gdbarch, tdesc_type->name,
1070 tdesc_type->u.u.size);
1071 for (ix = 0;
1072 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1073 ix++)
1074 {
1075 struct type *field_type;
1076 int bitsize = f->end - f->start + 1;
1077
1078 gdb_assert (f->type != NULL);
1079 field_type = tdesc_gdb_type (gdbarch, f->type);
1080 append_flags_type_field (type, f->start, bitsize,
1081 field_type, f->name);
1082 }
1083
1084 return type;
1085 }
1086
1087 case TDESC_TYPE_ENUM:
1088 {
1089 struct tdesc_type_field *f;
1090 int ix;
1091
1092 type = arch_type (gdbarch, TYPE_CODE_ENUM,
1093 tdesc_type->u.u.size, tdesc_type->name);
1094 TYPE_UNSIGNED (type) = 1;
1095 for (ix = 0;
1096 VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
1097 ix++)
1098 {
1099 struct field *fld
1100 = append_composite_type_field_raw (type, xstrdup (f->name),
1101 NULL);
1102
1103 SET_FIELD_BITPOS (fld[0], f->start);
1104 }
1105
1106 return type;
1107 }
1108 }
1109
1110 internal_error (__FILE__, __LINE__,
1111 "Type \"%s\" has an unknown kind %d",
1112 tdesc_type->name, tdesc_type->kind);
1113 }
1114 \f
1115
1116 /* Support for registers from target descriptions. */
1117
1118 /* Construct the per-gdbarch data. */
1119
1120 static void *
1121 tdesc_data_init (struct obstack *obstack)
1122 {
1123 struct tdesc_arch_data *data;
1124
1125 data = OBSTACK_ZALLOC (obstack, struct tdesc_arch_data);
1126 return data;
1127 }
1128
1129 /* Similar, but for the temporary copy used during architecture
1130 initialization. */
1131
1132 struct tdesc_arch_data *
1133 tdesc_data_alloc (void)
1134 {
1135 return XCNEW (struct tdesc_arch_data);
1136 }
1137
1138 /* Free something allocated by tdesc_data_alloc, if it is not going
1139 to be used (for instance if it was unsuitable for the
1140 architecture). */
1141
1142 void
1143 tdesc_data_cleanup (void *data_untyped)
1144 {
1145 struct tdesc_arch_data *data = (struct tdesc_arch_data *) data_untyped;
1146
1147 VEC_free (tdesc_arch_reg, data->arch_regs);
1148 xfree (data);
1149 }
1150
1151 /* Search FEATURE for a register named NAME. */
1152
1153 static struct tdesc_reg *
1154 tdesc_find_register_early (const struct tdesc_feature *feature,
1155 const char *name)
1156 {
1157 int ixr;
1158 struct tdesc_reg *reg;
1159
1160 for (ixr = 0;
1161 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1162 ixr++)
1163 if (strcasecmp (reg->name, name) == 0)
1164 return reg;
1165
1166 return NULL;
1167 }
1168
1169 /* Search FEATURE for a register named NAME. Assign REGNO to it. */
1170
1171 int
1172 tdesc_numbered_register (const struct tdesc_feature *feature,
1173 struct tdesc_arch_data *data,
1174 int regno, const char *name)
1175 {
1176 struct tdesc_arch_reg arch_reg = { 0 };
1177 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1178
1179 if (reg == NULL)
1180 return 0;
1181
1182 /* Make sure the vector includes a REGNO'th element. */
1183 while (regno >= VEC_length (tdesc_arch_reg, data->arch_regs))
1184 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &arch_reg);
1185
1186 arch_reg.reg = reg;
1187 VEC_replace (tdesc_arch_reg, data->arch_regs, regno, &arch_reg);
1188 return 1;
1189 }
1190
1191 /* Search FEATURE for a register named NAME, but do not assign a fixed
1192 register number to it. */
1193
1194 int
1195 tdesc_unnumbered_register (const struct tdesc_feature *feature,
1196 const char *name)
1197 {
1198 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1199
1200 if (reg == NULL)
1201 return 0;
1202
1203 return 1;
1204 }
1205
1206 /* Search FEATURE for a register whose name is in NAMES and assign
1207 REGNO to it. */
1208
1209 int
1210 tdesc_numbered_register_choices (const struct tdesc_feature *feature,
1211 struct tdesc_arch_data *data,
1212 int regno, const char *const names[])
1213 {
1214 int i;
1215
1216 for (i = 0; names[i] != NULL; i++)
1217 if (tdesc_numbered_register (feature, data, regno, names[i]))
1218 return 1;
1219
1220 return 0;
1221 }
1222
1223 /* Search FEATURE for a register named NAME, and return its size in
1224 bits. The register must exist. */
1225
1226 int
1227 tdesc_register_size (const struct tdesc_feature *feature,
1228 const char *name)
1229 {
1230 struct tdesc_reg *reg = tdesc_find_register_early (feature, name);
1231
1232 gdb_assert (reg != NULL);
1233 return reg->bitsize;
1234 }
1235
1236 /* Look up a register by its GDB internal register number. */
1237
1238 static struct tdesc_arch_reg *
1239 tdesc_find_arch_register (struct gdbarch *gdbarch, int regno)
1240 {
1241 struct tdesc_arch_data *data;
1242
1243 data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1244 if (regno < VEC_length (tdesc_arch_reg, data->arch_regs))
1245 return VEC_index (tdesc_arch_reg, data->arch_regs, regno);
1246 else
1247 return NULL;
1248 }
1249
1250 static struct tdesc_reg *
1251 tdesc_find_register (struct gdbarch *gdbarch, int regno)
1252 {
1253 struct tdesc_arch_reg *reg = tdesc_find_arch_register (gdbarch, regno);
1254
1255 return reg? reg->reg : NULL;
1256 }
1257
1258 /* Return the name of register REGNO, from the target description or
1259 from an architecture-provided pseudo_register_name method. */
1260
1261 const char *
1262 tdesc_register_name (struct gdbarch *gdbarch, int regno)
1263 {
1264 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1265 int num_regs = gdbarch_num_regs (gdbarch);
1266 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1267
1268 if (reg != NULL)
1269 return reg->name;
1270
1271 if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
1272 {
1273 struct tdesc_arch_data *data
1274 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1275
1276 gdb_assert (data->pseudo_register_name != NULL);
1277 return data->pseudo_register_name (gdbarch, regno);
1278 }
1279
1280 return "";
1281 }
1282
1283 struct type *
1284 tdesc_register_type (struct gdbarch *gdbarch, int regno)
1285 {
1286 struct tdesc_arch_reg *arch_reg = tdesc_find_arch_register (gdbarch, regno);
1287 struct tdesc_reg *reg = arch_reg? arch_reg->reg : NULL;
1288 int num_regs = gdbarch_num_regs (gdbarch);
1289 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1290
1291 if (reg == NULL && regno >= num_regs && regno < num_regs + num_pseudo_regs)
1292 {
1293 struct tdesc_arch_data *data
1294 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1295
1296 gdb_assert (data->pseudo_register_type != NULL);
1297 return data->pseudo_register_type (gdbarch, regno);
1298 }
1299
1300 if (reg == NULL)
1301 /* Return "int0_t", since "void" has a misleading size of one. */
1302 return builtin_type (gdbarch)->builtin_int0;
1303
1304 if (arch_reg->type == NULL)
1305 {
1306 /* First check for a predefined or target defined type. */
1307 if (reg->tdesc_type)
1308 arch_reg->type = tdesc_gdb_type (gdbarch, reg->tdesc_type);
1309
1310 /* Next try size-sensitive type shortcuts. */
1311 else if (strcmp (reg->type, "float") == 0)
1312 {
1313 if (reg->bitsize == gdbarch_float_bit (gdbarch))
1314 arch_reg->type = builtin_type (gdbarch)->builtin_float;
1315 else if (reg->bitsize == gdbarch_double_bit (gdbarch))
1316 arch_reg->type = builtin_type (gdbarch)->builtin_double;
1317 else if (reg->bitsize == gdbarch_long_double_bit (gdbarch))
1318 arch_reg->type = builtin_type (gdbarch)->builtin_long_double;
1319 else
1320 {
1321 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
1322 reg->name, reg->bitsize);
1323 arch_reg->type = builtin_type (gdbarch)->builtin_double;
1324 }
1325 }
1326 else if (strcmp (reg->type, "int") == 0)
1327 {
1328 if (reg->bitsize == gdbarch_long_bit (gdbarch))
1329 arch_reg->type = builtin_type (gdbarch)->builtin_long;
1330 else if (reg->bitsize == TARGET_CHAR_BIT)
1331 arch_reg->type = builtin_type (gdbarch)->builtin_char;
1332 else if (reg->bitsize == gdbarch_short_bit (gdbarch))
1333 arch_reg->type = builtin_type (gdbarch)->builtin_short;
1334 else if (reg->bitsize == gdbarch_int_bit (gdbarch))
1335 arch_reg->type = builtin_type (gdbarch)->builtin_int;
1336 else if (reg->bitsize == gdbarch_long_long_bit (gdbarch))
1337 arch_reg->type = builtin_type (gdbarch)->builtin_long_long;
1338 else if (reg->bitsize == gdbarch_ptr_bit (gdbarch))
1339 /* A bit desperate by this point... */
1340 arch_reg->type = builtin_type (gdbarch)->builtin_data_ptr;
1341 else
1342 {
1343 warning (_("Register \"%s\" has an unsupported size (%d bits)"),
1344 reg->name, reg->bitsize);
1345 arch_reg->type = builtin_type (gdbarch)->builtin_long;
1346 }
1347 }
1348
1349 if (arch_reg->type == NULL)
1350 internal_error (__FILE__, __LINE__,
1351 "Register \"%s\" has an unknown type \"%s\"",
1352 reg->name, reg->type);
1353 }
1354
1355 return arch_reg->type;
1356 }
1357
1358 static int
1359 tdesc_remote_register_number (struct gdbarch *gdbarch, int regno)
1360 {
1361 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1362
1363 if (reg != NULL)
1364 return reg->target_regnum;
1365 else
1366 return -1;
1367 }
1368
1369 /* Check whether REGNUM is a member of REGGROUP. Registers from the
1370 target description may be classified as general, float, or vector.
1371 Unlike a gdbarch register_reggroup_p method, this function will
1372 return -1 if it does not know; the caller should handle registers
1373 with no specified group.
1374
1375 Arbitrary strings (other than "general", "float", and "vector")
1376 from the description are not used; they cause the register to be
1377 displayed in "info all-registers" but excluded from "info
1378 registers" et al. The names of containing features are also not
1379 used. This might be extended to display registers in some more
1380 useful groupings.
1381
1382 The save-restore flag is also implemented here. */
1383
1384 int
1385 tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
1386 struct reggroup *reggroup)
1387 {
1388 struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno);
1389
1390 if (reg != NULL && reg->group != NULL)
1391 {
1392 int general_p = 0, float_p = 0, vector_p = 0;
1393
1394 if (strcmp (reg->group, "general") == 0)
1395 general_p = 1;
1396 else if (strcmp (reg->group, "float") == 0)
1397 float_p = 1;
1398 else if (strcmp (reg->group, "vector") == 0)
1399 vector_p = 1;
1400
1401 if (reggroup == float_reggroup)
1402 return float_p;
1403
1404 if (reggroup == vector_reggroup)
1405 return vector_p;
1406
1407 if (reggroup == general_reggroup)
1408 return general_p;
1409 }
1410
1411 if (reg != NULL
1412 && (reggroup == save_reggroup || reggroup == restore_reggroup))
1413 return reg->save_restore;
1414
1415 return -1;
1416 }
1417
1418 /* Check whether REGNUM is a member of REGGROUP. Registers with no
1419 group specified go to the default reggroup function and are handled
1420 by type. */
1421
1422 static int
1423 tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regno,
1424 struct reggroup *reggroup)
1425 {
1426 int num_regs = gdbarch_num_regs (gdbarch);
1427 int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch);
1428 int ret;
1429
1430 if (regno >= num_regs && regno < num_regs + num_pseudo_regs)
1431 {
1432 struct tdesc_arch_data *data
1433 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1434
1435 if (data->pseudo_register_reggroup_p != NULL)
1436 return data->pseudo_register_reggroup_p (gdbarch, regno, reggroup);
1437 /* Otherwise fall through to the default reggroup_p. */
1438 }
1439
1440 ret = tdesc_register_in_reggroup_p (gdbarch, regno, reggroup);
1441 if (ret != -1)
1442 return ret;
1443
1444 return default_register_reggroup_p (gdbarch, regno, reggroup);
1445 }
1446
1447 /* Record architecture-specific functions to call for pseudo-register
1448 support. */
1449
1450 void
1451 set_tdesc_pseudo_register_name (struct gdbarch *gdbarch,
1452 gdbarch_register_name_ftype *pseudo_name)
1453 {
1454 struct tdesc_arch_data *data
1455 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1456
1457 data->pseudo_register_name = pseudo_name;
1458 }
1459
1460 void
1461 set_tdesc_pseudo_register_type (struct gdbarch *gdbarch,
1462 gdbarch_register_type_ftype *pseudo_type)
1463 {
1464 struct tdesc_arch_data *data
1465 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1466
1467 data->pseudo_register_type = pseudo_type;
1468 }
1469
1470 void
1471 set_tdesc_pseudo_register_reggroup_p
1472 (struct gdbarch *gdbarch,
1473 gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
1474 {
1475 struct tdesc_arch_data *data
1476 = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1477
1478 data->pseudo_register_reggroup_p = pseudo_reggroup_p;
1479 }
1480
1481 /* Update GDBARCH to use the target description for registers. */
1482
1483 void
1484 tdesc_use_registers (struct gdbarch *gdbarch,
1485 const struct target_desc *target_desc,
1486 struct tdesc_arch_data *early_data)
1487 {
1488 int num_regs = gdbarch_num_regs (gdbarch);
1489 int ixf, ixr;
1490 struct tdesc_feature *feature;
1491 struct tdesc_reg *reg;
1492 struct tdesc_arch_data *data;
1493 struct tdesc_arch_reg *arch_reg, new_arch_reg = { 0 };
1494 htab_t reg_hash;
1495
1496 /* We can't use the description for registers if it doesn't describe
1497 any. This function should only be called after validating
1498 registers, so the caller should know that registers are
1499 included. */
1500 gdb_assert (tdesc_has_registers (target_desc));
1501
1502 data = (struct tdesc_arch_data *) gdbarch_data (gdbarch, tdesc_data);
1503 data->arch_regs = early_data->arch_regs;
1504 xfree (early_data);
1505
1506 /* Build up a set of all registers, so that we can assign register
1507 numbers where needed. The hash table expands as necessary, so
1508 the initial size is arbitrary. */
1509 reg_hash = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
1510 for (ixf = 0;
1511 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
1512 ixf++)
1513 for (ixr = 0;
1514 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1515 ixr++)
1516 {
1517 void **slot = htab_find_slot (reg_hash, reg, INSERT);
1518
1519 *slot = reg;
1520 }
1521
1522 /* Remove any registers which were assigned numbers by the
1523 architecture. */
1524 for (ixr = 0;
1525 VEC_iterate (tdesc_arch_reg, data->arch_regs, ixr, arch_reg);
1526 ixr++)
1527 if (arch_reg->reg)
1528 htab_remove_elt (reg_hash, arch_reg->reg);
1529
1530 /* Assign numbers to the remaining registers and add them to the
1531 list of registers. The new numbers are always above gdbarch_num_regs.
1532 Iterate over the features, not the hash table, so that the order
1533 matches that in the target description. */
1534
1535 gdb_assert (VEC_length (tdesc_arch_reg, data->arch_regs) <= num_regs);
1536 while (VEC_length (tdesc_arch_reg, data->arch_regs) < num_regs)
1537 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
1538 for (ixf = 0;
1539 VEC_iterate (tdesc_feature_p, target_desc->features, ixf, feature);
1540 ixf++)
1541 for (ixr = 0;
1542 VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg);
1543 ixr++)
1544 if (htab_find (reg_hash, reg) != NULL)
1545 {
1546 new_arch_reg.reg = reg;
1547 VEC_safe_push (tdesc_arch_reg, data->arch_regs, &new_arch_reg);
1548 num_regs++;
1549 }
1550
1551 htab_delete (reg_hash);
1552
1553 /* Update the architecture. */
1554 set_gdbarch_num_regs (gdbarch, num_regs);
1555 set_gdbarch_register_name (gdbarch, tdesc_register_name);
1556 set_gdbarch_register_type (gdbarch, tdesc_register_type);
1557 set_gdbarch_remote_register_number (gdbarch,
1558 tdesc_remote_register_number);
1559 set_gdbarch_register_reggroup_p (gdbarch, tdesc_register_reggroup_p);
1560 }
1561 \f
1562
1563 /* See arch/tdesc.h. */
1564
1565 void
1566 tdesc_create_reg (struct tdesc_feature *feature, const char *name,
1567 int regnum, int save_restore, const char *group,
1568 int bitsize, const char *type)
1569 {
1570 tdesc_reg *reg = new tdesc_reg (feature, name, regnum, save_restore,
1571 group, bitsize, type);
1572
1573 VEC_safe_push (tdesc_reg_p, feature->registers, reg);
1574 }
1575
1576 /* See arch/tdesc.h. */
1577
1578 struct tdesc_type *
1579 tdesc_create_vector (struct tdesc_feature *feature, const char *name,
1580 struct tdesc_type *field_type, int count)
1581 {
1582 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_VECTOR);
1583
1584 type->u.v.type = field_type;
1585 type->u.v.count = count;
1586
1587 VEC_safe_push (tdesc_type_p, feature->types, type);
1588 return type;
1589 }
1590
1591 /* See arch/tdesc.h. */
1592
1593 struct tdesc_type *
1594 tdesc_create_struct (struct tdesc_feature *feature, const char *name)
1595 {
1596 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_STRUCT);
1597
1598 VEC_safe_push (tdesc_type_p, feature->types, type);
1599 return type;
1600 }
1601
1602 /* See arch/tdesc.h. */
1603
1604 void
1605 tdesc_set_struct_size (struct tdesc_type *type, int size)
1606 {
1607 gdb_assert (type->kind == TDESC_TYPE_STRUCT);
1608 gdb_assert (size > 0);
1609 type->u.u.size = size;
1610 }
1611
1612 /* See arch/tdesc.h. */
1613
1614 struct tdesc_type *
1615 tdesc_create_union (struct tdesc_feature *feature, const char *name)
1616 {
1617 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_UNION);
1618
1619 VEC_safe_push (tdesc_type_p, feature->types, type);
1620 return type;
1621 }
1622
1623 /* See arch/tdesc.h. */
1624
1625 struct tdesc_type *
1626 tdesc_create_flags (struct tdesc_feature *feature, const char *name,
1627 int size)
1628 {
1629 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_FLAGS);
1630
1631 gdb_assert (size > 0);
1632
1633 type->u.u.size = size;
1634
1635 VEC_safe_push (tdesc_type_p, feature->types, type);
1636 return type;
1637 }
1638
1639 struct tdesc_type *
1640 tdesc_create_enum (struct tdesc_feature *feature, const char *name,
1641 int size)
1642 {
1643 struct tdesc_type *type = new tdesc_type (name, TDESC_TYPE_ENUM);
1644
1645 gdb_assert (size > 0);
1646
1647 type->u.u.size = size;
1648
1649 VEC_safe_push (tdesc_type_p, feature->types, type);
1650 return type;
1651 }
1652
1653 /* See arch/tdesc.h. */
1654
1655 void
1656 tdesc_add_field (struct tdesc_type *type, const char *field_name,
1657 struct tdesc_type *field_type)
1658 {
1659 struct tdesc_type_field f = { 0 };
1660
1661 gdb_assert (type->kind == TDESC_TYPE_UNION
1662 || type->kind == TDESC_TYPE_STRUCT);
1663
1664 f.name = xstrdup (field_name);
1665 f.type = field_type;
1666 /* Initialize these values so we know this is not a bit-field
1667 when we print-c-tdesc. */
1668 f.start = -1;
1669 f.end = -1;
1670
1671 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1672 }
1673
1674 void
1675 tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name,
1676 int start, int end, struct tdesc_type *field_type)
1677 {
1678 struct tdesc_type_field f = { 0 };
1679
1680 gdb_assert (type->kind == TDESC_TYPE_STRUCT
1681 || type->kind == TDESC_TYPE_FLAGS);
1682 gdb_assert (start >= 0 && end >= start);
1683
1684 f.name = xstrdup (field_name);
1685 f.start = start;
1686 f.end = end;
1687 f.type = field_type;
1688
1689 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1690 }
1691
1692 /* See arch/tdesc.h. */
1693
1694 void
1695 tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
1696 int start, int end)
1697 {
1698 struct tdesc_type *field_type;
1699
1700 gdb_assert (start >= 0 && end >= start);
1701
1702 if (type->u.u.size > 4)
1703 field_type = tdesc_predefined_type (TDESC_TYPE_UINT64);
1704 else
1705 field_type = tdesc_predefined_type (TDESC_TYPE_UINT32);
1706
1707 tdesc_add_typed_bitfield (type, field_name, start, end, field_type);
1708 }
1709
1710 /* See arch/tdesc.h. */
1711
1712 void
1713 tdesc_add_flag (struct tdesc_type *type, int start,
1714 const char *flag_name)
1715 {
1716 struct tdesc_type_field f = { 0 };
1717
1718 gdb_assert (type->kind == TDESC_TYPE_FLAGS
1719 || type->kind == TDESC_TYPE_STRUCT);
1720
1721 f.name = xstrdup (flag_name);
1722 f.start = start;
1723 f.end = start;
1724 f.type = tdesc_predefined_type (TDESC_TYPE_BOOL);
1725
1726 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1727 }
1728
1729 void
1730 tdesc_add_enum_value (struct tdesc_type *type, int value,
1731 const char *name)
1732 {
1733 struct tdesc_type_field f = { 0 };
1734
1735 gdb_assert (type->kind == TDESC_TYPE_ENUM);
1736
1737 f.name = xstrdup (name);
1738 f.start = value;
1739 f.end = -1;
1740 f.type = tdesc_predefined_type (TDESC_TYPE_INT32);
1741
1742 VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
1743 }
1744
1745 /* See arch/tdesc.h. */
1746
1747 struct tdesc_feature *
1748 tdesc_create_feature (struct target_desc *tdesc, const char *name,
1749 const char *xml)
1750 {
1751 struct tdesc_feature *new_feature = new tdesc_feature (name);
1752
1753 VEC_safe_push (tdesc_feature_p, tdesc->features, new_feature);
1754 return new_feature;
1755 }
1756
1757 struct target_desc *
1758 allocate_target_description (void)
1759 {
1760 return new target_desc ();
1761 }
1762
1763 static void
1764 free_target_description (void *arg)
1765 {
1766 struct target_desc *target_desc = (struct target_desc *) arg;
1767
1768 delete target_desc;
1769 }
1770
1771 struct cleanup *
1772 make_cleanup_free_target_description (struct target_desc *target_desc)
1773 {
1774 return make_cleanup (free_target_description, target_desc);
1775 }
1776
1777 void
1778 tdesc_add_compatible (struct target_desc *target_desc,
1779 const struct bfd_arch_info *compatible)
1780 {
1781 const struct bfd_arch_info *compat;
1782 int ix;
1783
1784 /* If this instance of GDB is compiled without BFD support for the
1785 compatible architecture, simply ignore it -- we would not be able
1786 to handle it anyway. */
1787 if (compatible == NULL)
1788 return;
1789
1790 for (ix = 0; VEC_iterate (arch_p, target_desc->compatible, ix, compat);
1791 ix++)
1792 if (compat == compatible)
1793 internal_error (__FILE__, __LINE__,
1794 _("Attempted to add duplicate "
1795 "compatible architecture \"%s\""),
1796 compatible->printable_name);
1797
1798 VEC_safe_push (arch_p, target_desc->compatible, compatible);
1799 }
1800
1801 void
1802 set_tdesc_property (struct target_desc *target_desc,
1803 const char *key, const char *value)
1804 {
1805 struct property *prop, new_prop;
1806 int ix;
1807
1808 gdb_assert (key != NULL && value != NULL);
1809
1810 for (ix = 0; VEC_iterate (property_s, target_desc->properties, ix, prop);
1811 ix++)
1812 if (strcmp (prop->key, key) == 0)
1813 internal_error (__FILE__, __LINE__,
1814 _("Attempted to add duplicate property \"%s\""), key);
1815
1816 new_prop.key = xstrdup (key);
1817 new_prop.value = xstrdup (value);
1818 VEC_safe_push (property_s, target_desc->properties, &new_prop);
1819 }
1820
1821 /* See arch/tdesc.h. */
1822
1823 void
1824 set_tdesc_architecture (struct target_desc *target_desc,
1825 const char *name)
1826 {
1827 set_tdesc_architecture (target_desc, bfd_scan_arch (name));
1828 }
1829
1830 void
1831 set_tdesc_architecture (struct target_desc *target_desc,
1832 const struct bfd_arch_info *arch)
1833 {
1834 target_desc->arch = arch;
1835 }
1836
1837 /* See arch/tdesc.h. */
1838
1839 void
1840 set_tdesc_osabi (struct target_desc *target_desc, const char *name)
1841 {
1842 set_tdesc_osabi (target_desc, osabi_from_tdesc_string (name));
1843 }
1844
1845 void
1846 set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
1847 {
1848 target_desc->osabi = osabi;
1849 }
1850 \f
1851
1852 static struct cmd_list_element *tdesc_set_cmdlist, *tdesc_show_cmdlist;
1853 static struct cmd_list_element *tdesc_unset_cmdlist;
1854
1855 /* Helper functions for the CLI commands. */
1856
1857 static void
1858 set_tdesc_cmd (char *args, int from_tty)
1859 {
1860 help_list (tdesc_set_cmdlist, "set tdesc ", all_commands, gdb_stdout);
1861 }
1862
1863 static void
1864 show_tdesc_cmd (char *args, int from_tty)
1865 {
1866 cmd_show_list (tdesc_show_cmdlist, from_tty, "");
1867 }
1868
1869 static void
1870 unset_tdesc_cmd (char *args, int from_tty)
1871 {
1872 help_list (tdesc_unset_cmdlist, "unset tdesc ", all_commands, gdb_stdout);
1873 }
1874
1875 static void
1876 set_tdesc_filename_cmd (char *args, int from_tty,
1877 struct cmd_list_element *c)
1878 {
1879 xfree (target_description_filename);
1880 target_description_filename = xstrdup (tdesc_filename_cmd_string);
1881
1882 target_clear_description ();
1883 target_find_description ();
1884 }
1885
1886 static void
1887 show_tdesc_filename_cmd (struct ui_file *file, int from_tty,
1888 struct cmd_list_element *c,
1889 const char *value)
1890 {
1891 value = target_description_filename;
1892
1893 if (value != NULL && *value != '\0')
1894 printf_filtered (_("The target description will be read from \"%s\".\n"),
1895 value);
1896 else
1897 printf_filtered (_("The target description will be "
1898 "read from the target.\n"));
1899 }
1900
1901 static void
1902 unset_tdesc_filename_cmd (const char *args, int from_tty)
1903 {
1904 xfree (target_description_filename);
1905 target_description_filename = NULL;
1906 target_clear_description ();
1907 target_find_description ();
1908 }
1909
1910 /* Print target description in C. */
1911
1912 class print_c_tdesc : public tdesc_element_visitor
1913 {
1914 public:
1915 print_c_tdesc (std::string &filename_after_features)
1916 : m_filename_after_features (filename_after_features)
1917 {
1918 const char *inp;
1919 char *outp;
1920 const char *filename = lbasename (m_filename_after_features.c_str ());
1921
1922 m_function = (char *) xmalloc (strlen (filename) + 1);
1923 for (inp = filename, outp = m_function; *inp != '\0'; inp++)
1924 if (*inp == '.')
1925 break;
1926 else if (*inp == '-')
1927 *outp++ = '_';
1928 else
1929 *outp++ = *inp;
1930 *outp = '\0';
1931
1932 /* Standard boilerplate. */
1933 printf_unfiltered ("/* THIS FILE IS GENERATED. "
1934 "-*- buffer-read-only: t -*- vi"
1935 ":set ro:\n");
1936 }
1937
1938 ~print_c_tdesc ()
1939 {
1940 xfree (m_function);
1941 }
1942
1943 void visit_pre (const target_desc *e) override
1944 {
1945 printf_unfiltered (" Original: %s */\n\n",
1946 lbasename (m_filename_after_features.c_str ()));
1947
1948 printf_unfiltered ("#include \"defs.h\"\n");
1949 printf_unfiltered ("#include \"osabi.h\"\n");
1950 printf_unfiltered ("#include \"target-descriptions.h\"\n");
1951 printf_unfiltered ("\n");
1952
1953 printf_unfiltered ("struct target_desc *tdesc_%s;\n", m_function);
1954 printf_unfiltered ("static void\n");
1955 printf_unfiltered ("initialize_tdesc_%s (void)\n", m_function);
1956 printf_unfiltered ("{\n");
1957 printf_unfiltered
1958 (" struct target_desc *result = allocate_target_description ();\n");
1959
1960 if (tdesc_architecture (e) != NULL)
1961 {
1962 printf_unfiltered
1963 (" set_tdesc_architecture (result, bfd_scan_arch (\"%s\"));\n",
1964 tdesc_architecture (e)->printable_name);
1965 printf_unfiltered ("\n");
1966 }
1967 if (tdesc_osabi (e) > GDB_OSABI_UNKNOWN
1968 && tdesc_osabi (e) < GDB_OSABI_INVALID)
1969 {
1970 printf_unfiltered
1971 (" set_tdesc_osabi (result, osabi_from_tdesc_string (\"%s\"));\n",
1972 gdbarch_osabi_name (tdesc_osabi (e)));
1973 printf_unfiltered ("\n");
1974 }
1975
1976 int ix;
1977 const struct bfd_arch_info *compatible;
1978 struct property *prop;
1979
1980 for (ix = 0; VEC_iterate (arch_p, e->compatible, ix, compatible);
1981 ix++)
1982 {
1983 printf_unfiltered
1984 (" tdesc_add_compatible (result, bfd_scan_arch (\"%s\"));\n",
1985 compatible->printable_name);
1986 }
1987
1988 if (ix)
1989 printf_unfiltered ("\n");
1990
1991 for (ix = 0; VEC_iterate (property_s, e->properties, ix, prop);
1992 ix++)
1993 {
1994 printf_unfiltered (" set_tdesc_property (result, \"%s\", \"%s\");\n",
1995 prop->key, prop->value);
1996 }
1997 printf_unfiltered (" struct tdesc_feature *feature;\n");
1998 }
1999
2000 void visit_pre (const tdesc_feature *e) override
2001 {
2002 printf_unfiltered ("\n feature = tdesc_create_feature (result, \"%s\");\n",
2003 e->name);
2004 }
2005
2006 void visit_post (const tdesc_feature *e) override
2007 {}
2008
2009 void visit_post (const target_desc *e) override
2010 {
2011 printf_unfiltered ("\n tdesc_%s = result;\n", m_function);
2012 printf_unfiltered ("}\n");
2013 }
2014
2015 void visit (const tdesc_type *type) override
2016 {
2017 struct tdesc_type_field *f;
2018
2019 /* Now we do some "filtering" in order to know which variables to
2020 declare. This is needed because otherwise we would declare unused
2021 variables `field_type' and `type'. */
2022 if (!m_printed_field_type)
2023 {
2024 printf_unfiltered (" struct tdesc_type *field_type;\n");
2025 m_printed_field_type = true;
2026 }
2027
2028 if ((type->kind == TDESC_TYPE_UNION
2029 || type->kind == TDESC_TYPE_STRUCT
2030 || type->kind == TDESC_TYPE_FLAGS
2031 || type->kind == TDESC_TYPE_ENUM)
2032 && VEC_length (tdesc_type_field, type->u.u.fields) > 0
2033 && !m_printed_type)
2034 {
2035 printf_unfiltered (" struct tdesc_type *type;\n");
2036 m_printed_type = true;
2037 }
2038
2039 switch (type->kind)
2040 {
2041 case TDESC_TYPE_VECTOR:
2042 printf_unfiltered
2043 (" field_type = tdesc_named_type (feature, \"%s\");\n",
2044 type->u.v.type->name);
2045 printf_unfiltered
2046 (" tdesc_create_vector (feature, \"%s\", field_type, %d);\n",
2047 type->name, type->u.v.count);
2048 break;
2049 case TDESC_TYPE_STRUCT:
2050 case TDESC_TYPE_FLAGS:
2051 if (type->kind == TDESC_TYPE_STRUCT)
2052 {
2053 printf_unfiltered
2054 (" type = tdesc_create_struct (feature, \"%s\");\n",
2055 type->name);
2056 if (type->u.u.size != 0)
2057 printf_unfiltered
2058 (" tdesc_set_struct_size (type, %d);\n",
2059 type->u.u.size);
2060 }
2061 else
2062 {
2063 printf_unfiltered
2064 (" type = tdesc_create_flags (feature, \"%s\", %d);\n",
2065 type->name, type->u.u.size);
2066 }
2067 for (int ix3 = 0;
2068 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2069 ix3++)
2070 {
2071 const char *type_name;
2072
2073 gdb_assert (f->type != NULL);
2074 type_name = f->type->name;
2075
2076 /* To minimize changes to generated files, don't emit type
2077 info for fields that have defaulted types. */
2078 if (f->start != -1)
2079 {
2080 gdb_assert (f->end != -1);
2081 if (f->type->kind == TDESC_TYPE_BOOL)
2082 {
2083 gdb_assert (f->start == f->end);
2084 printf_unfiltered
2085 (" tdesc_add_flag (type, %d, \"%s\");\n",
2086 f->start, f->name);
2087 }
2088 else if ((type->u.u.size == 4
2089 && f->type->kind == TDESC_TYPE_UINT32)
2090 || (type->u.u.size == 8
2091 && f->type->kind == TDESC_TYPE_UINT64))
2092 {
2093 printf_unfiltered
2094 (" tdesc_add_bitfield (type, \"%s\", %d, %d);\n",
2095 f->name, f->start, f->end);
2096 }
2097 else
2098 {
2099 printf_unfiltered
2100 (" field_type = tdesc_named_type (feature,"
2101 " \"%s\");\n",
2102 type_name);
2103 printf_unfiltered
2104 (" tdesc_add_typed_bitfield (type, \"%s\","
2105 " %d, %d, field_type);\n",
2106 f->name, f->start, f->end);
2107 }
2108 }
2109 else /* Not a bitfield. */
2110 {
2111 gdb_assert (f->end == -1);
2112 gdb_assert (type->kind == TDESC_TYPE_STRUCT);
2113 printf_unfiltered
2114 (" field_type = tdesc_named_type (feature,"
2115 " \"%s\");\n",
2116 type_name);
2117 printf_unfiltered
2118 (" tdesc_add_field (type, \"%s\", field_type);\n",
2119 f->name);
2120 }
2121 }
2122 break;
2123 case TDESC_TYPE_UNION:
2124 printf_unfiltered
2125 (" type = tdesc_create_union (feature, \"%s\");\n",
2126 type->name);
2127 for (int ix3 = 0;
2128 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2129 ix3++)
2130 {
2131 printf_unfiltered
2132 (" field_type = tdesc_named_type (feature, \"%s\");\n",
2133 f->type->name);
2134 printf_unfiltered
2135 (" tdesc_add_field (type, \"%s\", field_type);\n",
2136 f->name);
2137 }
2138 break;
2139 case TDESC_TYPE_ENUM:
2140 printf_unfiltered
2141 (" type = tdesc_create_enum (feature, \"%s\", %d);\n",
2142 type->name, type->u.u.size);
2143 for (int ix3 = 0;
2144 VEC_iterate (tdesc_type_field, type->u.u.fields, ix3, f);
2145 ix3++)
2146 printf_unfiltered
2147 (" tdesc_add_enum_value (type, %d, \"%s\");\n",
2148 f->start, f->name);
2149 break;
2150 default:
2151 error (_("C output is not supported type \"%s\"."), type->name);
2152 }
2153 printf_unfiltered ("\n");
2154 }
2155
2156 void visit (const tdesc_reg *reg) override
2157 {
2158 printf_unfiltered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ",
2159 reg->name, reg->target_regnum, reg->save_restore);
2160 if (reg->group)
2161 printf_unfiltered ("\"%s\", ", reg->group);
2162 else
2163 printf_unfiltered ("NULL, ");
2164 printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type);
2165 }
2166
2167 protected:
2168 std::string m_filename_after_features;
2169
2170 private:
2171 char *m_function;
2172 bool m_printed_field_type = false;
2173 bool m_printed_type = false;
2174 };
2175
2176 /* Print target description feature in C. */
2177
2178 class print_c_feature : public print_c_tdesc
2179 {
2180 public:
2181 print_c_feature (std::string &file)
2182 : print_c_tdesc (file)
2183 {
2184 /* Trim ".tmp". */
2185 auto const pos = m_filename_after_features.find_last_of ('.');
2186
2187 m_filename_after_features = m_filename_after_features.substr (0, pos);
2188 }
2189
2190 void visit_pre (const target_desc *e) override
2191 {
2192 printf_unfiltered (" Original: %s */\n\n",
2193 lbasename (m_filename_after_features.c_str ()));
2194
2195 printf_unfiltered ("#include \"arch/tdesc.h\"\n");
2196 printf_unfiltered ("\n");
2197 }
2198
2199 void visit_post (const target_desc *e) override
2200 {}
2201
2202 void visit_pre (const tdesc_feature *e) override
2203 {
2204 std::string name (m_filename_after_features);
2205
2206 auto pos = name.find_first_of ('.');
2207
2208 name = name.substr (0, pos);
2209 std::replace (name.begin (), name.end (), '/', '_');
2210 std::replace (name.begin (), name.end (), '-', '_');
2211
2212 printf_unfiltered ("static int\n");
2213 printf_unfiltered ("create_feature_%s ", name.c_str ());
2214 printf_unfiltered ("(struct target_desc *result, long regnum)\n");
2215
2216 printf_unfiltered ("{\n");
2217 printf_unfiltered (" struct tdesc_feature *feature;\n");
2218
2219 printf_unfiltered
2220 ("\n feature = tdesc_create_feature (result, \"%s\", \"%s\");\n",
2221 e->name, lbasename (m_filename_after_features.c_str ()));
2222 }
2223
2224 void visit_post (const tdesc_feature *e) override
2225 {
2226 printf_unfiltered (" return regnum;\n");
2227 printf_unfiltered ("}\n");
2228 }
2229
2230 void visit (const tdesc_reg *reg) override
2231 {
2232 /* Most "reg" in XML target descriptions don't have "regnum"
2233 attribute, so the register number is allocated sequentially.
2234 In case that reg has "regnum" attribute, register number
2235 should be set by that explicitly. */
2236
2237 if (reg->target_regnum < m_next_regnum)
2238 {
2239 /* The integrity check, it can catch some errors on register
2240 number collision, like this,
2241
2242 <reg name="x0" bitsize="32"/>
2243 <reg name="x1" bitsize="32"/>
2244 <reg name="x2" bitsize="32"/>
2245 <reg name="x3" bitsize="32"/>
2246 <reg name="ps" bitsize="32" regnum="3"/>
2247
2248 but it also has false negatives. The target description
2249 below is correct,
2250
2251 <reg name="x1" bitsize="32" regnum="1"/>
2252 <reg name="x3" bitsize="32" regnum="3"/>
2253 <reg name="x2" bitsize="32" regnum="2"/>
2254 <reg name="x4" bitsize="32" regnum="4"/>
2255
2256 but it is not a good practice, so still error on this,
2257 and also print the message so that it can be saved in the
2258 generated c file. */
2259
2260 printf_unfiltered ("ERROR: \"regnum\" attribute %ld ",
2261 reg->target_regnum);
2262 printf_unfiltered ("is not the largest number (%d).\n",
2263 m_next_regnum);
2264 error (_("\"regnum\" attribute %ld is not the largest number (%d)."),
2265 reg->target_regnum, m_next_regnum);
2266 }
2267
2268 if (reg->target_regnum > m_next_regnum)
2269 {
2270 printf_unfiltered (" regnum = %ld;\n", reg->target_regnum);
2271 m_next_regnum = reg->target_regnum;
2272 }
2273
2274 printf_unfiltered (" tdesc_create_reg (feature, \"%s\", regnum++, %d, ",
2275 reg->name, reg->save_restore);
2276 if (reg->group)
2277 printf_unfiltered ("\"%s\", ", reg->group);
2278 else
2279 printf_unfiltered ("NULL, ");
2280 printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type);
2281
2282 m_next_regnum++;
2283 }
2284
2285 private:
2286 /* The register number to use for the next register we see. */
2287 int m_next_regnum = 0;
2288 };
2289
2290 static void
2291 maint_print_c_tdesc_cmd (const char *args, int from_tty)
2292 {
2293 const struct target_desc *tdesc;
2294 const char *filename;
2295
2296 if (args == NULL)
2297 {
2298 /* Use the global target-supplied description, not the current
2299 architecture's. This lets a GDB for one architecture generate C
2300 for another architecture's description, even though the gdbarch
2301 initialization code will reject the new description. */
2302 tdesc = current_target_desc;
2303 filename = target_description_filename;
2304 }
2305 else
2306 {
2307 /* Use the target description from the XML file. */
2308 filename = args;
2309 tdesc = file_read_description_xml (filename);
2310 }
2311
2312 if (tdesc == NULL)
2313 error (_("There is no target description to print."));
2314
2315 if (filename == NULL)
2316 error (_("The current target description did not come from an XML file."));
2317
2318 std::string filename_after_features (filename);
2319 auto loc = filename_after_features.rfind ("/features/");
2320
2321 if (loc != std::string::npos)
2322 filename_after_features = filename_after_features.substr (loc + 10);
2323
2324 /* Print c files for target features instead of target descriptions,
2325 because c files got from target features are more flexible than the
2326 counterparts. */
2327 if (startswith (filename_after_features.c_str (), "i386/32bit-")
2328 || startswith (filename_after_features.c_str (), "i386/64bit-")
2329 || startswith (filename_after_features.c_str (), "i386/x32-core.xml"))
2330 {
2331 print_c_feature v (filename_after_features);
2332
2333 tdesc->accept (v);
2334 }
2335 else
2336 {
2337 print_c_tdesc v (filename_after_features);
2338
2339 tdesc->accept (v);
2340 }
2341 }
2342
2343 namespace selftests {
2344
2345 static std::vector<std::pair<const char*, const target_desc *>> xml_tdesc;
2346
2347 #if GDB_SELF_TEST
2348
2349 /* See target-descritpions.h. */
2350
2351 void
2352 record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc)
2353 {
2354 xml_tdesc.emplace_back (xml_file, tdesc);
2355 }
2356 #endif
2357
2358 }
2359
2360 /* Check that the target descriptions created dynamically by
2361 architecture-specific code equal the descriptions created from XML files
2362 found in the specified directory DIR. */
2363
2364 static void
2365 maintenance_check_xml_descriptions (const char *dir, int from_tty)
2366 {
2367 if (dir == NULL)
2368 error (_("Missing dir name"));
2369
2370 gdb::unique_xmalloc_ptr<char> dir1 (tilde_expand (dir));
2371 std::string feature_dir (dir1.get ());
2372 unsigned int failed = 0;
2373
2374 for (auto const &e : selftests::xml_tdesc)
2375 {
2376 std::string tdesc_xml = (feature_dir + SLASH_STRING + e.first);
2377 const target_desc *tdesc
2378 = file_read_description_xml (tdesc_xml.data ());
2379
2380 if (tdesc == NULL || *tdesc != *e.second)
2381 failed++;
2382 }
2383 printf_filtered (_("Tested %lu XML files, %d failed\n"),
2384 (long) selftests::xml_tdesc.size (), failed);
2385 }
2386
2387 void
2388 _initialize_target_descriptions (void)
2389 {
2390 tdesc_data = gdbarch_data_register_pre_init (tdesc_data_init);
2391
2392 add_prefix_cmd ("tdesc", class_maintenance, set_tdesc_cmd, _("\
2393 Set target description specific variables."),
2394 &tdesc_set_cmdlist, "set tdesc ",
2395 0 /* allow-unknown */, &setlist);
2396 add_prefix_cmd ("tdesc", class_maintenance, show_tdesc_cmd, _("\
2397 Show target description specific variables."),
2398 &tdesc_show_cmdlist, "show tdesc ",
2399 0 /* allow-unknown */, &showlist);
2400 add_prefix_cmd ("tdesc", class_maintenance, unset_tdesc_cmd, _("\
2401 Unset target description specific variables."),
2402 &tdesc_unset_cmdlist, "unset tdesc ",
2403 0 /* allow-unknown */, &unsetlist);
2404
2405 add_setshow_filename_cmd ("filename", class_obscure,
2406 &tdesc_filename_cmd_string,
2407 _("\
2408 Set the file to read for an XML target description"), _("\
2409 Show the file to read for an XML target description"), _("\
2410 When set, GDB will read the target description from a local\n\
2411 file instead of querying the remote target."),
2412 set_tdesc_filename_cmd,
2413 show_tdesc_filename_cmd,
2414 &tdesc_set_cmdlist, &tdesc_show_cmdlist);
2415
2416 add_cmd ("filename", class_obscure, unset_tdesc_filename_cmd, _("\
2417 Unset the file to read for an XML target description. When unset,\n\
2418 GDB will read the description from the target."),
2419 &tdesc_unset_cmdlist);
2420
2421 add_cmd ("c-tdesc", class_maintenance, maint_print_c_tdesc_cmd, _("\
2422 Print the current target description as a C source file."),
2423 &maintenanceprintlist);
2424
2425 cmd_list_element *cmd;
2426
2427 cmd = add_cmd ("xml-descriptions", class_maintenance,
2428 maintenance_check_xml_descriptions, _("\
2429 Check the target descriptions created in GDB equal the descriptions\n\
2430 created from XML files in the directory.\n\
2431 The parameter is the directory name."),
2432 &maintenancechecklist);
2433 set_cmd_completer (cmd, filename_completer);
2434 }
This page took 0.11034 seconds and 4 git commands to generate.