aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2015-05-21 21:51:53 +0200
committerAndrew Burgess <andrew.burgess@embecosm.com>2015-05-26 22:18:50 +0100
commit55b400279267cad460ca62a8211f0b414f564e93 (patch)
tree9a86945461e96428aae5ac7b9a6266d632c8e614 /gdb
parent7e16ef34742d853239608fadde4a19f3a105b0a2 (diff)
downloadgdb-55b400279267cad460ca62a8211f0b414f564e93.zip
gdb-55b400279267cad460ca62a8211f0b414f564e93.tar.gz
gdb-55b400279267cad460ca62a8211f0b414f564e93.tar.bz2
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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/doc/ChangeLog4
-rw-r--r--gdb/doc/gdb.texinfo6
-rw-r--r--gdb/reggroups.c29
-rw-r--r--gdb/reggroups.h9
-rw-r--r--gdb/tui/tui-regs.c26
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);
}