This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] gdb: Add 'tui reg prev' command.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=55b400279267cad460ca62a8211f0b414f564e93

commit 55b400279267cad460ca62a8211f0b414f564e93
Author: Andrew Burgess <andrew.burgess@embecosm.com>
Date:   Thu May 21 21:51:53 2015 +0200

    gdb: Add 'tui reg prev' command.
    
    There is already a 'tui reg next' command, this adds a symmetric 'tui
    reg prev' command.
    
    gdb/ChangeLog:
    
    	* tui/tui-regs.c (tui_reg_prev_command): New function.
    	(_initialize_tui_regs): Add 'prev' command for 'tui reg'.
    	* reggroups.c (reggroup_prev): New function.
    	* reggroups.h (reggroup_prev): Add declaration.  Update comment.
    
    gdb/doc/ChangeLog:
    
    	* gdb.texinfo (TUI Commands): Add 'tui reg prev' details.

Diff:
---
 gdb/ChangeLog       |  7 +++++++
 gdb/doc/ChangeLog   |  4 ++++
 gdb/doc/gdb.texinfo |  6 ++++++
 gdb/reggroups.c     | 29 +++++++++++++++++++++++++++++
 gdb/reggroups.h     |  9 ++++++---
 gdb/tui/tui-regs.c  | 26 ++++++++++++++++++++++++++
 6 files changed, 78 insertions(+), 3 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e1252e4..2a6a870 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2015-05-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* tui/tui-regs.c (tui_reg_prev_command): New function.
+	(_initialize_tui_regs): Add 'prev' command for 'tui reg'.
+	* reggroups.c (reggroup_prev): New function.
+	* reggroups.h (reggroup_prev): Add declaration.  Update comment.
+
 2015-05-26  Omair Javaid  <omair.javaid@linaro.org>
 	    Yao Qi  <yao.qi@linaro.org>
 
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 445f64d..b99c316 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,7 @@
+2015-05-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* gdb.texinfo (TUI Commands): Add 'tui reg prev' details.
+
 2015-05-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* gdb.texinfo (TUI): Include 'tui enable' in the introduction.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index e38fd31..566cb9a 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -25014,6 +25014,12 @@ their order is target specific.  The predefined register groups are the
 following: @code{general}, @code{float}, @code{system}, @code{vector},
 @code{all}, @code{save}, @code{restore}.
 
+@item tui reg prev
+Show the previous register group.  The list of register groups as well
+as their order is target specific.  The predefined register groups are
+the following: @code{general}, @code{float}, @code{system},
+@code{vector}, @code{all}, @code{save}, @code{restore}.
+
 @item tui reg system
 Show the system registers in the register window.
 
diff --git a/gdb/reggroups.c b/gdb/reggroups.c
index cbafc01..745c5ea 100644
--- a/gdb/reggroups.c
+++ b/gdb/reggroups.c
@@ -150,6 +150,35 @@ reggroup_next (struct gdbarch *gdbarch, struct reggroup *last)
   return NULL;
 }
 
+/* See reggroups.h.  */
+
+struct reggroup *
+reggroup_prev (struct gdbarch *gdbarch, struct reggroup *curr)
+{
+  struct reggroups *groups;
+  struct reggroup_el *el;
+  struct reggroup *prev;
+
+  /* Don't allow this function to be called during architecture
+     creation.  If there are no groups, use the default groups list.  */
+  groups = gdbarch_data (gdbarch, reggroups_data);
+  gdb_assert (groups != NULL);
+  if (groups->first == NULL)
+    groups = &default_groups;
+
+  prev = NULL;
+  for (el = groups->first; el != NULL; el = el->next)
+    {
+      gdb_assert (el->group != NULL);
+      if (el->group == curr)
+	return prev;
+      prev = el->group;
+    }
+  if (curr == NULL)
+    return prev;
+  return NULL;
+}
+
 /* Is REGNUM a member of REGGROUP?  */
 int
 default_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
diff --git a/gdb/reggroups.h b/gdb/reggroups.h
index 2ad74bc..425a25c 100644
--- a/gdb/reggroups.h
+++ b/gdb/reggroups.h
@@ -49,11 +49,14 @@ extern void reggroup_add (struct gdbarch *gdbarch, struct reggroup *group);
 extern const char *reggroup_name (struct reggroup *reggroup);
 extern enum reggroup_type reggroup_type (struct reggroup *reggroup);
 
-/* Interator for the architecture's register groups.  Pass in NULL,
-   returns the first group.  Pass in a group, returns the next group,
-   or NULL when the last group is reached.  */
+/* Iterators for the architecture's register groups.  Pass in NULL, returns
+   the first (for next), or last (for prev) group.  Pass in a group,
+   returns the next or previous group, or NULL when either the end or the
+   beginning of the group list is reached.  */
 extern struct reggroup *reggroup_next (struct gdbarch *gdbarch,
 				       struct reggroup *last);
+extern struct reggroup *reggroup_prev (struct gdbarch *gdbarch,
+				       struct reggroup *curr);
 
 /* Is REGNUM a member of REGGROUP?  */
 extern int default_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 8d4c0f8..7cf386d 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -575,6 +575,29 @@ tui_reg_next_command (char *arg, int from_tty)
     }
 }
 
+/* Implementation of the "tui reg prev" command.  Cycle the register group
+   displayed in the tui REG window, moving backwards through the list of
+   available register groups.  */
+
+static void
+tui_reg_prev_command (char *arg, int from_tty)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+
+  if (TUI_DATA_WIN != NULL)
+    {
+      struct reggroup *group
+        = TUI_DATA_WIN->detail.data_display_info.current_group;
+
+      group = reggroup_prev (gdbarch, group);
+      if (group == NULL)
+	group = reggroup_prev (gdbarch, NULL);
+
+      if (group != NULL)
+	tui_show_registers (group);
+    }
+}
+
 static void
 tui_reg_float_command (char *arg, int from_tty)
 {
@@ -630,6 +653,9 @@ _initialize_tui_regs (void)
   add_cmd ("next", class_tui, tui_reg_next_command,
            _("Display next register group."),
            &tuireglist);
+  add_cmd ("prev", class_tui, tui_reg_prev_command,
+           _("Display previous register group."),
+           &tuireglist);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]