/* Target description support for GDB.
- Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2007, 2008, 2009 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;
/* Fetch the current target's description, and switch the current
architecture to one which incorporates that description. */
(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, 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
/* 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);
/* Check whether REGNUM is a member of REGGROUP using the target
description. Return -1 if the target description does not
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_union (struct tdesc_feature *feature,
+ const char *name);
+void tdesc_add_field (struct tdesc_type *type, const char *field_name,
+ struct tdesc_type *field_type);
void tdesc_create_reg (struct tdesc_feature *feature, const char *name,
int regnum, int save_restore, const char *group,
int bitsize, const char *type);