Yanfeng <yfliu2...@qq.com> writes: > On Thu, 2024-11-28 at 14:21 +0000, Alex Bennée wrote: >> Yanfeng Liu <yfliu2...@qq.com> writes: >> >> > This adds `virt` virtual register on debug interface so that users >> > can access current virtualization mode for debugging purposes. >> > >> > Signed-off-by: Yanfeng Liu <yfliu2...@qq.com> >> > --- >> > gdb-xml/riscv-32bit-virtual.xml | 1 + >> > gdb-xml/riscv-64bit-virtual.xml | 1 + >> > target/riscv/gdbstub.c | 18 ++++++++++++------ >> > 3 files changed, 14 insertions(+), 6 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> >> >> I assume these are mirrored in gdb not a QEMU only extension? > > So far I think it is a QEMU extension and the `gdb-multiarch` doesn't treat is > specially. My tests shows it basically works: > > ``` > (gdb) ir virt > priv 0x3 prv:3 [Machine] > virt 0x0 0 > (gdb) set $priv = 2 > (gdb) ir virt > priv 0x1 prv:1 [Supervisor] > virt 0x0 0 > (gdb) set $virt = 1 > (gdb) ir virt > priv 0x1 prv:1 [Supervisor] > virt 0x1 1 > (gdb) set $virt = 0 > (gdb) ir virt > priv 0x1 prv:1 [Supervisor] > virt 0x0 0 > (gdb) set $virt = 1 > (gdb) ir virt > priv 0x1 prv:1 [Supervisor] > virt 0x1 1 > (gdb) set $priv = 3 > (gdb) ir virt > priv 0x3 prv:3 [Machine] > virt 0x0 0 > ```
A gdbstub test case would be useful for this although I don't know if the RiscV check-tcg tests switch mode at all. > > As I am rather new to QEMU, please teach how we can add it as a QEMU only > extension. You don't need to extend the XML from GDB, you can build a specific one for QEMU extensions. For example: gdb_feature_builder_init(¶m.builder, &cpu->dyn_sysreg_feature.desc, "org.qemu.gdb.arm.sys.regs", "system-registers.xml", base_reg); This exports all the system registers QEMU knows about and GDB can access generically. Note the id is org.qemu..., indicating its our schema not gdbs. -- Alex Bennée Virtualisation Tech Lead @ Linaro