From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 37559 invoked by alias); 26 Dec 2017 13:48:53 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 37443 invoked by uid 89); 26 Dec 2017 13:48:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=CID, cid, HX-Received:10.84.194.228 X-HELO: mail-pl0-f44.google.com Received: from mail-pl0-f44.google.com (HELO mail-pl0-f44.google.com) (209.85.160.44) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 26 Dec 2017 13:48:51 +0000 Received: by mail-pl0-f44.google.com with SMTP id o2so17882611plk.12 for ; Tue, 26 Dec 2017 05:48:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=5WK9+3ktpi4HxCVt6OvGc8ysAlosv4aFAM6bHAM8mfE=; b=cT92qccUtFD4enYoO+pRyYyvODKf/TxRr7kxgxZ3/7YmPKW/WkGWPwABSLhdk2pMxg ln1whVJS+yf0iTqyyIZcYPoasb2cgIP5soccl1O8Z558r/5KP9UlWk0dqP2JZAZI9I/p lLF1zNrHOvkDQmq7qc/537so2wB2R8MkDx7UFdO8Dh7+lQ8HCHSwCFETxRD7+Kwk4Hds 0FABsULVkw/WxFd4cKdyOi8I598TGDxQqRfRsi61TjzBQT2i9dh2kHX4HnPKLwb2g55s sGjpCf1c4ZkN4XFF2DS5zTVK+y/AXAZib2iCVG91LZgdQC2ldtSaV+cl3/u0aGr2RtRv /jCw== X-Gm-Message-State: AKGB3mK5mbSnBw9Xv8M4evm4Lg2e/lJMpZU+fuyfrThl2/dl/AWUXo2O 9qyZ8iLwCH7dWEVgiHnWUDaJoIOC X-Google-Smtp-Source: ACJfBos0G7xljDb+Y286jdJUjaV5l0i9RWMOggeYpznlHcwMz/blFe6Pk4/QiTqV3ewcsNu3xeXRLA== X-Received: by 10.84.194.228 with SMTP id h91mr24928892pld.177.1514296129181; Tue, 26 Dec 2017 05:48:49 -0800 (PST) Received: from localhost (g121.222-224-191.ppp.wakwak.ne.jp. [222.224.191.121]) by smtp.gmail.com with ESMTPSA id d68sm63456736pfl.38.2017.12.26.05.48.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Dec 2017 05:48:48 -0800 (PST) From: Stafford Horne To: GDB patches Cc: Simon Marchi , Eli Zaretskii , Stafford Horne Subject: [PATCH v4 1/4] reggroups: Add test and docs for `info reg $reggroup` feature Date: Tue, 26 Dec 2017 13:48:00 -0000 Message-Id: <20171226134832.23497-2-shorne@gmail.com> In-Reply-To: <20171226134832.23497-1-shorne@gmail.com> References: <20171226134832.23497-1-shorne@gmail.com> X-IsSubscribed: yes X-SW-Source: 2017-12/txt/msg00494.txt.bz2 Until now this feature has existed but was not documented. Adding docs and tests. gdb/ChangeLog: yyyy-mm-dd Stafford Horne * infcmd.c (_initialize_infcmd): Add help for info reg $reggroup and info all-registers $reggroup feature. gdb/doc/ChangeLog: yyyy-mm-dd Stafford Horne * gdb.texinfo (Registers): Document info reg $reggroup feature. gdb/testsuite/ChangeLog: yyyy-mm-dd Stafford Horne * gdb.base/reggroups.c: New file. * gdb.base/reggroups.exp: New file. --- Since v3 - Fixed grammar issue in gdb.texinfo pointed out by Eli. - Added xref in gdb.texinfo pointed out by Eli. - Documented multi-reggroup support in infcmd.c suggested by Eli. - Enhanced testing to actual test info reg results suggested by Simon. gdb/doc/gdb.texinfo | 5 ++ gdb/infcmd.c | 8 ++- gdb/testsuite/gdb.base/reggroups.c | 5 ++ gdb/testsuite/gdb.base/reggroups.exp | 112 +++++++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.base/reggroups.c create mode 100644 gdb/testsuite/gdb.base/reggroups.exp diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 60ed80c363..a16e79bc2a 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -11023,6 +11023,11 @@ and vector registers (in the selected stack frame). Print the names and values of all registers, including floating-point 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{} Print the @dfn{relativized} value of each specified register @var{regname}. As discussed in detail below, register values are normally relative to diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 8bde28eab6..1b63f9b730 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -3460,13 +3460,17 @@ interrupt all running threads in non-stop mode, use the -a option.")); c = add_info ("registers", info_registers_command, _("\ 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); set_cmd_completer (c, reg_or_group_completer); c = add_info ("all-registers", info_all_registers_command, _("\ 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); add_info ("program", info_program_command, diff --git a/gdb/testsuite/gdb.base/reggroups.c b/gdb/testsuite/gdb.base/reggroups.c new file mode 100644 index 0000000000..8e8f518aae --- /dev/null +++ b/gdb/testsuite/gdb.base/reggroups.c @@ -0,0 +1,5 @@ +int +main() +{ + return 0; +} diff --git a/gdb/testsuite/gdb.base/reggroups.exp b/gdb/testsuite/gdb.base/reggroups.exp new file mode 100644 index 0000000000..4fc2c9992a --- /dev/null +++ b/gdb/testsuite/gdb.base/reggroups.exp @@ -0,0 +1,112 @@ +# 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 . + +# 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 +} + +# Fetch all reggroups from 'maint print reggroups'. + +proc fetch_reggroups {test} { + global gdb_prompt + global expect_out + + set reggroups {} + gdb_test_multiple "maint print reggroups" "get reggroups" { + -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 $" { + if { [llength $reggroups] != 0 } { + pass $test + } else { + fail "$test - didn't fetch any reggroups" + } + } + } + + return $reggroups +} + +# Fetch all registers for a reggroup from 'info reg '. + +proc fetch_reggroup_regs {reggroup test} { + global gdb_prompt + global expext_out + + # The command info reg will return something like the following: + # + # r0 0x0 0^M + # r1 0x7fdffc 0x7fdffc^M + # r2 0x7fe000 0x7fe000^M + # npc 0x23a8 0x23a8 ^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. + set regs {} + gdb_test_multiple "info reg $reggroup" "info reg $reggroup" { + -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 .*\r\n" { + 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]] +} +if { $regcount != 0 } { + pass "system has reggroup regs $regcount" +} else { + fail "system has no reggroup regs at all" +} + +# 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 .*" \ + "info reg invalid-reggroup should report 'Invalid register'" -- 2.13.6