diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2015-05-21 21:51:53 +0200 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2015-05-26 22:18:50 +0100 |
commit | 55b400279267cad460ca62a8211f0b414f564e93 (patch) | |
tree | 9a86945461e96428aae5ac7b9a6266d632c8e614 /gdb | |
parent | 7e16ef34742d853239608fadde4a19f3a105b0a2 (diff) | |
download | gdb-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/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 6 | ||||
-rw-r--r-- | gdb/reggroups.c | 29 | ||||
-rw-r--r-- | gdb/reggroups.h | 9 | ||||
-rw-r--r-- | 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); } |