In order to get registers names and groups from the target descriptor file, some new functions are needed.
This patch adds: - tdesc_find_register_name: Search FEATURE for a register REGNO and return its name. - tdesc_find_register_group_name: Search FEATURE for a register REGNO and return its group name. Signed-off-by: Franck Jullien <[email protected]> --- gdb/target-descriptions.c | 48 +++++++++++++++++++++++++++++++++++++++----- gdb/target-descriptions.h | 11 ++++++++++ 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 7206166..529adcd 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -801,6 +801,41 @@ tdesc_numbered_register (const struct tdesc_feature *feature, return 1; } +/* Search FEATURE for a register REGNO and return its name. */ +char * +tdesc_find_register_name (const struct tdesc_feature *feature, + int regno) +{ + int ixr; + struct tdesc_reg *reg; + + for (ixr = 0; + VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); + ixr++) + if (ixr == regno) + return reg->name; + + return NULL; +} + +/* Search FEATURE for a register REGNO and return its group name. */ +char * +tdesc_find_register_group_name (const struct tdesc_feature *feature, + int regno) +{ + int ixr; + struct tdesc_reg *reg; + + for (ixr = 0; + VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); + ixr++) + if (ixr == regno) + return reg->group; + + return NULL; +} + + /* Search FEATURE for a register named NAME, but do not assign a fixed register number to it. */ @@ -983,12 +1018,8 @@ tdesc_remote_register_number (struct gdbarch *gdbarch, int regno) return -1 if it does not know; the caller should handle registers with no specified group. - Arbitrary strings (other than "general", "float", and "vector") - from the description are not used; they cause the register to be - displayed in "info all-registers" but excluded from "info - registers" et al. The names of containing features are also not - used. This might be extended to display registers in some more - useful groupings. + The names of containing features are not used. This might be + extended to display registers in some more useful groupings. The save-restore flag is also implemented here. */ @@ -1023,6 +1054,11 @@ tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno, && (reggroup == save_reggroup || reggroup == restore_reggroup)) return reg->save_restore; + if (reg != NULL + && (reg->group != NULL) + && (strcmp (reg->group, reggroup_name (reggroup)) == 0)) + return 1; + return -1; } diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h index caa7230..ff428f1 100644 --- a/gdb/target-descriptions.h +++ b/gdb/target-descriptions.h @@ -89,6 +89,17 @@ struct tdesc_arch_data *tdesc_data_alloc (void); void tdesc_data_cleanup (void *data_untyped); +/* Search FEATURE for a register REGNO and return its name. */ + +char *tdesc_find_register_name (const struct tdesc_feature *feature, + int regno); + + +/* Search FEATURE for a register REGNO and return its group name. */ + +char *tdesc_find_register_group_name (const struct tdesc_feature *feature, + int regno); + /* Search FEATURE for a register named NAME. Record REGNO and the register in DATA; when tdesc_use_registers is called, REGNO will be assigned to the register. 1 is returned if the register was found, -- 1.7.1 _______________________________________________ OpenRISC mailing list [email protected] http://lists.openrisc.net/listinfo/openrisc
