mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 23:22:12 -06:00

Since commit d5bd8d8267
("hvf: only update sysreg from owning
thread") hvf-all.c accesses the run_on_cpu_data type and calls
run_on_cpu(), both defined in the "hw/core/cpu.h" header.
Fortunately, it is indirectly included via:
"system/hvf.h"
-> "target/arm/cpu.h"
-> "target/arm/cpu-qom.h"
-> "hw/core/cpu.h"
"system/hvf.h" however doesn't need "target/arm/cpu.h" and we
want to remove it there. In order to do that we first need to
include it in hvf-all.c, otherwise we get:
../accel/hvf/hvf-all.c:61:54: error: unknown type name 'run_on_cpu_data'
61 | static void do_hvf_update_guest_debug(CPUState *cpu, run_on_cpu_data arg)
| ^
../accel/hvf/hvf-all.c:68:5: error: call to undeclared function 'run_on_cpu'
68 | run_on_cpu(cpu, do_hvf_update_guest_debug, RUN_ON_CPU_NULL);
| ^
../accel/hvf/hvf-all.c:68:48: error: use of undeclared identifier 'RUN_ON_CPU_NULL'
68 | run_on_cpu(cpu, do_hvf_update_guest_debug, RUN_ON_CPU_NULL);
| ^
Cc: Mads Ynddal <m.ynddal@samsung.com>
Reported-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Mads Ynddal <mads@ynddal.dk>
Message-Id: <20250507204401.45379-1-philmd@linaro.org>
71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
/*
|
|
* QEMU Hypervisor.framework support
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
|
* the COPYING file in the top-level directory.
|
|
*
|
|
* Contributions after 2012-01-13 are licensed under the terms of the
|
|
* GNU GPL, version 2 or (at your option) any later version.
|
|
*/
|
|
|
|
#include "qemu/osdep.h"
|
|
#include "qemu/error-report.h"
|
|
#include "system/hvf.h"
|
|
#include "system/hvf_int.h"
|
|
#include "hw/core/cpu.h"
|
|
|
|
const char *hvf_return_string(hv_return_t ret)
|
|
{
|
|
switch (ret) {
|
|
case HV_SUCCESS: return "HV_SUCCESS";
|
|
case HV_ERROR: return "HV_ERROR";
|
|
case HV_BUSY: return "HV_BUSY";
|
|
case HV_BAD_ARGUMENT: return "HV_BAD_ARGUMENT";
|
|
case HV_NO_RESOURCES: return "HV_NO_RESOURCES";
|
|
case HV_NO_DEVICE: return "HV_NO_DEVICE";
|
|
case HV_UNSUPPORTED: return "HV_UNSUPPORTED";
|
|
case HV_DENIED: return "HV_DENIED";
|
|
default: return "[unknown hv_return value]";
|
|
}
|
|
}
|
|
|
|
void assert_hvf_ok_impl(hv_return_t ret, const char *file, unsigned int line,
|
|
const char *exp)
|
|
{
|
|
if (ret == HV_SUCCESS) {
|
|
return;
|
|
}
|
|
|
|
error_report("Error: %s = %s (0x%x, at %s:%u)",
|
|
exp, hvf_return_string(ret), ret, file, line);
|
|
|
|
abort();
|
|
}
|
|
|
|
struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu, vaddr pc)
|
|
{
|
|
struct hvf_sw_breakpoint *bp;
|
|
|
|
QTAILQ_FOREACH(bp, &hvf_state->hvf_sw_breakpoints, entry) {
|
|
if (bp->pc == pc) {
|
|
return bp;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
int hvf_sw_breakpoints_active(CPUState *cpu)
|
|
{
|
|
return !QTAILQ_EMPTY(&hvf_state->hvf_sw_breakpoints);
|
|
}
|
|
|
|
static void do_hvf_update_guest_debug(CPUState *cpu, run_on_cpu_data arg)
|
|
{
|
|
hvf_arch_update_guest_debug(cpu);
|
|
}
|
|
|
|
int hvf_update_guest_debug(CPUState *cpu)
|
|
{
|
|
run_on_cpu(cpu, do_hvf_update_guest_debug, RUN_ON_CPU_NULL);
|
|
return 0;
|
|
}
|