/* Target description support for GDB.
- Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2006-2014 Free Software Foundation, Inc.
Contributed by CodeSourcery.
struct tdesc_feature;
struct tdesc_arch_data;
+struct tdesc_type;
struct tdesc_reg;
struct target_desc;
struct target_ops;
-struct type;
+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;
+struct inferior;
-/* Fetch the current target's description, and switch the current
+/* Fetch the current inferior's description, and switch its current
architecture to one which incorporates that description. */
void target_find_description (void);
-/* Discard any description fetched from the current target, and switch
- the current architecture to one with no target description. */
+/* Discard any description fetched from the target for the current
+ inferior, and switch the current architecture to one with no target
+ description. */
void target_clear_description (void);
-/* Return the global current target description. This should only be
- used by gdbarch initialization code; most access should be through
- an existing gdbarch. */
+/* Return the current inferior's target description. This should only
+ be used by gdbarch initialization code; most access should be
+ through an existing gdbarch. */
const struct target_desc *target_current_description (void);
+/* Copy inferior target description data. Used for example when
+ handling (v)forks, where child's description is the same as the
+ parent's, since the child really is a copy of the parent. */
+
+void copy_inferior_target_desc_info (struct inferior *destinf,
+ struct inferior *srcinf);
+
+/* Free a target_desc_info object. */
+
+void target_desc_info_free (struct target_desc_info *tdesc_info);
+
+/* Returns true if INFO indicates the target description had been
+ supplied by the user. */
+
+int target_desc_info_from_user_p (struct target_desc_info *info);
+
/* Record architecture-specific functions to call for pseudo-register
support. If tdesc_use_registers is called and gdbarch_num_pseudo_regs
is greater than zero, then these should be called as well.
(struct gdbarch *gdbarch,
gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p);
-/* Update GDBARCH to use the target description for registers. Fixed
- register assignments are taken from EARLY_DATA, which is freed.
+/* Update GDBARCH to use the TARGET_DESC for registers. TARGET_DESC
+ may be GDBARCH's target description or (if GDBARCH does not have
+ one which describes registers) another target description
+ constructed by the gdbarch initialization routine.
+
+ Fixed register assignments are taken from EARLY_DATA, which is freed.
All registers which have not been assigned fixed numbers are given
numbers above the current value of gdbarch_num_regs.
gdbarch_num_regs and various register-related predicates are updated to
successfully validating the required registers. */
void tdesc_use_registers (struct gdbarch *gdbarch,
+ const struct target_desc *target_desc,
struct tdesc_arch_data *early_data);
/* Allocate initial data for validation of a target description during
struct tdesc_arch_data *data,
int regno, const char *name);
+/* Search FEATURE for a register named NAME, but do not assign a fixed
+ register number to it. */
+
+int tdesc_unnumbered_register (const struct tdesc_feature *feature,
+ const char *name);
+
+/* 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);
+
/* Search FEATURE for a register with any of the names from NAMES
(NULL-terminated). Record REGNO and the register in DATA; when
tdesc_use_registers is called, REGNO will be assigned to the
const struct bfd_arch_info *tdesc_architecture
(const struct target_desc *);
+/* Return the OSABI associated with this target description, or
+ GDB_OSABI_UNKNOWN if no osabi was specified. */
+
+enum gdb_osabi tdesc_osabi (const struct target_desc *);
+
+/* Return non-zero if this target description is compatible
+ with the given BFD architecture. */
+
+int tdesc_compatible_p (const struct target_desc *,
+ const struct bfd_arch_info *);
+
/* Return the string value of a property named KEY, or NULL if the
property was not specified. */
/* Return the type associated with ID in the context of FEATURE, or
NULL if none. */
-struct type *tdesc_named_type (const struct tdesc_feature *feature,
- const char *id);
+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. */
-const char *tdesc_register_name (int regno);
+const char *tdesc_register_name (struct gdbarch *gdbarch, int regno);
+
+/* Return the type of register REGNO, from the target description or
+ from an architecture-provided pseudo_register_type method. */
+
+struct type *tdesc_register_type (struct gdbarch *gdbarch, int regno);
+
+/* Return the type associated with ID, from the target description. */
+
+struct type *tdesc_find_type (struct gdbarch *gdbarch, const char *id);
/* Check whether REGNUM is a member of REGGROUP using the target
description. Return -1 if the target description does not
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 set_tdesc_property (struct target_desc *,
const char *key, const char *value);
+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);
-void tdesc_record_type (struct tdesc_feature *feature, struct type *type);
-
+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, LONGEST 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,
+ LONGEST size);
+void tdesc_add_field (struct tdesc_type *type, const char *field_name,
+ 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_create_reg (struct tdesc_feature *feature, const char *name,
int regnum, int save_restore, const char *group,
int bitsize, const char *type);