mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:56:38 +00:00
accel: Use GdbBreakpointType enum
Include '_gdbstub_' in the AccelOpsClass handlers to emphasize we are handling gdbstub-related requests. Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20260705215729.62196-26-philmd@oss.qualcomm.com>
This commit is contained in:
@@ -233,7 +233,8 @@ int hvf_update_guest_debug(CPUState *cpu)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hvf_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
static int hvf_insert_gdbstub_breakpoint(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
struct hvf_sw_breakpoint *bp;
|
||||
int err;
|
||||
@@ -256,7 +257,7 @@ static int hvf_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
|
||||
QTAILQ_INSERT_HEAD(&hvf_state->hvf_sw_breakpoints, bp, entry);
|
||||
} else {
|
||||
err = hvf_arch_insert_hw_breakpoint(addr, len, type);
|
||||
err = hvf_arch_insert_gdbstub_hw_breakpoint(addr, len, type);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -271,7 +272,8 @@ static int hvf_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hvf_remove_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
static int hvf_remove_gdbstub_breakpoint(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
struct hvf_sw_breakpoint *bp;
|
||||
int err;
|
||||
@@ -295,7 +297,7 @@ static int hvf_remove_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
QTAILQ_REMOVE(&hvf_state->hvf_sw_breakpoints, bp, entry);
|
||||
g_free(bp);
|
||||
} else {
|
||||
err = hvf_arch_remove_hw_breakpoint(addr, len, type);
|
||||
err = hvf_arch_remove_gdbstub_hw_breakpoint(addr, len, type);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -310,7 +312,7 @@ static int hvf_remove_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hvf_remove_all_breakpoints(CPUState *cpu)
|
||||
static void hvf_remove_all_gdbstub_breakpoints(CPUState *cpu)
|
||||
{
|
||||
struct hvf_sw_breakpoint *bp, *next;
|
||||
CPUState *tmpcpu;
|
||||
@@ -328,7 +330,7 @@ static void hvf_remove_all_breakpoints(CPUState *cpu)
|
||||
QTAILQ_REMOVE(&hvf_state->hvf_sw_breakpoints, bp, entry);
|
||||
g_free(bp);
|
||||
}
|
||||
hvf_arch_remove_all_hw_breakpoints();
|
||||
hvf_arch_remove_all_gdbstub_hw_breakpoints();
|
||||
|
||||
CPU_FOREACH(cpu) {
|
||||
hvf_update_guest_debug(cpu);
|
||||
@@ -365,9 +367,9 @@ static void hvf_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
ops->synchronize_state = hvf_cpu_synchronize_state;
|
||||
ops->synchronize_pre_loadvm = hvf_cpu_synchronize_pre_loadvm;
|
||||
|
||||
ops->insert_breakpoint = hvf_insert_breakpoint;
|
||||
ops->remove_breakpoint = hvf_remove_breakpoint;
|
||||
ops->remove_all_breakpoints = hvf_remove_all_breakpoints;
|
||||
ops->insert_gdbstub_breakpoint = hvf_insert_gdbstub_breakpoint;
|
||||
ops->remove_gdbstub_breakpoint = hvf_remove_gdbstub_breakpoint;
|
||||
ops->remove_all_gdbstub_breakpoints = hvf_remove_all_gdbstub_breakpoints;
|
||||
ops->update_guest_debug = hvf_update_guest_debug;
|
||||
|
||||
ops->get_vcpu_stats = hvf_get_vcpu_stats;
|
||||
|
||||
@@ -107,9 +107,9 @@ static void kvm_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
|
||||
#ifdef TARGET_KVM_HAVE_GUEST_DEBUG
|
||||
ops->update_guest_debug = kvm_update_guest_debug_ops;
|
||||
ops->insert_breakpoint = kvm_insert_breakpoint;
|
||||
ops->remove_breakpoint = kvm_remove_breakpoint;
|
||||
ops->remove_all_breakpoints = kvm_remove_all_breakpoints;
|
||||
ops->insert_gdbstub_breakpoint = kvm_insert_gdbstub_breakpoint;
|
||||
ops->remove_gdbstub_breakpoint = kvm_remove_gdbstub_breakpoint;
|
||||
ops->remove_all_gdbstub_breakpoints = kvm_remove_all_gdbstub_breakpoints;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -3826,7 +3826,8 @@ int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
|
||||
return data.err;
|
||||
}
|
||||
|
||||
int kvm_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
int kvm_insert_gdbstub_breakpoint(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
struct kvm_sw_breakpoint *bp;
|
||||
int err;
|
||||
@@ -3849,7 +3850,7 @@ int kvm_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
|
||||
QTAILQ_INSERT_HEAD(&cpu->kvm_state->kvm_sw_breakpoints, bp, entry);
|
||||
} else {
|
||||
err = kvm_arch_insert_hw_breakpoint(addr, len, type);
|
||||
err = kvm_arch_insert_gdbstub_hw_breakpoint(addr, len, type);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -3864,7 +3865,8 @@ int kvm_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_remove_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
int kvm_remove_gdbstub_breakpoint(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
struct kvm_sw_breakpoint *bp;
|
||||
int err;
|
||||
@@ -3888,7 +3890,7 @@ int kvm_remove_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
QTAILQ_REMOVE(&cpu->kvm_state->kvm_sw_breakpoints, bp, entry);
|
||||
g_free(bp);
|
||||
} else {
|
||||
err = kvm_arch_remove_hw_breakpoint(addr, len, type);
|
||||
err = kvm_arch_remove_gdbstub_hw_breakpoint(addr, len, type);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
@@ -3903,7 +3905,7 @@ int kvm_remove_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void kvm_remove_all_breakpoints(CPUState *cpu)
|
||||
void kvm_remove_all_gdbstub_breakpoints(CPUState *cpu)
|
||||
{
|
||||
struct kvm_sw_breakpoint *bp, *next;
|
||||
KVMState *s = cpu->kvm_state;
|
||||
@@ -3921,7 +3923,7 @@ void kvm_remove_all_breakpoints(CPUState *cpu)
|
||||
QTAILQ_REMOVE(&s->kvm_sw_breakpoints, bp, entry);
|
||||
g_free(bp);
|
||||
}
|
||||
kvm_arch_remove_all_hw_breakpoints();
|
||||
kvm_arch_remove_all_gdbstub_hw_breakpoints();
|
||||
|
||||
CPU_FOREACH(cpu) {
|
||||
kvm_update_guest_debug(cpu, 0);
|
||||
|
||||
@@ -10,13 +10,18 @@
|
||||
#ifndef KVM_CPUS_H
|
||||
#define KVM_CPUS_H
|
||||
|
||||
#include "gdbstub/enums.h"
|
||||
|
||||
int kvm_init_vcpu(CPUState *cpu, Error **errp);
|
||||
int kvm_cpu_exec(CPUState *cpu);
|
||||
void kvm_destroy_vcpu(CPUState *cpu);
|
||||
void kvm_cpu_synchronize_post_reset(CPUState *cpu);
|
||||
void kvm_cpu_synchronize_post_init(CPUState *cpu);
|
||||
void kvm_cpu_synchronize_pre_loadvm(CPUState *cpu);
|
||||
int kvm_insert_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len);
|
||||
int kvm_remove_breakpoint(CPUState *cpu, int type, vaddr addr, vaddr len);
|
||||
void kvm_remove_all_breakpoints(CPUState *cpu);
|
||||
int kvm_insert_gdbstub_breakpoint(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len);
|
||||
int kvm_remove_gdbstub_breakpoint(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len);
|
||||
void kvm_remove_all_gdbstub_breakpoints(CPUState *cpu);
|
||||
|
||||
#endif /* KVM_CPUS_H */
|
||||
|
||||
@@ -110,7 +110,7 @@ void tcg_handle_interrupt(CPUState *cpu, int mask)
|
||||
}
|
||||
|
||||
/* Translate GDB watchpoint type to a flags value for cpu_watchpoint_* */
|
||||
static inline int xlat_gdb_type(CPUState *cpu, int gdbtype)
|
||||
static inline int xlat_gdb_type(CPUState *cpu, GdbBreakpointType gdbtype)
|
||||
{
|
||||
static const int xlat[] = {
|
||||
[GDB_WATCHPOINT_WRITE] = BP_GDB | BP_MEM_WRITE,
|
||||
@@ -126,7 +126,8 @@ static inline int xlat_gdb_type(CPUState *cpu, int gdbtype)
|
||||
return cputype;
|
||||
}
|
||||
|
||||
static int tcg_insert_breakpoint(CPUState *cs, int type, vaddr addr, vaddr len)
|
||||
static int tcg_insert_gdbstub_breakpoint(CPUState *cs, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
CPUState *cpu;
|
||||
int err = 0;
|
||||
@@ -157,7 +158,8 @@ static int tcg_insert_breakpoint(CPUState *cs, int type, vaddr addr, vaddr len)
|
||||
}
|
||||
}
|
||||
|
||||
static int tcg_remove_breakpoint(CPUState *cs, int type, vaddr addr, vaddr len)
|
||||
static int tcg_remove_gdbstub_breakpoint(CPUState *cs, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
CPUState *cpu;
|
||||
int err = 0;
|
||||
@@ -188,7 +190,7 @@ static int tcg_remove_breakpoint(CPUState *cs, int type, vaddr addr, vaddr len)
|
||||
}
|
||||
}
|
||||
|
||||
static void tcg_remove_all_breakpoints(CPUState *cpu)
|
||||
static void tcg_remove_all_gdbstub_breakpoints(CPUState *cpu)
|
||||
{
|
||||
cpu_breakpoint_remove_all(cpu, BP_GDB);
|
||||
cpu_watchpoint_remove_all(cpu, BP_GDB);
|
||||
@@ -216,9 +218,9 @@ static void tcg_accel_ops_init(AccelClass *ac)
|
||||
}
|
||||
|
||||
ops->cpu_reset_hold = tcg_cpu_reset_hold;
|
||||
ops->insert_breakpoint = tcg_insert_breakpoint;
|
||||
ops->remove_breakpoint = tcg_remove_breakpoint;
|
||||
ops->remove_all_breakpoints = tcg_remove_all_breakpoints;
|
||||
ops->insert_gdbstub_breakpoint = tcg_insert_gdbstub_breakpoint;
|
||||
ops->remove_gdbstub_breakpoint = tcg_remove_gdbstub_breakpoint;
|
||||
ops->remove_all_gdbstub_breakpoints = tcg_remove_all_gdbstub_breakpoints;
|
||||
}
|
||||
|
||||
static void tcg_accel_ops_class_init(ObjectClass *oc, const void *data)
|
||||
|
||||
@@ -627,8 +627,8 @@ int gdb_breakpoint_insert(CPUState *cs, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
const AccelOpsClass *ops = cpus_get_accel();
|
||||
if (ops->insert_breakpoint) {
|
||||
return ops->insert_breakpoint(cs, type, addr, len);
|
||||
if (ops->insert_gdbstub_breakpoint) {
|
||||
return ops->insert_gdbstub_breakpoint(cs, type, addr, len);
|
||||
}
|
||||
return -ENOSYS;
|
||||
}
|
||||
@@ -637,8 +637,8 @@ int gdb_breakpoint_remove(CPUState *cs, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len)
|
||||
{
|
||||
const AccelOpsClass *ops = cpus_get_accel();
|
||||
if (ops->remove_breakpoint) {
|
||||
return ops->remove_breakpoint(cs, type, addr, len);
|
||||
if (ops->remove_gdbstub_breakpoint) {
|
||||
return ops->remove_gdbstub_breakpoint(cs, type, addr, len);
|
||||
}
|
||||
return -ENOSYS;
|
||||
}
|
||||
@@ -646,8 +646,8 @@ int gdb_breakpoint_remove(CPUState *cs, GdbBreakpointType type,
|
||||
void gdb_breakpoint_remove_all(CPUState *cs)
|
||||
{
|
||||
const AccelOpsClass *ops = cpus_get_accel();
|
||||
if (ops->remove_all_breakpoints) {
|
||||
ops->remove_all_breakpoints(cs);
|
||||
if (ops->remove_all_gdbstub_breakpoints) {
|
||||
ops->remove_all_gdbstub_breakpoints(cs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "qemu/accel.h"
|
||||
#include "exec/vaddr.h"
|
||||
#include "qom/object.h"
|
||||
#include "gdbstub/enums.h"
|
||||
|
||||
#define ACCEL_OPS_SUFFIX "-ops"
|
||||
#define TYPE_ACCEL_OPS "accel" ACCEL_OPS_SUFFIX
|
||||
@@ -85,9 +86,11 @@ struct AccelOpsClass {
|
||||
|
||||
/* gdbstub hooks */
|
||||
int (*update_guest_debug)(CPUState *cpu);
|
||||
int (*insert_breakpoint)(CPUState *cpu, int type, vaddr addr, vaddr len);
|
||||
int (*remove_breakpoint)(CPUState *cpu, int type, vaddr addr, vaddr len);
|
||||
void (*remove_all_breakpoints)(CPUState *cpu);
|
||||
int (*insert_gdbstub_breakpoint)(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len);
|
||||
int (*remove_gdbstub_breakpoint)(CPUState *cpu, GdbBreakpointType type,
|
||||
vaddr addr, vaddr len);
|
||||
void (*remove_all_gdbstub_breakpoints)(CPUState *cpu);
|
||||
};
|
||||
|
||||
void generic_handle_interrupt(CPUState *cpu, int mask);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include "qemu/queue.h"
|
||||
#include "exec/vaddr.h"
|
||||
#include "gdbstub/enums.h"
|
||||
#include "qom/object.h"
|
||||
#include "accel/accel-ops.h"
|
||||
|
||||
@@ -91,9 +92,11 @@ int hvf_sw_breakpoints_active(CPUState *cpu);
|
||||
|
||||
int hvf_arch_insert_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp);
|
||||
int hvf_arch_remove_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp);
|
||||
int hvf_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type);
|
||||
int hvf_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type);
|
||||
void hvf_arch_remove_all_hw_breakpoints(void);
|
||||
int hvf_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type);
|
||||
int hvf_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type);
|
||||
void hvf_arch_remove_all_gdbstub_hw_breakpoints(void);
|
||||
|
||||
/*
|
||||
* hvf_update_guest_debug:
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#define QEMU_KVM_H
|
||||
|
||||
#include "exec/memattrs.h"
|
||||
#include "gdbstub/enums.h"
|
||||
#include "qemu/accel.h"
|
||||
#include "accel/accel-route.h"
|
||||
#include "qom/object.h"
|
||||
@@ -412,9 +413,11 @@ int kvm_arch_insert_sw_breakpoint(CPUState *cpu,
|
||||
struct kvm_sw_breakpoint *bp);
|
||||
int kvm_arch_remove_sw_breakpoint(CPUState *cpu,
|
||||
struct kvm_sw_breakpoint *bp);
|
||||
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type);
|
||||
int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type);
|
||||
void kvm_arch_remove_all_hw_breakpoints(void);
|
||||
int kvm_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type);
|
||||
int kvm_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type);
|
||||
void kvm_arch_remove_all_gdbstub_hw_breakpoints(void);
|
||||
|
||||
void kvm_arch_update_guest_debug(CPUState *cpu, struct kvm_guest_debug *dbg);
|
||||
|
||||
|
||||
@@ -2726,7 +2726,8 @@ int hvf_arch_remove_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hvf_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int hvf_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_HW:
|
||||
@@ -2734,13 +2735,14 @@ int hvf_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
case GDB_WATCHPOINT_READ:
|
||||
case GDB_WATCHPOINT_WRITE:
|
||||
case GDB_WATCHPOINT_ACCESS:
|
||||
return insert_hw_watchpoint(addr, len, type);
|
||||
return insert_gdbstub_hw_watchpoint(addr, len, type);
|
||||
default:
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
int hvf_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int hvf_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_HW:
|
||||
@@ -2748,13 +2750,13 @@ int hvf_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
case GDB_WATCHPOINT_READ:
|
||||
case GDB_WATCHPOINT_WRITE:
|
||||
case GDB_WATCHPOINT_ACCESS:
|
||||
return delete_hw_watchpoint(addr, len, type);
|
||||
return delete_gdbstub_hw_watchpoint(addr, len, type);
|
||||
default:
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
void hvf_arch_remove_all_hw_breakpoints(void)
|
||||
void hvf_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
if (cur_hw_wps > 0) {
|
||||
g_array_remove_range(hw_watchpoints, 0, cur_hw_wps);
|
||||
|
||||
@@ -94,7 +94,7 @@ int delete_hw_breakpoint(vaddr pc)
|
||||
}
|
||||
|
||||
/**
|
||||
* insert_hw_watchpoint()
|
||||
* insert_gdbstub_hw_watchpoint()
|
||||
* @addr: address of watch point
|
||||
* @len: size of area
|
||||
* @type: type of watch point
|
||||
@@ -125,7 +125,7 @@ int delete_hw_breakpoint(vaddr pc)
|
||||
* need to ensure you mask the address as required and set BAS=0xff
|
||||
*/
|
||||
|
||||
int insert_hw_watchpoint(vaddr addr, vaddr len, int type)
|
||||
int insert_gdbstub_hw_watchpoint(vaddr addr, vaddr len, GdbBreakpointType type)
|
||||
{
|
||||
HWWatchpoint wp = {
|
||||
.wcr = R_DBGWCR_E_MASK, /* E=1, enable */
|
||||
@@ -208,13 +208,13 @@ bool check_watchpoint_in_range(int i, vaddr addr)
|
||||
}
|
||||
|
||||
/**
|
||||
* delete_hw_watchpoint()
|
||||
* delete_gdbstub_hw_watchpoint()
|
||||
* @addr: address of breakpoint
|
||||
*
|
||||
* Delete a breakpoint and shuffle any above down
|
||||
*/
|
||||
|
||||
int delete_hw_watchpoint(vaddr addr, vaddr len, int type)
|
||||
int delete_gdbstub_hw_watchpoint(vaddr addr, vaddr len, GdbBreakpointType type)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < cur_hw_wps; i++) {
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "exec/vaddr.h"
|
||||
#include "exec/breakpoint.h"
|
||||
#include "exec/memop.h"
|
||||
#include "gdbstub/enums.h"
|
||||
#ifdef CONFIG_TCG
|
||||
#include "accel/tcg/tb-cpu-state.h"
|
||||
#include "tcg/tcg-gvec-desc.h"
|
||||
@@ -1968,8 +1969,8 @@ int delete_hw_breakpoint(vaddr pc);
|
||||
|
||||
bool check_watchpoint_in_range(int i, vaddr addr);
|
||||
CPUWatchpoint *find_hw_watchpoint(CPUState *cpu, vaddr addr);
|
||||
int insert_hw_watchpoint(vaddr addr, vaddr len, int type);
|
||||
int delete_hw_watchpoint(vaddr addr, vaddr len, int type);
|
||||
int insert_gdbstub_hw_watchpoint(vaddr addr, vaddr len, GdbBreakpointType type);
|
||||
int delete_gdbstub_hw_watchpoint(vaddr addr, vaddr len, GdbBreakpointType type);
|
||||
|
||||
/* Return the current value of the system counter in ticks */
|
||||
uint64_t gt_get_countervalue(CPUARMState *env);
|
||||
|
||||
@@ -1784,7 +1784,8 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
|
||||
"Eager Page Split chunk size for hugepages. (default: 0, disabled)");
|
||||
}
|
||||
|
||||
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_HW:
|
||||
@@ -1793,13 +1794,14 @@ int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
case GDB_WATCHPOINT_READ:
|
||||
case GDB_WATCHPOINT_WRITE:
|
||||
case GDB_WATCHPOINT_ACCESS:
|
||||
return insert_hw_watchpoint(addr, len, type);
|
||||
return insert_gdbstub_hw_watchpoint(addr, len, type);
|
||||
default:
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_HW:
|
||||
@@ -1807,13 +1809,13 @@ int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
case GDB_WATCHPOINT_READ:
|
||||
case GDB_WATCHPOINT_WRITE:
|
||||
case GDB_WATCHPOINT_ACCESS:
|
||||
return delete_hw_watchpoint(addr, len, type);
|
||||
return delete_gdbstub_hw_watchpoint(addr, len, type);
|
||||
default:
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
void kvm_arch_remove_all_hw_breakpoints(void)
|
||||
void kvm_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
if (cur_hw_wps > 0) {
|
||||
g_array_remove_range(hw_watchpoints, 0, cur_hw_wps);
|
||||
|
||||
@@ -1049,17 +1049,19 @@ int hvf_arch_remove_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp)
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
int hvf_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int hvf_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
int hvf_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int hvf_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
void hvf_arch_remove_all_hw_breakpoints(void)
|
||||
void hvf_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -6159,12 +6159,12 @@ int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp)
|
||||
static struct {
|
||||
target_ulong addr;
|
||||
int len;
|
||||
int type;
|
||||
GdbBreakpointType type;
|
||||
} hw_breakpoint[4];
|
||||
|
||||
static int nb_hw_breakpoint;
|
||||
|
||||
static int find_hw_breakpoint(target_ulong addr, int len, int type)
|
||||
static int find_hw_breakpoint(target_ulong addr, int len, GdbBreakpointType type)
|
||||
{
|
||||
int n;
|
||||
|
||||
@@ -6177,7 +6177,8 @@ static int find_hw_breakpoint(target_ulong addr, int len, int type)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_HW:
|
||||
@@ -6217,7 +6218,8 @@ int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
int n;
|
||||
|
||||
@@ -6231,7 +6233,7 @@ int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void kvm_arch_remove_all_hw_breakpoints(void)
|
||||
void kvm_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
nb_hw_breakpoint = 0;
|
||||
}
|
||||
|
||||
@@ -1418,17 +1418,19 @@ int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
void kvm_arch_remove_all_hw_breakpoints(void)
|
||||
void kvm_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -455,7 +455,7 @@ unsigned long kvm_arch_vcpu_id(CPUState *cpu)
|
||||
|
||||
static struct HWBreakpoint {
|
||||
target_ulong addr;
|
||||
int type;
|
||||
GdbBreakpointType type;
|
||||
} hw_debug_points[MAX_HW_BKPTS];
|
||||
|
||||
static CPUWatchpoint hw_watchpoint;
|
||||
@@ -1412,7 +1412,7 @@ int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int find_hw_breakpoint(target_ulong addr, int type)
|
||||
static int find_hw_breakpoint(target_ulong addr, GdbBreakpointType type)
|
||||
{
|
||||
int n;
|
||||
|
||||
@@ -1454,7 +1454,8 @@ static int find_hw_watchpoint(target_ulong addr, int *flag)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
const unsigned breakpoint_index = nb_hw_breakpoint + nb_hw_watchpoint;
|
||||
if (breakpoint_index >= ARRAY_SIZE(hw_debug_points)) {
|
||||
@@ -1498,7 +1499,8 @@ int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
int n;
|
||||
|
||||
@@ -1526,7 +1528,7 @@ int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void kvm_arch_remove_all_hw_breakpoints(void)
|
||||
void kvm_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
nb_hw_breakpoint = nb_hw_watchpoint = 0;
|
||||
}
|
||||
|
||||
@@ -2215,19 +2215,21 @@ int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
/* TODO; To be implemented later. */
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
/* TODO; To be implemented later. */
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
void kvm_arch_remove_all_hw_breakpoints(void)
|
||||
void kvm_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
/* TODO; To be implemented later. */
|
||||
}
|
||||
|
||||
@@ -907,7 +907,8 @@ static int insert_hw_breakpoint(vaddr addr, int len, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_insert_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_HW:
|
||||
@@ -925,7 +926,8 @@ int kvm_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
return insert_hw_breakpoint(addr, len, type);
|
||||
}
|
||||
|
||||
int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
int kvm_arch_remove_gdbstub_hw_breakpoint(vaddr addr, vaddr len,
|
||||
GdbBreakpointType type)
|
||||
{
|
||||
int size;
|
||||
struct kvm_hw_breakpoint *bp = find_hw_breakpoint(addr, len, type);
|
||||
@@ -954,7 +956,7 @@ int kvm_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void kvm_arch_remove_all_hw_breakpoints(void)
|
||||
void kvm_arch_remove_all_gdbstub_hw_breakpoints(void)
|
||||
{
|
||||
nb_hw_breakpoints = 0;
|
||||
g_free(hw_breakpoints);
|
||||
|
||||
Reference in New Issue
Block a user