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" 13*32cad1ffSPhilippe Mathieu-Daudé #include "system/hvf.h" 14*32cad1ffSPhilippe Mathieu-Daudé #include "system/hvf_int.h" 15d57bc3c1SAlexander Graf 16a3c67dfcSPhil Dennis-Jordan const char *hvf_return_string(hv_return_t ret) 17a3c67dfcSPhil Dennis-Jordan { 18a3c67dfcSPhil Dennis-Jordan switch (ret) { 19a3c67dfcSPhil Dennis-Jordan case HV_SUCCESS: return "HV_SUCCESS"; 20a3c67dfcSPhil Dennis-Jordan case HV_ERROR: return "HV_ERROR"; 21a3c67dfcSPhil Dennis-Jordan case HV_BUSY: return "HV_BUSY"; 22a3c67dfcSPhil Dennis-Jordan case HV_BAD_ARGUMENT: return "HV_BAD_ARGUMENT"; 23a3c67dfcSPhil Dennis-Jordan case HV_NO_RESOURCES: return "HV_NO_RESOURCES"; 24a3c67dfcSPhil Dennis-Jordan case HV_NO_DEVICE: return "HV_NO_DEVICE"; 25a3c67dfcSPhil Dennis-Jordan case HV_UNSUPPORTED: return "HV_UNSUPPORTED"; 26a3c67dfcSPhil Dennis-Jordan case HV_DENIED: return "HV_DENIED"; 27a3c67dfcSPhil Dennis-Jordan default: return "[unknown hv_return value]"; 28a3c67dfcSPhil Dennis-Jordan } 29a3c67dfcSPhil Dennis-Jordan } 30a3c67dfcSPhil Dennis-Jordan 31a3c67dfcSPhil Dennis-Jordan void assert_hvf_ok_impl(hv_return_t ret, const char *file, unsigned int line, 32a3c67dfcSPhil Dennis-Jordan const char *exp) 33d57bc3c1SAlexander Graf { 34d57bc3c1SAlexander Graf if (ret == HV_SUCCESS) { 35d57bc3c1SAlexander Graf return; 36d57bc3c1SAlexander Graf } 37d57bc3c1SAlexander Graf 38a3c67dfcSPhil Dennis-Jordan error_report("Error: %s = %s (0x%x, at %s:%u)", 39a3c67dfcSPhil Dennis-Jordan exp, hvf_return_string(ret), ret, file, line); 40d57bc3c1SAlexander Graf 41d57bc3c1SAlexander Graf abort(); 42d57bc3c1SAlexander Graf } 43f4152040SFrancesco Cagnin 44fcfe7616SAnton Johansson struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu, vaddr pc) 45f4152040SFrancesco Cagnin { 46f4152040SFrancesco Cagnin struct hvf_sw_breakpoint *bp; 47f4152040SFrancesco Cagnin 48f4152040SFrancesco Cagnin QTAILQ_FOREACH(bp, &hvf_state->hvf_sw_breakpoints, entry) { 49f4152040SFrancesco Cagnin if (bp->pc == pc) { 50f4152040SFrancesco Cagnin return bp; 51f4152040SFrancesco Cagnin } 52f4152040SFrancesco Cagnin } 53f4152040SFrancesco Cagnin return NULL; 54f4152040SFrancesco Cagnin } 55f4152040SFrancesco Cagnin 56f4152040SFrancesco Cagnin int hvf_sw_breakpoints_active(CPUState *cpu) 57f4152040SFrancesco Cagnin { 58f4152040SFrancesco Cagnin return !QTAILQ_EMPTY(&hvf_state->hvf_sw_breakpoints); 59f4152040SFrancesco Cagnin } 60eb2edc42SFrancesco Cagnin 61eb2edc42SFrancesco Cagnin int hvf_update_guest_debug(CPUState *cpu) 62eb2edc42SFrancesco Cagnin { 63eb2edc42SFrancesco Cagnin hvf_arch_update_guest_debug(cpu); 64eb2edc42SFrancesco Cagnin return 0; 65eb2edc42SFrancesco Cagnin } 66