reggroups: Add test and docs for info reg $reggroup feature

Until now this feature has existed but was not documented.  Adding docs
and tests.

gdb/ChangeLog:

yyyy-mm-dd  Stafford Horne  <shorne@gmail.com>

	* infcmd.c (_initialize_infcmd): Add help for info reg $reggroup
	and info all-registers $reggroup feature.

gdb/doc/ChangeLog:

yyyy-mm-dd  Stafford Horne  <shorne@gmail.com>

	* gdb.texinfo (Registers): Document info reg $reggroup feature.

gdb/testsuite/ChangeLog:

yyyy-mm-dd  Stafford Horne  <shorne@gmail.com>

	* gdb.base/reggroups.c: New file.
	* gdb.base/reggroups.exp: New file.
This commit is contained in:
Stafford Horne 2017-12-27 23:36:30 +09:00
parent 76bce0d1d5
commit b67d92b06e
7 changed files with 160 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2017-12-27 Stafford Horne <shorne@gmail.com>
* infcmd.c (_initialize_infcmd): Add help for info reg $reggroup
and info all-registers $reggroup feature.
2017-12-23 Simon Marchi <simon.marchi@polymtl.ca> 2017-12-23 Simon Marchi <simon.marchi@polymtl.ca>
* target-descriptions.c (print_c_tdesc) * target-descriptions.c (print_c_tdesc)

View file

@ -1,3 +1,7 @@
2017-12-27 Stafford Horne <shorne@gmail.com>
* gdb.texinfo (Registers): Document info reg $reggroup feature.
2017-12-15 Sergio Durigan Junior <sergiodj@redhat.com> 2017-12-15 Sergio Durigan Junior <sergiodj@redhat.com>
PR cli/16224 PR cli/16224

View file

@ -11023,6 +11023,11 @@ and vector registers (in the selected stack frame).
Print the names and values of all registers, including floating-point Print the names and values of all registers, including floating-point
and vector registers (in the selected stack frame). and vector registers (in the selected stack frame).
@item info registers @var{reggroup} @dots{}
Print the name and value of the registers in each of the specified
@var{reggroup}s. The @var{reggoup} can be any of those returned by
@code{maint print reggroups} (@pxref{Maintenance Commands}).
@item info registers @var{regname} @dots{} @item info registers @var{regname} @dots{}
Print the @dfn{relativized} value of each specified register @var{regname}. Print the @dfn{relativized} value of each specified register @var{regname}.
As discussed in detail below, register values are normally relative to As discussed in detail below, register values are normally relative to

View file

@ -3460,13 +3460,17 @@ interrupt all running threads in non-stop mode, use the -a option."));
c = add_info ("registers", info_registers_command, _("\ c = add_info ("registers", info_registers_command, _("\
List of integer registers and their contents, for selected stack frame.\n\ List of integer registers and their contents, for selected stack frame.\n\
Register name as argument means describe only that register.")); One or more register names as argument means describe the given registers.\n\
One or more register group names as argument means describe the registers\n\
in the named register groups."));
add_info_alias ("r", "registers", 1); add_info_alias ("r", "registers", 1);
set_cmd_completer (c, reg_or_group_completer); set_cmd_completer (c, reg_or_group_completer);
c = add_info ("all-registers", info_all_registers_command, _("\ c = add_info ("all-registers", info_all_registers_command, _("\
List of all registers and their contents, for selected stack frame.\n\ List of all registers and their contents, for selected stack frame.\n\
Register name as argument means describe only that register.")); One or more register names as argument means describe the given registers.\n\
One or more register group names as argument means describe the registers\n\
in the named register groups."));
set_cmd_completer (c, reg_or_group_completer); set_cmd_completer (c, reg_or_group_completer);
add_info ("program", info_program_command, add_info ("program", info_program_command,

View file

@ -1,3 +1,8 @@
2017-12-27 Stafford Horne <shorne@gmail.com>
* gdb.base/reggroups.c: New file.
* gdb.base/reggroups.exp: New file.
2017-12-18 Joel Brobecker <brobecker@adacore.com> 2017-12-18 Joel Brobecker <brobecker@adacore.com>
* gdb.dwarf2/ada-valprint-error.c: New file. * gdb.dwarf2/ada-valprint-error.c: New file.

View file

@ -0,0 +1,22 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2015-2017 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
int
main (void)
{
return 0;
}

View file

@ -0,0 +1,113 @@
# This testcase is part of GDB, the GNU debugger.
# Copyright 2017 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Test listing reggroups and the registers in each group.
standard_testfile
if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
return -1
}
if ![runto_main] then {
fail "can't run to main"
return 0
}
set invalid_register_re "Invalid register .*"
# Fetch all reggroups from 'maint print reggroups'.
proc fetch_reggroups {test} {
global gdb_prompt
set reggroups {}
gdb_test_multiple "maint print reggroups" $test {
-re "maint print reggroups\r\n" {
exp_continue
}
-re "^ Group\[ \t\]+Type\[ \t\]+\r\n" {
exp_continue
}
-re "^ (\[0-9a-zA-Z-\]+)\[ \t\]+(user|internal)\[ \t\]+\r\n" {
lappend reggroups $expect_out(1,string)
exp_continue
}
-re "$gdb_prompt $" {
gdb_assert "[llength $reggroups] != 0" $test
}
}
return $reggroups
}
# Fetch all registers for a reggroup from 'info reg <reggroup>'.
proc fetch_reggroup_regs {reggroup test} {
global gdb_prompt
global invalid_register_re
# The command info reg <reggroup> will return something like the following:
#
# r0 0x0 0^M
# r1 0x7fdffc 0x7fdffc^M
# r2 0x7fe000 0x7fe000^M
# npc 0x23a8 0x23a8 <main+12>^M
# sr 0x8401 [ SM CY FO CID=0 ]^M
#
# We parse out and return the reg names, this is done by detecting
# that for each line we have a register name followed by a $hex number.
#
# Note: we will not return vector registers, but I think this is ok because
# for testing purposes we just want to ensure we get some registers and dont
# fail. Example vector register:
#
# xmm0 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, ... }}
#
set regs {}
gdb_test_multiple "info reg $reggroup" $test {
-re "info reg $reggroup\r\n" {
exp_continue
}
-re "^(\[0-9a-zA-Z-\]+)\[ \t\]+(0x\[0-9a-f\]+)\[ \t\]+(\[^\n\r\]+)\r\n" {
lappend regs $expect_out(1,string)
exp_continue
}
-re $invalid_register_re {
fail "$test (unexpected invalid register response)"
}
-re "$gdb_prompt $" {
pass $test
}
}
return $regs
}
set reggroups [fetch_reggroups "fetch reggroups"]
set regcount 0
foreach reggroup $reggroups {
set regs [fetch_reggroup_regs $reggroup "fetch reggroup regs $reggroup"]
set regcount [expr $regcount + [llength $regs]]
}
gdb_assert "[llength $regcount] != 0" "system has reggroup registers"
# If this fails it means that probably someone changed the error text returned
# for an invalid register argument. If that happens we should fix the pattern
# here and in the fetch_reggroup_regs procedure above.
gdb_test "info reg invalid-reggroup" $invalid_register_re \
"info reg invalid-reggroup should report 'Invalid register'"