e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync/* $Id$ */
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync/** @file
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * EM - Execution Monitor / Manager, Debugger Related Bits.
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync */
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync/*
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * Copyright (C) 2006-2013 Oracle Corporation
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync *
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * available from http://www.virtualbox.org. This file is free software;
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * you can redistribute it and/or modify it under the terms of the GNU
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * General Public License (GPL) as published by the Free Software
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync */
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync/*******************************************************************************
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync* Header Files *
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync*******************************************************************************/
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync#define LOG_GROUP LOG_GROUP_EM
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync#include <VBox/vmm/em.h>
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync#include <VBox/dbg.h>
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync#include "EMInternal.h"
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync/** @callback_method_impl{FNDBGCCMD,
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync * Implements the '.alliem' command. }
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync */
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsyncstatic DECLCALLBACK(int) enmR3DbgCmdAllIem(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync{
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync int rc;
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync bool f;
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync if (cArgs == 0)
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync {
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync rc = EMR3QueryExecutionPolicy(pUVM, EMEXECPOLICY_IEM_ALL, &f);
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync if (RT_FAILURE(rc))
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "EMR3QueryExecutionPolicy(,EMEXECPOLICY_IEM_ALL,");
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync DBGCCmdHlpPrintf(pCmdHlp, f ? "alliem: enabled\n" : "alliem: disabled\n");
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync }
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync else
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync {
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync rc = DBGCCmdHlpVarToBool(pCmdHlp, &paArgs[0], &f);
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync if (RT_FAILURE(rc))
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "DBGCCmdHlpVarToBool");
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync rc = EMR3SetExecutionPolicy(pUVM, EMEXECPOLICY_IEM_ALL, f);
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync if (RT_FAILURE(rc))
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "EMR3SetExecutionPolicy(,EMEXECPOLICY_IEM_ALL,%RTbool)", f);
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync }
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync return VINF_SUCCESS;
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync}
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync/** Describes a optional boolean argument. */
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsyncstatic DBGCVARDESC const g_BoolArg = { 0, 1, DBGCVAR_CAT_ANY, 0, "boolean", "Boolean value." };
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync/** Commands. */
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsyncstatic DBGCCMD const g_aCmds[] =
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync{
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync {
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync "alliem", 0, 1, &g_BoolArg, 1, 0, enmR3DbgCmdAllIem, "[boolean]",
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync "Enables or disabled executing ALL code in IEM, if no arguments are given it displays the current status."
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync },
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync};
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsyncint emR3InitDbg(PVM pVM)
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync{
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync int rc = DBGCRegisterCommands(&g_aCmds[0], RT_ELEMENTS(g_aCmds));
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync AssertLogRelRC(rc);
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync return rc;
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync}
e79fc6c1566bf913db2ab67366af04053ea8aaa1vboxsync