aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2020-06-16 17:00:33 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-06-25 18:07:33 +0100
commit6d74da72dacdbbe2b87a6b931e0f7edc3d3463e3 (patch)
tree5d43d213221a997b1ed1c8f30efd25373d9b3315
parent2e52d038246520ee8f8d8344da18303154a421a6 (diff)
downloadgdb-6d74da72dacdbbe2b87a6b931e0f7edc3d3463e3.zip
gdb-6d74da72dacdbbe2b87a6b931e0f7edc3d3463e3.tar.gz
gdb-6d74da72dacdbbe2b87a6b931e0f7edc3d3463e3.tar.bz2
gdb/riscv: Loop over all registers for 'info all-registers'
Currently the 'info all-registers' command only loops over those registers that are known to GDB. Any registers that are unknown, that is, are mentioned in the target description, but are not something GDB otherwise knows, will not be displayed. This feels wrong, so this commit fixes this mistake. The output of 'info all-registers' now matches 'info registers all'. gdb/ChangeLog: * riscv-tdep.c (riscv_print_registers_info): Loop over all registers, not just the known core set of registers. gdb/testsuite/ChangeLog: * gdb.arch/riscv-tdesc-regs.exp: New test cases.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/riscv-tdep.c2
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp10
4 files changed, 17 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f3ede94..0a36c6b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
+ * riscv-tdep.c (riscv_print_registers_info): Loop over all
+ registers, not just the known core set of registers.
+
+2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
+
* riscv-tdep.c (riscv_register_name): Return NULL for duplicate
fflags, frm, and fcsr registers.
(riscv_register_reggroup_p): Remove unknown CSRs from save and
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index cfc45d1..b86ba63 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -1071,7 +1071,7 @@ riscv_print_registers_info (struct gdbarch *gdbarch,
else
reggroup = general_reggroup;
- for (regnum = 0; regnum <= RISCV_LAST_REGNUM; ++regnum)
+ for (regnum = 0; regnum < gdbarch_num_cooked_regs (gdbarch); ++regnum)
{
/* Zero never changes, so might as well hide by default. */
if (regnum == RISCV_ZERO_REGNUM && !print_all)
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0090327..8ad2448 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
+ * gdb.arch/riscv-tdesc-regs.exp: New test cases.
+
+2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
+
* gdb.arch/riscv-tdesc-regs.exp: Extend test case.
2020-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
diff --git a/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp b/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp
index 9feddba..1be32e0 100644
--- a/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp
+++ b/gdb/testsuite/gdb.arch/riscv-tdesc-regs.exp
@@ -80,11 +80,15 @@ gdb_test "info registers \$csr0" "Invalid register `csr0'"
gdb_test "info registers \$dscratch0" "dscratch0\[ \t\]+.*"
gdb_test "info registers \$dscratch" "dscratch\[ \t\]+.*"
-foreach rgroup {all save restore} {
+foreach rgroup {x_all all save restore} {
# Now use 'info registers all' to see how many times the floating
# point status registers show up in the output.
array set reg_counts {}
- set test "info registers $rgroup"
+ if {$rgroup == "x_all"} {
+ set test "info all-registers"
+ } else {
+ set test "info registers $rgroup"
+ }
gdb_test_multiple $test $test {
-re ".*info registers all\r\n" {
verbose -log "Skip to first register"
@@ -107,7 +111,7 @@ foreach rgroup {all save restore} {
set count 0
}
if {($reg == "unknown_csr" || $reg == "dscratch") \
- && $rgroup != "all"} {
+ && $rgroup != "all" && $rgroup != "x_all"} {
gdb_assert {$count == 0} \
"register $reg not seen in reggroup $rgroup"
} else {