> Isn't this '0' flag here accelerator-specific? ... > ... if so the prototype should be: > > int (*update_guest_debug)(CPUState *cpu); > > and the '0' value set within kvm-accel-ops.c handler implementation. > You're right, we can avoid the additional variable. We'll then have to wrap `kvm_update_guest_debug`. Would the following be ok? diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c index 6ebf9a644f..5e0fb42408 100644 --- a/accel/kvm/kvm-accel-ops.c +++ b/accel/kvm/kvm-accel-ops.c @@ -86,6 +86,10 @@ static bool kvm_cpus_are_resettable(void) return !kvm_enabled() || kvm_cpu_check_are_resettable(); } +static int kvm_update_guest_debug_ops(CPUState *cpu) { + return kvm_update_guest_debug(cpu, 0); +} + static void kvm_accel_ops_class_init(ObjectClass *oc, void *data) { AccelOpsClass *ops = ACCEL_OPS_CLASS(oc); @@ -99,7 +103,7 @@ static void kvm_accel_ops_class_init(ObjectClass *oc, void *data) ops->synchronize_pre_loadvm = kvm_cpu_synchronize_pre_loadvm; #ifdef KVM_CAP_SET_GUEST_DEBUG - ops->update_guest_debug = kvm_update_guest_debug; + ops->update_guest_debug = kvm_update_guest_debug_ops; ops->supports_guest_debug = kvm_supports_guest_debug; ops->insert_breakpoint = kvm_insert_breakpoint; ops->remove_breakpoint = kvm_remove_breakpoint; diff --git a/cpu.c b/cpu.c index ef433a79e3..b2ade96caa 100644 --- a/cpu.c +++ b/cpu.c @@ -383,7 +383,7 @@ void cpu_single_step(CPUState *cpu, int enabled) cpu->singlestep_enabled = enabled; if (ops->update_guest_debug) { - ops->update_guest_debug(cpu, 0); + ops->update_guest_debug(cpu); } trace_breakpoint_singlestep(cpu->cpu_index, enabled); diff --git a/include/sysemu/accel-ops.h b/include/sysemu/accel-ops.h index 0a47a2f00c..cd6a4ef7a5 100644 --- a/include/sysemu/accel-ops.h +++ b/include/sysemu/accel-ops.h @@ -48,7 +48,7 @@ struct AccelOpsClass { /* gdbstub hooks */ bool (*supports_guest_debug)(void); - int (*update_guest_debug)(CPUState *cpu, unsigned long flags); + int (*update_guest_debug)(CPUState *cpu); int (*insert_breakpoint)(CPUState *cpu, int type, hwaddr addr, hwaddr len); int (*remove_breakpoint)(CPUState *cpu, int type, hwaddr addr, hwaddr len); void (*remove_all_breakpoints)(CPUState *cpu); If you have a better name for `kvm_update_guest_debug_ops`, I'm open for suggestions. On a side note. When compiling for an arch that isn't the same as the system (i.e. aarch64 on x86_64), I'm getting a linker-error for cpu.c that `cpus_get_accel` isn't defined. Do I need to move `cpus_get_accel` or somehow #ifdef its use?