/* Target description support for GDB.
- Copyright (C) 2006-2016 Free Software Foundation, Inc.
+ Copyright (C) 2006-2020 Free Software Foundation, Inc.
Contributed by CodeSourcery.
#ifndef TARGET_DESCRIPTIONS_H
#define TARGET_DESCRIPTIONS_H 1
+#include "gdbsupport/tdesc.h"
+#include "gdbarch.h"
-struct tdesc_feature;
struct tdesc_arch_data;
-struct tdesc_type;
-struct tdesc_reg;
-struct target_desc;
struct target_ops;
-struct target_desc;
/* An inferior's target description info is stored in this opaque
object. There's one such object per inferior. */
struct target_desc_info;
/* Search FEATURE for a register named NAME, and return its size in
bits. The register must exist. */
-int tdesc_register_size (const struct tdesc_feature *feature,
- const char *name);
+int tdesc_register_bitsize (const struct tdesc_feature *feature,
+ const char *name);
/* Search FEATURE for a register with any of the names from NAMES
(NULL-terminated). Record REGNO and the register in DATA; when
const char *tdesc_feature_name (const struct tdesc_feature *feature);
-/* Return the type associated with ID in the context of FEATURE, or
- NULL if none. */
-
-struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature,
- const char *id);
-
/* Return the name of register REGNO, from the target description or
from an architecture-provided pseudo_register_name method. */
int tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
struct reggroup *reggroup);
+
+/* A deleter adapter for a target desc. */
+
+struct target_desc_deleter
+{
+ void operator() (struct target_desc *desc) const;
+};
+
+/* A unique pointer specialization that holds a target_desc. */
+
+typedef std::unique_ptr<target_desc, target_desc_deleter> target_desc_up;
+
/* Methods for constructing a target description. */
-struct target_desc *allocate_target_description (void);
-struct cleanup *make_cleanup_free_target_description (struct target_desc *);
void set_tdesc_architecture (struct target_desc *,
const struct bfd_arch_info *);
void set_tdesc_osabi (struct target_desc *, enum gdb_osabi osabi);
void tdesc_add_compatible (struct target_desc *,
const struct bfd_arch_info *);
-struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc,
- const char *name);
-struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature,
- const char *name,
- struct tdesc_type *field_type,
- int count);
-struct tdesc_type *tdesc_create_struct (struct tdesc_feature *feature,
- const char *name);
-void tdesc_set_struct_size (struct tdesc_type *type, int size);
-struct tdesc_type *tdesc_create_union (struct tdesc_feature *feature,
- const char *name);
-struct tdesc_type *tdesc_create_flags (struct tdesc_feature *feature,
- const char *name,
- int size);
-struct tdesc_type *tdesc_create_enum (struct tdesc_feature *feature,
- const char *name,
- int size);
-void tdesc_add_field (struct tdesc_type *type, const char *field_name,
- struct tdesc_type *field_type);
-void tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name,
- int start, int end,
- struct tdesc_type *field_type);
-void tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
- int start, int end);
-void tdesc_add_flag (struct tdesc_type *type, int start,
- const char *flag_name);
-void tdesc_add_enum_value (struct tdesc_type *type, int value,
- const char *name);
-void tdesc_create_reg (struct tdesc_feature *feature, const char *name,
- int regnum, int save_restore, const char *group,
- int bitsize, const char *type);
+#if GDB_SELF_TEST
+namespace selftests {
+
+/* Record that XML_FILE should generate a target description that equals
+ TDESC, to be verified by the "maintenance check xml-descriptions"
+ command. This function takes ownership of TDESC. */
+
+void record_xml_tdesc (const char *xml_file,
+ const struct target_desc *tdesc);
+}
+#endif
#endif /* TARGET_DESCRIPTIONS_H */