qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] target/riscv: Expose "virt" register for GDB for reads
@ 2023-03-05  9:42 Jim Shu
  2023-03-05  9:42 ` [PATCH 2/2] target/riscv: Make the "virt" register writable by GDB Jim Shu
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Jim Shu @ 2023-03-05  9:42 UTC (permalink / raw)
  To: qemu-devel, qemu-riscv
  Cc: Jim Shu, Alex Bennée, Philippe Mathieu-Daudé,
	Palmer Dabbelt, Alistair Francis, Bin Meng, Weiwei Li,
	Daniel Henrique Barboza, Liu Zhiwei

This patch enables a debugger to read current virtualization mode via
virtual "virt" register. After it, we could get full current privilege
mode via both "priv" and "virt" register.

Extend previous commit ab9056ff9bdb3f95db6e7a666d10522d289f14ec to
support H-extension.

Signed-off-by: Jim Shu <jim.shu@sifive.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
---
 gdb-xml/riscv-32bit-virtual.xml |  1 +
 gdb-xml/riscv-64bit-virtual.xml |  1 +
 target/riscv/gdbstub.c          | 12 ++++++++----
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/gdb-xml/riscv-32bit-virtual.xml b/gdb-xml/riscv-32bit-virtual.xml
index 905f1c555d..d44b6ca2dc 100644
--- a/gdb-xml/riscv-32bit-virtual.xml
+++ b/gdb-xml/riscv-32bit-virtual.xml
@@ -8,4 +8,5 @@
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.riscv.virtual">
   <reg name="priv" bitsize="32"/>
+  <reg name="virt" bitsize="32"/>
 </feature>
diff --git a/gdb-xml/riscv-64bit-virtual.xml b/gdb-xml/riscv-64bit-virtual.xml
index 62d86c237b..7c9b63d5b6 100644
--- a/gdb-xml/riscv-64bit-virtual.xml
+++ b/gdb-xml/riscv-64bit-virtual.xml
@@ -8,4 +8,5 @@
 <!DOCTYPE feature SYSTEM "gdb-target.dtd">
 <feature name="org.gnu.gdb.riscv.virtual">
   <reg name="priv" bitsize="64"/>
+  <reg name="virt" bitsize="64"/>
 </feature>
diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c
index 6048541606..1755fd9d51 100644
--- a/target/riscv/gdbstub.c
+++ b/target/riscv/gdbstub.c
@@ -187,13 +187,17 @@ static int riscv_gdb_set_csr(CPURISCVState *env, uint8_t *mem_buf, int n)
 
 static int riscv_gdb_get_virtual(CPURISCVState *cs, GByteArray *buf, int n)
 {
-    if (n == 0) {
 #ifdef CONFIG_USER_ONLY
+    if (n >= 0 && n <= 1) {
         return gdb_get_regl(buf, 0);
+    }
 #else
+    if (n == 0) {
         return gdb_get_regl(buf, cs->priv);
-#endif
+    } else if (n == 1) {
+        return gdb_get_regl(buf, riscv_cpu_virt_enabled(cs));
     }
+#endif
     return 0;
 }
 
@@ -328,13 +332,13 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
     case MXL_RV32:
         gdb_register_coprocessor(cs, riscv_gdb_get_virtual,
                                  riscv_gdb_set_virtual,
-                                 1, "riscv-32bit-virtual.xml", 0);
+                                 2, "riscv-32bit-virtual.xml", 0);
         break;
     case MXL_RV64:
     case MXL_RV128:
         gdb_register_coprocessor(cs, riscv_gdb_get_virtual,
                                  riscv_gdb_set_virtual,
-                                 1, "riscv-64bit-virtual.xml", 0);
+                                 2, "riscv-64bit-virtual.xml", 0);
         break;
     default:
         g_assert_not_reached();
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2023-03-10  4:00 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-05  9:42 [PATCH 1/2] target/riscv: Expose "virt" register for GDB for reads Jim Shu
2023-03-05  9:42 ` [PATCH 2/2] target/riscv: Make the "virt" register writable by GDB Jim Shu
2023-03-06 11:26   ` LIU Zhiwei
2023-03-08 11:14     ` Jim Shu
2023-03-09  3:05     ` Jim Shu
2023-03-09  3:21       ` LIU Zhiwei
2023-03-10  3:58   ` Alistair Francis
2023-03-06 11:22 ` [PATCH 1/2] target/riscv: Expose "virt" register for GDB for reads LIU Zhiwei
2023-03-10  0:05 ` Alistair Francis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).