target/riscv/kvm: handle the exit with debug reason
If the breakpoint belongs to the userspace then set the ret value. Signed-off-by: Chao Du <duchao@eswincomputing.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20240606014501.20763-3-duchao@eswincomputing.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
80b605056d
commit
b60520392d
@ -1555,6 +1555,21 @@ static int kvm_riscv_handle_csr(CPUState *cs, struct kvm_run *run)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool kvm_riscv_handle_debug(CPUState *cs)
|
||||
{
|
||||
RISCVCPU *cpu = RISCV_CPU(cs);
|
||||
CPURISCVState *env = &cpu->env;
|
||||
|
||||
/* Ensure PC is synchronised */
|
||||
kvm_cpu_synchronize_state(cs);
|
||||
|
||||
if (kvm_find_sw_breakpoint(cs, env->pc)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
|
||||
{
|
||||
int ret = 0;
|
||||
@ -1565,6 +1580,11 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
|
||||
case KVM_EXIT_RISCV_CSR:
|
||||
ret = kvm_riscv_handle_csr(cs, run);
|
||||
break;
|
||||
case KVM_EXIT_DEBUG:
|
||||
if (kvm_riscv_handle_debug(cs)) {
|
||||
ret = EXCP_DEBUG;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
qemu_log_mask(LOG_UNIMP, "%s: un-handled exit reason %d\n",
|
||||
__func__, run->exit_reason);
|
||||
|
Loading…
Reference in New Issue
Block a user