DBGFCpu.cpp revision 4bfa7b58e362a1bca0628643c352c137900bf01a
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/* $Id$ */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/** @file
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * DBGF - Debugger Facility, CPU State Accessors.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/*
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Copyright (C) 2009 Oracle Corporation
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync *
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * available from http://www.virtualbox.org. This file is free software;
1c43cacd545be15afb64413d49eccbecff95e759vboxsync * you can redistribute it and/or modify it under the terms of the GNU
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * General Public License (GPL) as published by the Free Software
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/*******************************************************************************
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* Header Files *
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync*******************************************************************************/
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#define LOG_GROUP LOG_GROUP_DBGF
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <VBox/vmm/dbgf.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <VBox/vmm/cpum.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include "DBGFInternal.h"
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <VBox/vmm/vm.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <VBox/err.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <VBox/log.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <VBox/param.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#include <iprt/assert.h>
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/**
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Wrapper around CPUMGetGuestMode.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync *
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * @returns VINF_SUCCESS.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * @param pVM Pointer to the VM.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * @param idCpu The current CPU ID.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * @param penmMode Where to return the mode.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncstatic DECLCALLBACK(int) dbgfR3CpuGetMode(PVM pVM, VMCPUID idCpu, CPUMMODE *penmMode)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync{
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync Assert(idCpu == VMMGetCpuId(pVM));
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync *penmMode = CPUMGetGuestMode(pVCpu);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return VINF_SUCCESS;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/**
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Get the current CPU mode.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync *
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * @returns The CPU mode on success, CPUMMODE_INVALID on failure.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * @param pVM Pointer to the VM.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * @param idCpu The target CPU ID.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncVMMR3DECL(CPUMMODE) DBGFR3CpuGetMode(PVM pVM, VMCPUID idCpu)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync{
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync VM_ASSERT_VALID_EXT_RETURN(pVM, CPUMMODE_INVALID);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync AssertReturn(idCpu < pVM->cCpus, CPUMMODE_INVALID);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync CPUMMODE enmMode;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync int rc = VMR3ReqPriorityCallWait(pVM, idCpu, (PFNRT)dbgfR3CpuGetMode, 3, pVM, idCpu, &enmMode);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync if (RT_FAILURE(rc))
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return CPUMMODE_INVALID;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync return enmMode;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync