target/ppc: Clarify the meaning of return values in kvm_handle_debug

The kvm_handle_debug function can return 0 to go back into the guest
or return 1 to notify the gdbstub thread and pass control to GDB.

Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com>
Message-Id: <20200110151344.278471-2-farosas@linux.ibm.com>
Tested-by: Leonardo Bras <leonardo@ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Fabiano Rosas 2020-01-10 12:13:42 -03:00 committed by David Gibson
parent b2ce76a073
commit 6e0552a3a7

View file

@ -53,6 +53,9 @@
#define PROC_DEVTREE_CPU "/proc/device-tree/cpus/" #define PROC_DEVTREE_CPU "/proc/device-tree/cpus/"
#define DEBUG_RETURN_GUEST 0
#define DEBUG_RETURN_GDB 1
const KVMCapabilityInfo kvm_arch_required_capabilities[] = { const KVMCapabilityInfo kvm_arch_required_capabilities[] = {
KVM_CAP_LAST_INFO KVM_CAP_LAST_INFO
}; };
@ -1564,7 +1567,7 @@ void kvm_arch_update_guest_debug(CPUState *cs, struct kvm_guest_debug *dbg)
static int kvm_handle_hw_breakpoint(CPUState *cs, static int kvm_handle_hw_breakpoint(CPUState *cs,
struct kvm_debug_exit_arch *arch_info) struct kvm_debug_exit_arch *arch_info)
{ {
int handle = 0; int handle = DEBUG_RETURN_GUEST;
int n; int n;
int flag = 0; int flag = 0;
@ -1572,13 +1575,13 @@ static int kvm_handle_hw_breakpoint(CPUState *cs,
if (arch_info->status & KVMPPC_DEBUG_BREAKPOINT) { if (arch_info->status & KVMPPC_DEBUG_BREAKPOINT) {
n = find_hw_breakpoint(arch_info->address, GDB_BREAKPOINT_HW); n = find_hw_breakpoint(arch_info->address, GDB_BREAKPOINT_HW);
if (n >= 0) { if (n >= 0) {
handle = 1; handle = DEBUG_RETURN_GDB;
} }
} else if (arch_info->status & (KVMPPC_DEBUG_WATCH_READ | } else if (arch_info->status & (KVMPPC_DEBUG_WATCH_READ |
KVMPPC_DEBUG_WATCH_WRITE)) { KVMPPC_DEBUG_WATCH_WRITE)) {
n = find_hw_watchpoint(arch_info->address, &flag); n = find_hw_watchpoint(arch_info->address, &flag);
if (n >= 0) { if (n >= 0) {
handle = 1; handle = DEBUG_RETURN_GDB;
cs->watchpoint_hit = &hw_watchpoint; cs->watchpoint_hit = &hw_watchpoint;
hw_watchpoint.vaddr = hw_debug_points[n].addr; hw_watchpoint.vaddr = hw_debug_points[n].addr;
hw_watchpoint.flags = flag; hw_watchpoint.flags = flag;
@ -1590,12 +1593,12 @@ static int kvm_handle_hw_breakpoint(CPUState *cs,
static int kvm_handle_singlestep(void) static int kvm_handle_singlestep(void)
{ {
return 1; return DEBUG_RETURN_GDB;
} }
static int kvm_handle_sw_breakpoint(void) static int kvm_handle_sw_breakpoint(void)
{ {
return 1; return DEBUG_RETURN_GDB;
} }
static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run) static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run)
@ -1647,7 +1650,7 @@ static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run)
env->error_code = POWERPC_EXCP_INVAL; env->error_code = POWERPC_EXCP_INVAL;
ppc_cpu_do_interrupt(cs); ppc_cpu_do_interrupt(cs);
return 0; return DEBUG_RETURN_GUEST;
} }
int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run) int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)