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

Reply via email to