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