mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-26 20:03:54 -06:00

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>
62 lines
1.3 KiB
C
62 lines
1.3 KiB
C
/*
|
|
* 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);
|
|
}
|