|
@@ -373,6 +373,23 @@ static int riscv_gdb_set_csr(CPURISCVState *env, uint8_t *mem_buf, int n)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int riscv_gdb_get_virtual(CPURISCVState *cs, uint8_t *mem_buf, int n)
|
|
|
+{
|
|
|
+ if (n == 0) {
|
|
|
+#ifdef CONFIG_USER_ONLY
|
|
|
+ return gdb_get_regl(mem_buf, 0);
|
|
|
+#else
|
|
|
+ return gdb_get_regl(mem_buf, cs->priv);
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int riscv_gdb_set_virtual(CPURISCVState *cs, uint8_t *mem_buf, int n)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
|
|
|
{
|
|
|
RISCVCPU *cpu = RISCV_CPU(cs);
|
|
@@ -385,6 +402,9 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
|
|
|
|
|
|
gdb_register_coprocessor(cs, riscv_gdb_get_csr, riscv_gdb_set_csr,
|
|
|
240, "riscv-32bit-csr.xml", 0);
|
|
|
+
|
|
|
+ gdb_register_coprocessor(cs, riscv_gdb_get_virtual, riscv_gdb_set_virtual,
|
|
|
+ 1, "riscv-32bit-virtual.xml", 0);
|
|
|
#elif defined(TARGET_RISCV64)
|
|
|
if (env->misa & RVF) {
|
|
|
gdb_register_coprocessor(cs, riscv_gdb_get_fpu, riscv_gdb_set_fpu,
|
|
@@ -393,5 +413,8 @@ void riscv_cpu_register_gdb_regs_for_features(CPUState *cs)
|
|
|
|
|
|
gdb_register_coprocessor(cs, riscv_gdb_get_csr, riscv_gdb_set_csr,
|
|
|
240, "riscv-64bit-csr.xml", 0);
|
|
|
+
|
|
|
+ gdb_register_coprocessor(cs, riscv_gdb_get_virtual, riscv_gdb_set_virtual,
|
|
|
+ 1, "riscv-64bit-virtual.xml", 0);
|
|
|
#endif
|
|
|
}
|