DBGFLog.cpp revision 8e8406d8c937d53c0f1b3667312f743617d8597a
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/* $Id$ */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/** @file
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * DBGF - Debugger Facility, Log Manager.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/*
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync *
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * available from http://www.virtualbox.org. This file is free software;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * you can redistribute it and/or modify it under the terms of the GNU
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync *
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * additional information or have any questions.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/*******************************************************************************
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync* Header Files *
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync*******************************************************************************/
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#include <VBox/vmapi.h>
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#include <VBox/vmm.h>
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#include <VBox/dbgf.h>
da957c069c2a3c582fe265ff88170ce4c42b499dvboxsync#include <VBox/log.h>
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync#include <VBox/err.h>
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync#include <iprt/assert.h>
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/*******************************************************************************
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync* Internal Functions *
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync*******************************************************************************/
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsyncstatic DECLCALLBACK(int) dbgfR3LogModifyGroups(PVM pVM, const char *pszGroupSettings);
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsyncstatic DECLCALLBACK(int) dbgfR3LogModifyFlags(PVM pVM, const char *pszFlagSettings);
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsyncstatic DECLCALLBACK(int) dbgfR3LogModifyDestinations(PVM pVM, const char *pszDestSettings);
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/**
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * Changes the logger group settings.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync *
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @returns VBox status code.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @param pVM The VM handle.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @param pszGroupSettings The group settings string. (VBOX_LOG)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsyncVMMR3DECL(int) DBGFR3LogModifyGroups(PVM pVM, const char *pszGroupSettings)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync{
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync AssertReturn(VALID_PTR(pVM), VERR_INVALID_POINTER);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync AssertReturn(VALID_PTR(pszGroupSettings), VERR_INVALID_POINTER);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync PVMREQ pReq;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync int rc = VMR3ReqCall(pVM, VMCPUID_ANY, &pReq, RT_INDEFINITE_WAIT, (PFNRT)dbgfR3LogModifyGroups, 2, pVM, pszGroupSettings);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (RT_SUCCESS(rc))
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync rc = pReq->iStatus;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync VMR3ReqFree(pReq);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return rc;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync}
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync/**
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync * EMT worker for DBGFR3LogModifyGroups.
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync *
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync * @returns VBox status code.
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync * @param pVM The VM handle.
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync * @param pszGroupSettings The group settings string. (VBOX_LOG)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync */
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsyncstatic DECLCALLBACK(int) dbgfR3LogModifyGroups(PVM pVM, const char *pszGroupSettings)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync{
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync int rc = RTLogGroupSettings(NULL, pszGroupSettings);
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync if (RT_SUCCESS(rc))
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync rc = VMMR3UpdateLoggers(pVM);
fe96bc0e43d9c137304462ef8c2d79cbff22446fvboxsync return rc;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync}
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/**
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * Changes the logger flag settings.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync *
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @returns VBox status code.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @param pVM The VM handle.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @param pszFlagSettings The group settings string. (VBOX_LOG_FLAGS)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsyncVMMR3DECL(int) DBGFR3LogModifyFlags(PVM pVM, const char *pszFlagSettings)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync{
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync AssertReturn(VALID_PTR(pVM), VERR_INVALID_POINTER);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync AssertReturn(VALID_PTR(pszFlagSettings), VERR_INVALID_POINTER);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync PVMREQ pReq;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync int rc = VMR3ReqCall(pVM, VMCPUID_ANY, &pReq, RT_INDEFINITE_WAIT, (PFNRT)dbgfR3LogModifyFlags, 2, pVM, pszFlagSettings);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (RT_SUCCESS(rc))
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync rc = pReq->iStatus;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync VMR3ReqFree(pReq);
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync return rc;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync}
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/**
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * EMT worker for DBGFR3LogModifyFlags.
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync *
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @returns VBox status code.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @param pVM The VM handle.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @param pszFlagSettings The group settings string. (VBOX_LOG_FLAGS)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsyncstatic DECLCALLBACK(int) dbgfR3LogModifyFlags(PVM pVM, const char *pszFlagSettings)
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync{
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync int rc = RTLogFlags(NULL, pszFlagSettings);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync if (RT_SUCCESS(rc))
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync rc = VMMR3UpdateLoggers(pVM);
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync return rc;
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync}
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync/**
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * Changes the logger destination settings.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync *
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync * @returns VBox status code.
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsync * @param pVM The VM handle.
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync * @param pszDestSettings The destination settings string. (VBOX_LOG_DEST)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync */
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsyncVMMR3DECL(int) DBGFR3LogModifyDestinations(PVM pVM, const char *pszDestSettings)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync{
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync AssertReturn(VALID_PTR(pVM), VERR_INVALID_POINTER);
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync AssertReturn(VALID_PTR(pszDestSettings), VERR_INVALID_POINTER);
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync PVMREQ pReq;
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync int rc = VMR3ReqCall(pVM, VMCPUID_ANY, &pReq, RT_INDEFINITE_WAIT, (PFNRT)dbgfR3LogModifyDestinations, 2, pVM, pszDestSettings);
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync if (RT_SUCCESS(rc))
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync rc = pReq->iStatus;
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync VMR3ReqFree(pReq);
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync return rc;
e3f5c51715cbf77ae2d2e9d05bafd00d69b1bec9vboxsync}
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync
548ca31b6b47c36bacce49bed3339cb8075b9681vboxsync
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync/**
e3f5c51715cbf77ae2d2e9d05bafd00d69b1bec9vboxsync * EMT worker for DBGFR3LogModifyFlags.
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync *
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync * @returns VBox status code.
aa32d4906f2f685992091893d5abdf27a2352a85vboxsync * @param pVM The VM handle.
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync * @param pszDestSettings The destination settings string. (VBOX_LOG_DEST)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync */
5b1d6bab9f4cf5dacf1883e7c4a40c84349f597fvboxsyncstatic DECLCALLBACK(int) dbgfR3LogModifyDestinations(PVM pVM, const char *pszDestSettings)
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync{
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync int rc = RTLogDestinations(NULL, pszDestSettings);
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync if (RT_SUCCESS(rc))
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync rc = VMMR3UpdateLoggers(pVM);
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync return rc;
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync}
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync
914d33aebb63d8c288dfd1b7e74f8e2acf3eaa66vboxsync