mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 23:25:48 +00:00
gdbstub: move breakpoint logic to accel ops
As HW virtualization requires specific support to handle breakpoints lets push out special casing out of the core gdbstub code and into AccelOpsClass. This will make it easier to add other accelerator support and reduces some of the stub shenanigans. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Mads Ynddal <mads@ynddal.dk> Message-Id: <20220929114231.583801-45-alex.bennee@linaro.org>
This commit is contained in:
62
gdbstub/user.c
Normal file
62
gdbstub/user.c
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* gdbstub user-mode helper routines.
|
||||
*
|
||||
* We know for user-mode we are using TCG so we can call stuff directly.
|
||||
*
|
||||
* Copyright (c) 2022 Linaro Ltd
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "exec/hwaddr.h"
|
||||
#include "exec/gdbstub.h"
|
||||
#include "hw/core/cpu.h"
|
||||
#include "internals.h"
|
||||
|
||||
int gdb_breakpoint_insert(CPUState *cs, int type, hwaddr addr, hwaddr len)
|
||||
{
|
||||
CPUState *cpu;
|
||||
int err = 0;
|
||||
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_SW:
|
||||
case GDB_BREAKPOINT_HW:
|
||||
CPU_FOREACH(cpu) {
|
||||
err = cpu_breakpoint_insert(cpu, addr, BP_GDB, NULL);
|
||||
if (err) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return err;
|
||||
default:
|
||||
/* user-mode doesn't support watchpoints */
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
int gdb_breakpoint_remove(CPUState *cs, int type, hwaddr addr, hwaddr len)
|
||||
{
|
||||
CPUState *cpu;
|
||||
int err = 0;
|
||||
|
||||
switch (type) {
|
||||
case GDB_BREAKPOINT_SW:
|
||||
case GDB_BREAKPOINT_HW:
|
||||
CPU_FOREACH(cpu) {
|
||||
err = cpu_breakpoint_remove(cpu, addr, BP_GDB);
|
||||
if (err) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return err;
|
||||
default:
|
||||
/* user-mode doesn't support watchpoints */
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
void gdb_breakpoint_remove_all(CPUState *cs)
|
||||
{
|
||||
cpu_breakpoint_remove_all(cs, BP_GDB);
|
||||
}
|
Reference in New Issue
Block a user