From 9be2ae8fc6b908746d9d7ebaf77aec8abba5dd2c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 27 Apr 2018 15:52:44 -0600 Subject: [PATCH] Use previous count when 'x' command is repeated About the 'x' command, the manual says: If you use to repeat the 'x' command, the repeat count N is used again; the other arguments default as for successive uses of 'x'. However, PR gdb/22619 points out that this does not work. This patch fixes the problem. ChangeLog 2018-05-04 Tom Tromey PR gdb/22619: * printcmd.c (last_count): New global. (x_command): Use saved count when repeating. testsuite/ChangeLog 2018-05-04 Tom Tromey PR gdb/22619: * gdb.base/long_long.exp (gdb_test_long_long): Add test for repeat behavior. --- gdb/ChangeLog | 6 ++++++ gdb/printcmd.c | 11 +++++++++++ gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.base/long_long.exp | 5 +++++ 4 files changed, 28 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 60079a13ebb..7136be6690c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-05-04 Tom Tromey + + PR gdb/22619: + * printcmd.c (last_count): New global. + (x_command): Use saved count when repeating. + 2018-05-04 Tom Tromey * nto-procfs.c (do_closedir_cleanup): Remove. diff --git a/gdb/printcmd.c b/gdb/printcmd.c index a6d6d7e12d3..18c41103bd5 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -62,6 +62,10 @@ static char last_format = 0; static char last_size = 'w'; +/* Last specified count for the 'x' command. */ + +static int last_count; + /* Default address to examine next, and associated architecture. */ static struct gdbarch *next_gdbarch; @@ -1616,6 +1620,11 @@ x_command (const char *exp, int from_tty) fmt.count = 1; fmt.raw = 0; + /* If there is no expression and no format, use the most recent + count. */ + if (exp == nullptr && last_count > 0) + fmt.count = last_count; + if (exp && *exp == '/') { const char *tmp = exp + 1; @@ -1624,6 +1633,8 @@ x_command (const char *exp, int from_tty) exp = (char *) tmp; } + last_count = fmt.count; + /* If we have an expression, evaluate it and use it as the address. */ if (exp != 0 && *exp != 0) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 73c4a2ca6c2..62fa5e03c8f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-05-04 Tom Tromey + + PR gdb/22619: + * gdb.base/long_long.exp (gdb_test_long_long): Add test for repeat + behavior. + 2018-05-04 Andrew Burgess * gdb.base/maint.exp: Process output from 'maint print registers' diff --git a/gdb/testsuite/gdb.base/long_long.exp b/gdb/testsuite/gdb.base/long_long.exp index 85e08f085df..b319c61c5ed 100644 --- a/gdb/testsuite/gdb.base/long_long.exp +++ b/gdb/testsuite/gdb.base/long_long.exp @@ -280,5 +280,10 @@ gdb_test_ptr "x/2ga g" "" "" "0x89abcdef.*0x77053977" "0x123456789abcdef.*0xa72e gdb_test "x/2gc g" "-17 '.\[0-9\]*'.*119 'w'" gdb_test "x/2gf g" "3.5127005640885037e-303.*-5.9822653797615723e-120" +# Repeat behavior. +gdb_test "x/2bx b" "0x01.*0xa7" "set up for repeat" +send_gdb "\n" +gdb_test "" "0x00.*0x00" "repeat x command" + gdb_exit return 0 -- 2.30.2