xref: /qemu/accel/hvf/hvf-all.c (revision f9bb7e53a341d08fd4ec8d7e810ebfd4f6f936bd)
1d57bc3c1SAlexander Graf /*
2d57bc3c1SAlexander Graf  * QEMU Hypervisor.framework support
3d57bc3c1SAlexander Graf  *
4d57bc3c1SAlexander Graf  * This work is licensed under the terms of the GNU GPL, version 2.  See
5d57bc3c1SAlexander Graf  * the COPYING file in the top-level directory.
6d57bc3c1SAlexander Graf  *
7d57bc3c1SAlexander Graf  * Contributions after 2012-01-13 are licensed under the terms of the
8d57bc3c1SAlexander Graf  * GNU GPL, version 2 or (at your option) any later version.
9d57bc3c1SAlexander Graf  */
10d57bc3c1SAlexander Graf 
11d57bc3c1SAlexander Graf #include "qemu/osdep.h"
12d57bc3c1SAlexander Graf #include "qemu/error-report.h"
1332cad1ffSPhilippe Mathieu-Daudé #include "system/hvf.h"
1432cad1ffSPhilippe Mathieu-Daudé #include "system/hvf_int.h"
15*b3b3ad22SPhilippe Mathieu-Daudé #include "hw/core/cpu.h"
16d57bc3c1SAlexander Graf 
hvf_return_string(hv_return_t ret)17a3c67dfcSPhil Dennis-Jordan const char *hvf_return_string(hv_return_t ret)
18a3c67dfcSPhil Dennis-Jordan {
19a3c67dfcSPhil Dennis-Jordan     switch (ret) {
20a3c67dfcSPhil Dennis-Jordan     case HV_SUCCESS:      return "HV_SUCCESS";
21a3c67dfcSPhil Dennis-Jordan     case HV_ERROR:        return "HV_ERROR";
22a3c67dfcSPhil Dennis-Jordan     case HV_BUSY:         return "HV_BUSY";
23a3c67dfcSPhil Dennis-Jordan     case HV_BAD_ARGUMENT: return "HV_BAD_ARGUMENT";
24a3c67dfcSPhil Dennis-Jordan     case HV_NO_RESOURCES: return "HV_NO_RESOURCES";
25a3c67dfcSPhil Dennis-Jordan     case HV_NO_DEVICE:    return "HV_NO_DEVICE";
26a3c67dfcSPhil Dennis-Jordan     case HV_UNSUPPORTED:  return "HV_UNSUPPORTED";
27a3c67dfcSPhil Dennis-Jordan     case HV_DENIED:       return "HV_DENIED";
28a3c67dfcSPhil Dennis-Jordan     default:              return "[unknown hv_return value]";
29a3c67dfcSPhil Dennis-Jordan     }
30a3c67dfcSPhil Dennis-Jordan }
31a3c67dfcSPhil Dennis-Jordan 
assert_hvf_ok_impl(hv_return_t ret,const char * file,unsigned int line,const char * exp)32a3c67dfcSPhil Dennis-Jordan void assert_hvf_ok_impl(hv_return_t ret, const char *file, unsigned int line,
33a3c67dfcSPhil Dennis-Jordan                         const char *exp)
34d57bc3c1SAlexander Graf {
35d57bc3c1SAlexander Graf     if (ret == HV_SUCCESS) {
36d57bc3c1SAlexander Graf         return;
37d57bc3c1SAlexander Graf     }
38d57bc3c1SAlexander Graf 
39a3c67dfcSPhil Dennis-Jordan     error_report("Error: %s = %s (0x%x, at %s:%u)",
40a3c67dfcSPhil Dennis-Jordan         exp, hvf_return_string(ret), ret, file, line);
41d57bc3c1SAlexander Graf 
42d57bc3c1SAlexander Graf     abort();
43d57bc3c1SAlexander Graf }
44f4152040SFrancesco Cagnin 
hvf_find_sw_breakpoint(CPUState * cpu,vaddr pc)45fcfe7616SAnton Johansson struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu, vaddr pc)
46f4152040SFrancesco Cagnin {
47f4152040SFrancesco Cagnin     struct hvf_sw_breakpoint *bp;
48f4152040SFrancesco Cagnin 
49f4152040SFrancesco Cagnin     QTAILQ_FOREACH(bp, &hvf_state->hvf_sw_breakpoints, entry) {
50f4152040SFrancesco Cagnin         if (bp->pc == pc) {
51f4152040SFrancesco Cagnin             return bp;
52f4152040SFrancesco Cagnin         }
53f4152040SFrancesco Cagnin     }
54f4152040SFrancesco Cagnin     return NULL;
55f4152040SFrancesco Cagnin }
56f4152040SFrancesco Cagnin 
hvf_sw_breakpoints_active(CPUState * cpu)57f4152040SFrancesco Cagnin int hvf_sw_breakpoints_active(CPUState *cpu)
58f4152040SFrancesco Cagnin {
59f4152040SFrancesco Cagnin     return !QTAILQ_EMPTY(&hvf_state->hvf_sw_breakpoints);
60f4152040SFrancesco Cagnin }
61eb2edc42SFrancesco Cagnin 
do_hvf_update_guest_debug(CPUState * cpu,run_on_cpu_data arg)62d5bd8d82SMads Ynddal static void do_hvf_update_guest_debug(CPUState *cpu, run_on_cpu_data arg)
63eb2edc42SFrancesco Cagnin {
64eb2edc42SFrancesco Cagnin     hvf_arch_update_guest_debug(cpu);
65d5bd8d82SMads Ynddal }
66d5bd8d82SMads Ynddal 
hvf_update_guest_debug(CPUState * cpu)67d5bd8d82SMads Ynddal int hvf_update_guest_debug(CPUState *cpu)
68d5bd8d82SMads Ynddal {
69d5bd8d82SMads Ynddal     run_on_cpu(cpu, do_hvf_update_guest_debug, RUN_ON_CPU_NULL);
70eb2edc42SFrancesco Cagnin     return 0;
71eb2edc42SFrancesco Cagnin }
72