55b5b8e928
Both insert/remove_breakpoint() handlers are used in system and user emulation. We can not use the 'hwaddr' type on user emulation, we have to use 'vaddr' which is defined as "wide enough to contain any #target_ulong virtual address". gdbstub.c doesn't require to include "exec/hwaddr.h" anymore. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-Id: <20221216215519.5522-4-philmd@linaro.org>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
/*
|
|
* gdb server stub - softmmu specific bits
|
|
*
|
|
* Debug integration depends on support from the individual
|
|
* accelerators so most of this involves calling the ops helpers.
|
|
*
|
|
* Copyright (c) 2022 Linaro Ltd
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#include "qemu/osdep.h"
|
|
#include "exec/gdbstub.h"
|
|
#include "sysemu/cpus.h"
|
|
#include "internals.h"
|
|
|
|
bool gdb_supports_guest_debug(void)
|
|
{
|
|
const AccelOpsClass *ops = cpus_get_accel();
|
|
if (ops->supports_guest_debug) {
|
|
return ops->supports_guest_debug();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
int gdb_breakpoint_insert(CPUState *cs, int type, vaddr addr, vaddr len)
|
|
{
|
|
const AccelOpsClass *ops = cpus_get_accel();
|
|
if (ops->insert_breakpoint) {
|
|
return ops->insert_breakpoint(cs, type, addr, len);
|
|
}
|
|
return -ENOSYS;
|
|
}
|
|
|
|
int gdb_breakpoint_remove(CPUState *cs, int type, vaddr addr, vaddr len)
|
|
{
|
|
const AccelOpsClass *ops = cpus_get_accel();
|
|
if (ops->remove_breakpoint) {
|
|
return ops->remove_breakpoint(cs, type, addr, len);
|
|
}
|
|
return -ENOSYS;
|
|
}
|
|
|
|
void gdb_breakpoint_remove_all(CPUState *cs)
|
|
{
|
|
const AccelOpsClass *ops = cpus_get_accel();
|
|
if (ops->remove_all_breakpoints) {
|
|
ops->remove_all_breakpoints(cs);
|
|
}
|
|
}
|