This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
[binutils-gdb] RISC-V: Correct printing of MSTATUS and MISA.
- From: Jim Wilson <wilson at sourceware dot org>
- To: gdb-cvs at sourceware dot org
- Date: 13 Dec 2018 18:49:05 -0000
- Subject: [binutils-gdb] RISC-V: Correct printing of MSTATUS and MISA.
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b7c8601a7f2874de1bbe0dc38ef86ea053593ad8
commit b7c8601a7f2874de1bbe0dc38ef86ea053593ad8
Author: Jim Wilson <jimw@sifive.com>
Date: Thu Dec 13 10:48:23 2018 -0800
RISC-V: Correct printing of MSTATUS and MISA.
* riscv-tdep.c (riscv_print_one_register_info): For MSTATUS, add
comment for SD field, and correct xlen calculation. For MISA, add
comment for MXL field, add call to register_size, and correct base
calculation.
Diff:
---
gdb/ChangeLog | 7 +++++++
gdb/riscv-tdep.c | 10 ++++++++--
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4599157..bf40e68 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2018-12-13 Jim Wilson <jimw@sifive.com>
+
+ * riscv-tdep.c (riscv_print_one_register_info): For MSTATUS, add
+ comment for SD field, and correct xlen calculation. For MISA, add
+ comment for MXL field, add call to register_size, and correct base
+ calculation.
+
2018-12-13 Stafford Horne <shorne@gmail.com>
* NEWS(New targets): Add or1k*-*-linux*.
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index fc424fb..88b79af 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -701,8 +701,10 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
int size = register_size (gdbarch, regnum);
unsigned xlen;
+ /* The SD field is always in the upper bit of MSTATUS, regardless
+ of the number of bits in MSTATUS. */
d = value_as_long (val);
- xlen = size * 4;
+ xlen = size * 8;
fprintf_filtered (file,
"\tSD:%X VM:%02X MXR:%X PUM:%X MPRV:%X XS:%X "
"FS:%X MPP:%x HPP:%X SPP:%X MPIE:%X HPIE:%X "
@@ -731,9 +733,13 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
int base;
unsigned xlen, i;
LONGEST d;
+ int size = register_size (gdbarch, regnum);
+ /* The MXL field is always in the upper two bits of MISA,
+ regardless of the number of bits in MISA. Mask out other
+ bits to ensure we have a positive value. */
d = value_as_long (val);
- base = d >> 30;
+ base = (d >> ((size * 8) - 2)) & 0x3;
xlen = 16;
for (; base > 0; base--)