This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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--)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]