dbgf.h revision badc8f586d7b8d9606f5d1611bb5d429196fe18b
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @file
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * DBGF - Debugger Facility.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/*
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Copyright (C) 2006-2010 Oracle Corporation
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * available from http://www.virtualbox.org. This file is free software;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * you can redistribute it and/or modify it under the terms of the GNU
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * General Public License (GPL) as published by the Free Software
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * The contents of this file may alternatively be used under the terms
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * of the Common Development and Distribution License Version 1.0
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * VirtualBox OSE distribution, in which case the provisions of the
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * CDDL are applicable instead of those of the GPL.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * You may elect to license modified versions of this file under the
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * terms and conditions of either the GPL or the CDDL or both.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#ifndef ___VBox_vmm_dbgf_h
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define ___VBox_vmm_dbgf_h
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#include <VBox/types.h>
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#include <VBox/log.h> /* LOG_ENABLED */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#include <VBox/vmm/vmm.h>
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#include <VBox/vmm/dbgfsel.h>
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#include <iprt/stdarg.h>
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#include <iprt/dbg.h>
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncRT_C_DECLS_BEGIN
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @defgroup grp_dbgf The Debugger Facility API
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#if defined(IN_RC) || defined(IN_RING0)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @addgroup grp_dbgf_rz The RZ DBGF API
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @ingroup grp_dbgf
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @{
7d6ce198fd361f58bd1ebdeee7772f76b4e58966vboxsync */
2fce40121ae472df2fd959fbe19775ed43304a0bvboxsyncVMMRZDECL(int) DBGFRZTrap01Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6);
edde275acba04aca58db4172a163741e3abadfbcvboxsyncVMMRZDECL(int) DBGFRZTrap03Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @} */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#endif
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
40839c441cb305d84420565f7ca25403d8177413vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
7d6ce198fd361f58bd1ebdeee7772f76b4e58966vboxsync/**
7d6ce198fd361f58bd1ebdeee7772f76b4e58966vboxsync * Mixed address.
7d6ce198fd361f58bd1ebdeee7772f76b4e58966vboxsync */
7d6ce198fd361f58bd1ebdeee7772f76b4e58966vboxsynctypedef struct DBGFADDRESS
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The flat address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTGCUINTPTR FlatPtr;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The selector offset address. */
edde275acba04aca58db4172a163741e3abadfbcvboxsync RTGCUINTPTR off;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The selector. DBGF_SEL_FLAT is a legal value. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTSEL Sel;
a1d9d394b49969e730c5a8e037ea2d672a48dbf6vboxsync /** Flags describing further details about the address. */
edde275acba04aca58db4172a163741e3abadfbcvboxsync uint16_t fFlags;
edde275acba04aca58db4172a163741e3abadfbcvboxsync} DBGFADDRESS;
edde275acba04aca58db4172a163741e3abadfbcvboxsync/** Pointer to a mixed address. */
edde275acba04aca58db4172a163741e3abadfbcvboxsynctypedef DBGFADDRESS *PDBGFADDRESS;
a1d9d394b49969e730c5a8e037ea2d672a48dbf6vboxsync/** Pointer to a const mixed address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef const DBGFADDRESS *PCDBGFADDRESS;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @name DBGFADDRESS Flags.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @{ */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** A 16:16 far address. */
2fce40121ae472df2fd959fbe19775ed43304a0bvboxsync#define DBGFADDRESS_FLAGS_FAR16 0
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** A 16:32 far address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_FLAGS_FAR32 1
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** A 16:64 far address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_FLAGS_FAR64 2
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** A flat address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_FLAGS_FLAT 3
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** A physical address. */
2fce40121ae472df2fd959fbe19775ed43304a0bvboxsync#define DBGFADDRESS_FLAGS_PHYS 4
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** A physical address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_FLAGS_RING0 5
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** The address type mask. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_FLAGS_TYPE_MASK 7
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Set if the address is valid. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_FLAGS_VALID RT_BIT(3)
30f07af559efcbd967e801903746fc21f81ee533vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** The address is within the hypervisor memoary area (HMA).
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * If not set, the address can be assumed to be a guest address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_FLAGS_HMA RT_BIT(4)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Checks if the mixed address is flat or not. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_IS_FLAT(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FLAT )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Checks if the mixed address is flat or not. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_IS_PHYS(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_PHYS )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Checks if the mixed address is far 16:16 or not. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_IS_FAR16(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FAR16 )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Checks if the mixed address is far 16:32 or not. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_IS_FAR32(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FAR32 )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Checks if the mixed address is far 16:64 or not. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_IS_FAR64(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FAR64 )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Checks if the mixed address is valid. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_IS_VALID(pAddress) ( !!((pAddress)->fFlags & DBGFADDRESS_FLAGS_VALID) )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Checks if the address is flagged as within the HMA. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFADDRESS_IS_HMA(pAddress) ( !!((pAddress)->fFlags & DBGFADDRESS_FLAGS_HMA) )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @} */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AddrFromSelOff(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, RTSEL Sel, RTUINTPTR off);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AddrFromSelInfoOff(PVM pVM, PDBGFADDRESS pAddress, PCDBGFSELINFO pSelInfo, RTUINTPTR off);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromFlat(PVM pVM, PDBGFADDRESS pAddress, RTGCUINTPTR FlatPtr);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromPhys(PVM pVM, PDBGFADDRESS pAddress, RTGCPHYS PhysAddr);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(bool) DBGFR3AddrIsValid(PVM pVM, PCDBGFADDRESS pAddress);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AddrToPhys(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, PRTGCPHYS pGCPhys);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AddrToHostPhys(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, PRTHCPHYS pHCPhys);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AddrToVolatileR3Ptr(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, bool fReadOnly, void **ppvR3Ptr);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(PDBGFADDRESS) DBGFR3AddrAdd(PDBGFADDRESS pAddress, RTGCUINTPTR uAddend);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(PDBGFADDRESS) DBGFR3AddrSub(PDBGFADDRESS pAddress, RTGCUINTPTR uSubtrahend);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * VMM Debug Event Type.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef enum DBGFEVENTTYPE
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Halt completed.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * This notifies that a halt command have been successfully completed.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFEVENT_HALT_DONE = 0,
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Detach completed.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * This notifies that the detach command have been successfully completed.
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync DBGFEVENT_DETACH_DONE,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The command from the debugger is not recognized.
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync * This means internal error or half implemented features.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFEVENT_INVALID_COMMAND,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Fatal error.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * This notifies a fatal error in the VMM and that the debugger get's a
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * chance to first hand information about the the problem.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFEVENT_FATAL_ERROR = 100,
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Breakpoint Hit.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * This notifies that a breakpoint installed by the debugger was hit. The
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * identifier of the breakpoint can be found in the DBGFEVENT::u::Bp::iBp member.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFEVENT_BREAKPOINT,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Breakpoint Hit in the Hypervisor.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * This notifies that a breakpoint installed by the debugger was hit. The
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * identifier of the breakpoint can be found in the DBGFEVENT::u::Bp::iBp member.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFEVENT_BREAKPOINT_HYPER,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Assertion in the Hypervisor (breakpoint instruction).
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * This notifies that a breakpoint instruction was hit in the hypervisor context.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFEVENT_ASSERTION_HYPER,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Single Stepped.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * This notifies that a single step operation was completed.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFEVENT_STEPPED,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Single Stepped.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * This notifies that a hypervisor single step operation was completed.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFEVENT_STEPPED_HYPER,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The developer have used the DBGFSTOP macro or the PDMDeviceDBGFSTOP function
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync * to bring up the debugger at a specific place.
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync */
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync DBGFEVENT_DEV_STOP,
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync /** The VM is terminating.
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync * When this notification is received, the debugger thread should detach ASAP.
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync */
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync DBGFEVENT_TERMINATING,
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync /** The usual 32-bit hack. */
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync DBGFEVENT_32BIT_HACK = 0x7fffffff
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync} DBGFEVENTTYPE;
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync/**
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync * The context of an event.
88d7b87c38cc3800f532139696785e8c96bfd531vboxsync */
88d7b87c38cc3800f532139696785e8c96bfd531vboxsynctypedef enum DBGFEVENTCTX
88d7b87c38cc3800f532139696785e8c96bfd531vboxsync{
88d7b87c38cc3800f532139696785e8c96bfd531vboxsync /** The usual invalid entry. */
88d7b87c38cc3800f532139696785e8c96bfd531vboxsync DBGFEVENTCTX_INVALID = 0,
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync /** Raw mode. */
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync DBGFEVENTCTX_RAW,
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync /** Recompiled mode. */
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync DBGFEVENTCTX_REM,
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync /** VMX / AVT mode. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFEVENTCTX_HWACCL,
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Hypervisor context. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFEVENTCTX_HYPER,
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync /** Other mode */
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync DBGFEVENTCTX_OTHER,
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync /** The usual 32-bit hack */
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync DBGFEVENTCTX_32BIT_HACK = 0x7fffffff
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync} DBGFEVENTCTX;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync
0c2ffca957882f38c677fc23f324cfd695b96947vboxsync/**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * VMM Debug Event.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef struct DBGFEVENT
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Type. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFEVENTTYPE enmType;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Context */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFEVENTCTX enmCtx;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Type specific data. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync union
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync {
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Fatal error details. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync struct
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync {
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The GC return code. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync int rc;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync } FatalError;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Source location. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync struct
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync {
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** File name. */
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync R3PTRTYPE(const char *) pszFile;
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync /** Function name. */
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync R3PTRTYPE(const char *) pszFunction;
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync /** Message. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync R3PTRTYPE(const char *) pszMessage;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Line number. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync unsigned uLine;
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync } Src;
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync /** Assertion messages. */
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync struct
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync {
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The first message. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync R3PTRTYPE(const char *) pszMsg1;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The second message. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync R3PTRTYPE(const char *) pszMsg2;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync } Assert;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
9f997e760f610c92e3a365be21ead6972bc46130vboxsync /** Breakpoint. */
9f997e760f610c92e3a365be21ead6972bc46130vboxsync struct DBGFEVENTBP
9f997e760f610c92e3a365be21ead6972bc46130vboxsync {
9f997e760f610c92e3a365be21ead6972bc46130vboxsync /** The identifier of the breakpoint which was hit. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTUINT iBp;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync } Bp;
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync /** Padding for ensuring that the structure is 8 byte aligned. */
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync uint64_t au64Padding[4];
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync } u;
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync} DBGFEVENT;
46b9d3cd08a855c5d0e968e4fff0e89dea3fc2dfvboxsync/** Pointer to VMM Debug Event. */
9f997e760f610c92e3a365be21ead6972bc46130vboxsynctypedef DBGFEVENT *PDBGFEVENT;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Pointer to const VMM Debug Event. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef const DBGFEVENT *PCDBGFEVENT;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @def DBGFSTOP
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Stops the debugger raising a DBGFEVENT_DEVELOPER_STOP event.
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync *
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync * @returns VBox status code which must be propagated up to EM if not VINF_SUCCESS.
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync * @param pVM VM Handle.
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync */
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync#ifdef VBOX_STRICT
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync# define DBGFSTOP(pVM) DBGFR3EventSrc(pVM, DBGFEVENT_DEV_STOP, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL)
8302394f164acb4adb187954f6ac8ef7a9efa629vboxsync#else
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsync# define DBGFSTOP(pVM) VINF_SUCCESS
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsync#endif
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsync
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsyncVMMR3DECL(int) DBGFR3Init(PVM pVM);
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsyncVMMR3DECL(int) DBGFR3Term(PVM pVM);
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsyncVMMR3DECL(void) DBGFR3Relocate(PVM pVM, RTGCINTPTR offDelta);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3VMMForcedAction(PVM pVM);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3Event(PVM pVM, DBGFEVENTTYPE enmEvent);
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsyncVMMR3DECL(int) DBGFR3EventSrc(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszFile, unsigned uLine, const char *pszFunction, const char *pszFormat, ...);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3EventSrcV(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszFile, unsigned uLine, const char *pszFunction, const char *pszFormat, va_list args);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3EventAssertion(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszMsg1, const char *pszMsg2);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3EventBreakpoint(PVM pVM, DBGFEVENTTYPE enmEvent);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3Attach(PVM pVM);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3Detach(PVM pVM);
55f0ad00baf08057a3d6087ca698d4fd86e7b4a7vboxsyncVMMR3DECL(int) DBGFR3EventWait(PVM pVM, RTMSINTERVAL cMillies, PCDBGFEVENT *ppEvent);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3Halt(PVM pVM);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(bool) DBGFR3IsHalted(PVM pVM);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(bool) DBGFR3CanWait(PVM pVM);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3Resume(PVM pVM);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3Step(PVM pVM, VMCPUID idCpu);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3PrgStep(PVMCPU pVCpu);
100b161379af7255c69e27587cc746e5f76ff050vboxsync
100b161379af7255c69e27587cc746e5f76ff050vboxsync
100b161379af7255c69e27587cc746e5f76ff050vboxsync/** Breakpoint type. */
a6c871653045073d6ef74d0589de345ae62b607dvboxsynctypedef enum DBGFBPTYPE
a6c871653045073d6ef74d0589de345ae62b607dvboxsync{
55f0ad00baf08057a3d6087ca698d4fd86e7b4a7vboxsync /** Free breakpoint entry. */
55f0ad00baf08057a3d6087ca698d4fd86e7b4a7vboxsync DBGFBPTYPE_FREE = 0,
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsync /** Debug register. */
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsync DBGFBPTYPE_REG,
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsync /** INT 3 instruction. */
beed5fc4d17b85d6d05516ae63e6308af82ad96fvboxsync DBGFBPTYPE_INT3,
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Recompiler. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFBPTYPE_REM,
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** ensure 32-bit size. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFBPTYPE_32BIT_HACK = 0x7fffffff
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync} DBGFBPTYPE;
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync
f81115e612ee8fa2bc082db9d4c8879e33babc5avboxsync/**
f81115e612ee8fa2bc082db9d4c8879e33babc5avboxsync * A Breakpoint.
f81115e612ee8fa2bc082db9d4c8879e33babc5avboxsync */
9f997e760f610c92e3a365be21ead6972bc46130vboxsynctypedef struct DBGFBP
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The number of breakpoint hits. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint64_t cHits;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The hit number which starts to trigger the breakpoint. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint64_t iHitTrigger;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The hit number which stops triggering the breakpoint (disables it).
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Use ~(uint64_t)0 if it should never stop. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint64_t iHitDisable;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The Flat GC address of the breakpoint.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * (PC register value if REM type?) */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTGCUINTPTR GCPtr;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The breakpoint id. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTUINT iBp;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The breakpoint status - enabled or disabled. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync bool fEnabled;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The breakpoint type. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFBPTYPE enmType;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#if GC_ARCH_BITS == 64
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint32_t u32Padding;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#endif
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Union of type specific data. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync union
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync {
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Debug register data. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync struct DBGFBPREG
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync {
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The debug register number. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint8_t iReg;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The access type (one of the X86_DR7_RW_* value). */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint8_t fType;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The access size. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint8_t cb;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync } Reg;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Recompiler breakpoint data. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync struct DBGFBPINT3
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync {
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The byte value we replaced by the INT 3 instruction. */
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync uint8_t bOrg;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync } Int3;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync /** Recompiler breakpoint data. */
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync struct DBGFBPREM
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync {
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync /** nothing yet */
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync uint8_t fDummy;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync } Rem;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync /** Paddind to ensure that the size is identical on win32 and linux. */
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync uint64_t u64Padding;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync } u;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync} DBGFBP;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync/** Pointer to a breakpoint. */
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsynctypedef DBGFBP *PDBGFBP;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync/** Pointer to a const breakpoint. */
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsynctypedef const DBGFBP *PCDBGFBP;
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsync
4db69c2a1302fa56bc5dd7181377b9f47cfd875evboxsyncVMMR3DECL(int) DBGFR3BpSet(PVM pVM, PCDBGFADDRESS pAddress, uint64_t iHitTrigger, uint64_t iHitDisable, PRTUINT piBp);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3BpSetReg(PVM pVM, PCDBGFADDRESS pAddress, uint64_t iHitTrigger, uint64_t iHitDisable,
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync uint8_t fType, uint8_t cb, PRTUINT piBp);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3BpSetREM(PVM pVM, PCDBGFADDRESS pAddress, uint64_t iHitTrigger, uint64_t iHitDisable, PRTUINT piBp);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3BpClear(PVM pVM, RTUINT iBp);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3BpEnable(PVM pVM, RTUINT iBp);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3BpDisable(PVM pVM, RTUINT iBp);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Breakpoint enumeration callback function.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @returns VBox status code. Any failure will stop the enumeration.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pVM The VM handle.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pvUser The user argument.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pBp Pointer to the breakpoint information. (readonly)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef DECLCALLBACK(int) FNDBGFBPENUM(PVM pVM, void *pvUser, PCDBGFBP pBp);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Pointer to a breakpoint enumeration callback function. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef FNDBGFBPENUM *PFNDBGFBPENUM;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3BpEnum(PVM pVM, PFNDBGFBPENUM pfnCallback, void *pvUser);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMDECL(RTGCUINTREG) DBGFBpGetDR7(PVM pVM);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMDECL(RTGCUINTREG) DBGFBpGetDR0(PVM pVM);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMDECL(RTGCUINTREG) DBGFBpGetDR1(PVM pVM);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMDECL(RTGCUINTREG) DBGFBpGetDR2(PVM pVM);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMDECL(RTGCUINTREG) DBGFBpGetDR3(PVM pVM);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMDECL(bool) DBGFIsStepping(PVMCPU pVCpu);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(CPUMMODE) DBGFR3CpuGetMode(PVM pVM, VMCPUID idCpu);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Info helper callback structure.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef struct DBGFINFOHLP
30f07af559efcbd967e801903746fc21f81ee533vboxsync{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Print formatted string.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pHlp Pointer to this structure.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pszFormat The format string.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param ... Arguments.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DECLCALLBACKMEMBER(void, pfnPrintf)(PCDBGFINFOHLP pHlp, const char *pszFormat, ...);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Print formatted string.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pHlp Pointer to this structure.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pszFormat The format string.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param args Argument list.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DECLCALLBACKMEMBER(void, pfnPrintfV)(PCDBGFINFOHLP pHlp, const char *pszFormat, va_list args);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync} DBGFINFOHLP;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Info handler, device version.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pDevIns The device instance which registered the info.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pHlp Callback functions for doing output.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pszArgs Argument string. Optional and specific to the handler.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef DECLCALLBACK(void) FNDBGFHANDLERDEV(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Pointer to a FNDBGFHANDLERDEV function. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef FNDBGFHANDLERDEV *PFNDBGFHANDLERDEV;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Info handler, USB device version.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pUsbIns The USB device instance which registered the info.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pHlp Callback functions for doing output.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pszArgs Argument string. Optional and specific to the handler.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef DECLCALLBACK(void) FNDBGFHANDLERUSB(PPDMUSBINS pUsbIns, PCDBGFINFOHLP pHlp, const char *pszArgs);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Pointer to a FNDBGFHANDLERUSB function. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef FNDBGFHANDLERUSB *PFNDBGFHANDLERUSB;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/**
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * Info handler, driver version.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync *
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pDrvIns The driver instance which registered the info.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pHlp Callback functions for doing output.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pszArgs Argument string. Optional and specific to the handler.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef DECLCALLBACK(void) FNDBGFHANDLERDRV(PPDMDRVINS pDrvIns, PCDBGFINFOHLP pHlp, const char *pszArgs);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to a FNDBGFHANDLERDRV function. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef FNDBGFHANDLERDRV *PFNDBGFHANDLERDRV;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Info handler, internal version.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync *
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pVM The VM handle.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pHlp Callback functions for doing output.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pszArgs Argument string. Optional and specific to the handler.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef DECLCALLBACK(void) FNDBGFHANDLERINT(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to a FNDBGFHANDLERINT function. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef FNDBGFHANDLERINT *PFNDBGFHANDLERINT;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Info handler, external version.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync *
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pvUser User argument.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pHlp Callback functions for doing output.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pszArgs Argument string. Optional and specific to the handler.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef DECLCALLBACK(void) FNDBGFHANDLEREXT(void *pvUser, PCDBGFINFOHLP pHlp, const char *pszArgs);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Pointer to a FNDBGFHANDLEREXT function. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef FNDBGFHANDLEREXT *PFNDBGFHANDLEREXT;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @name Flags for the info registration functions.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @{ */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** The handler must run on the EMT. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFINFO_FLAGS_RUN_ON_EMT RT_BIT(0)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @} */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoRegisterDevice(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDEV pfnHandler, PPDMDEVINS pDevIns);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3InfoRegisterDriver(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDRV pfnHandler, PPDMDRVINS pDrvIns);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3InfoRegisterInternal(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERINT pfnHandler);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3InfoRegisterInternalEx(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERINT pfnHandler, uint32_t fFlags);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3InfoRegisterExternal(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLEREXT pfnHandler, void *pvUser);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoDeregisterDevice(PVM pVM, PPDMDEVINS pDevIns, const char *pszName);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoDeregisterDriver(PVM pVM, PPDMDRVINS pDrvIns, const char *pszName);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoDeregisterInternal(PVM pVM, const char *pszName);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoDeregisterExternal(PVM pVM, const char *pszName);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3Info(PVM pVM, const char *pszName, const char *pszArgs, PCDBGFINFOHLP pHlp);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoLogRel(PVM pVM, const char *pszName, const char *pszArgs);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoStdErr(PVM pVM, const char *pszName, const char *pszArgs);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3InfoMulti(PVM pVM, const char *pszIncludePat, const char *pszExcludePat,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync const char *pszSepFmt, PCDBGFINFOHLP pHlp);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @def DBGFR3InfoLog
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Display a piece of info writing to the log if enabled.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync *
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pVM VM handle.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pszName The identifier of the info to display.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param pszArgs Arguments to the info handler.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#ifdef LOG_ENABLED
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFR3InfoLog(pVM, pszName, pszArgs) \
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync do { \
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync if (LogIsEnabled()) \
efdc3bd872b77b5ec7d19d77504264de24b0582bvboxsync DBGFR3Info(pVM, pszName, pszArgs, NULL); \
efdc3bd872b77b5ec7d19d77504264de24b0582bvboxsync } while (0)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#else
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFR3InfoLog(pVM, pszName, pszArgs) do { } while (0)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#endif
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Enumeration callback for use with DBGFR3InfoEnum.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync *
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @returns VBox status code.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * A status code indicating failure will end the enumeration
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * and DBGFR3InfoEnum will return with that status code.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pVM VM handle.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pszName Info identifier name.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @param pszDesc The description.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef DECLCALLBACK(int) FNDBGFINFOENUM(PVM pVM, const char *pszName, const char *pszDesc, void *pvUser);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Pointer to a FNDBGFINFOENUM function. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef FNDBGFINFOENUM *PFNDBGFINFOENUM;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsyncVMMR3DECL(int) DBGFR3InfoEnum(PVM pVM, PFNDBGFINFOENUM pfnCallback, void *pvUser);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(PCDBGFINFOHLP) DBGFR3InfoLogHlp(void);
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsyncVMMR3DECL(PCDBGFINFOHLP) DBGFR3InfoLogRelHlp(void);
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3LogModifyGroups(PVM pVM, const char *pszGroupSettings);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3LogModifyFlags(PVM pVM, const char *pszFlagSettings);
30f07af559efcbd967e801903746fc21f81ee533vboxsyncVMMR3DECL(int) DBGFR3LogModifyDestinations(PVM pVM, const char *pszDestSettings);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Max length (including '\\0') of a symbol name. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGF_SYMBOL_NAME_LENGTH 512
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync/**
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync * Debug symbol.
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef struct DBGFSYMBOL
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Symbol value (address). */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync RTGCUINTPTR Value;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Symbol size. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t cb;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Symbol Flags. (reserved). */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t fFlags;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Symbol name. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync char szName[DBGF_SYMBOL_NAME_LENGTH];
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync} DBGFSYMBOL;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to debug symbol. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef DBGFSYMBOL *PDBGFSYMBOL;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to const debug symbol. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef const DBGFSYMBOL *PCDBGFSYMBOL;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Debug line number information.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef struct DBGFLINE
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Address. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync RTGCUINTPTR Address;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Line number. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t uLineNo;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Filename. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync char szFilename[260];
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync} DBGFLINE;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to debug line number. */
e17f6f8a70a7709a9a6319d9a473596fb600b552vboxsynctypedef DBGFLINE *PDBGFLINE;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to const debug line number. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef const DBGFLINE *PCDBGFLINE;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @name Address spaces aliases.
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync * @{ */
30f07af559efcbd967e801903746fc21f81ee533vboxsync/** The guest global address space. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_GLOBAL ((RTDBGAS)-1)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** The guest kernel address space.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * This is usually resolves to the same as DBGF_AS_GLOBAL. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_KERNEL ((RTDBGAS)-2)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** The physical address space. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_PHYS ((RTDBGAS)-3)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Raw-mode context. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_RC ((RTDBGAS)-4)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Ring-0 context. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_R0 ((RTDBGAS)-5)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Raw-mode context and then global guest context.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * When used for looking up information, it works as if the call was first made
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * with DBGF_AS_RC and then on failure with DBGF_AS_GLOBAL. When called for
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * making address space changes, it works as if DBGF_AS_RC was used. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_RC_AND_GC_GLOBAL ((RTDBGAS)-6)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** The first special one. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_FIRST DBGF_AS_RC_AND_GC_GLOBAL
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** The last special one. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_LAST DBGF_AS_GLOBAL
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** The number of special address space handles. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_COUNT (6U)
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Converts an alias handle to an array index. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGF_AS_ALIAS_2_INDEX(hAlias) \
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync ( (uintptr_t)(hAlias) - (uintptr_t)DBGF_AS_FIRST )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Predicat macro that check if the specified handle is an alias. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_IS_ALIAS(hAlias) \
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync ( DBGF_AS_ALIAS_2_INDEX(hAlias) < DBGF_AS_COUNT )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Predicat macro that check if the specified alias is a fixed one or not. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGF_AS_IS_FIXED_ALIAS(hAlias) \
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync ( DBGF_AS_ALIAS_2_INDEX(hAlias) < (uintptr_t)DBGF_AS_PHYS - (uintptr_t)DBGF_AS_FIRST + 1U )
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @} */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AsAdd(PVM pVM, RTDBGAS hDbgAs, RTPROCESS ProcId);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AsDelete(PVM pVM, RTDBGAS hDbgAs);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AsSetAlias(PVM pVM, RTDBGAS hAlias, RTDBGAS hAliasFor);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(RTDBGAS) DBGFR3AsResolve(PVM pVM, RTDBGAS hAlias);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(RTDBGAS) DBGFR3AsResolveAndRetain(PVM pVM, RTDBGAS hAlias);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(RTDBGAS) DBGFR3AsQueryByName(PVM pVM, const char *pszName);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(RTDBGAS) DBGFR3AsQueryByPid(PVM pVM, RTPROCESS ProcId);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3AsLoadImage(PVM pVM, RTDBGAS hDbgAs, const char *pszFilename, const char *pszModName, PCDBGFADDRESS pModAddress, RTDBGSEGIDX iModSeg, uint32_t fFlags);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3AsLoadMap(PVM pVM, RTDBGAS hDbgAs, const char *pszFilename, const char *pszModName, PCDBGFADDRESS pModAddress, RTDBGSEGIDX iModSeg, RTGCUINTPTR uSubtrahend, uint32_t fFlags);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3AsLinkModule(PVM pVM, RTDBGAS hDbgAs, RTDBGMOD hMod, PCDBGFADDRESS pModAddress, RTDBGSEGIDX iModSeg, uint32_t fFlags);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3AsSymbolByAddr(PVM pVM, RTDBGAS hDbgAs, PCDBGFADDRESS pAddress, PRTGCINTPTR poffDisp, PRTDBGSYMBOL pSymbol, PRTDBGMOD phMod);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(PRTDBGSYMBOL) DBGFR3AsSymbolByAddrA(PVM pVM, RTDBGAS hDbgAs, PCDBGFADDRESS pAddress, PRTGCINTPTR poffDisp, PRTDBGMOD phMod);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3AsSymbolByName(PVM pVM, RTDBGAS hDbgAs, const char *pszSymbol, PRTDBGSYMBOL pSymbol, PRTDBGMOD phMod);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/* The following are soon to be obsoleted: */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3ModuleLoad(PVM pVM, const char *pszFilename, RTGCUINTPTR AddressDelta, const char *pszName, RTGCUINTPTR ModuleAddress, unsigned cbImage);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(void) DBGFR3ModuleRelocate(PVM pVM, RTGCUINTPTR OldImageBase, RTGCUINTPTR NewImageBase, RTGCUINTPTR cbImage,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync const char *pszFilename, const char *pszName);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3SymbolAdd(PVM pVM, RTGCUINTPTR ModuleAddress, RTGCUINTPTR SymbolAddress, RTUINT cbSymbol, const char *pszSymbol);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3SymbolByAddr(PVM pVM, RTGCUINTPTR Address, PRTGCINTPTR poffDisplacement, PDBGFSYMBOL pSymbol);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3SymbolByName(PVM pVM, const char *pszSymbol, PDBGFSYMBOL pSymbol);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3LineByAddr(PVM pVM, RTGCUINTPTR Address, PRTGCINTPTR poffDisplacement, PDBGFLINE pLine);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(PDBGFLINE) DBGFR3LineByAddrAlloc(PVM pVM, RTGCUINTPTR Address, PRTGCINTPTR poffDisplacement);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(void) DBGFR3LineFree(PDBGFLINE pLine);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Return type.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef enum DBGFRETRUNTYPE
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The usual invalid 0 value. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_INVALID = 0,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Near 16-bit return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_NEAR16,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Near 32-bit return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_NEAR32,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Near 64-bit return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_NEAR64,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Far 16:16 return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_FAR16,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Far 16:32 return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_FAR32,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Far 16:64 return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_FAR64,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 16-bit iret return (e.g. real or 286 protect mode). */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_IRET16,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 32-bit iret return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_IRET32,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 32-bit iret return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_IRET32_PRIV,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 32-bit iret return to V86 mode. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_IRET32_V86,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** @todo 64-bit iret return. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_IRET64,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The end of the valid return types. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_END,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The usual 32-bit blowup. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE_32BIT_HACK = 0x7fffffff
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync} DBGFRETURNTYPE;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Figures the size of the return state on the stack.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync *
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @returns number of bytes. 0 if invalid parameter.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @param enmRetType The type of return.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncDECLINLINE(unsigned) DBGFReturnTypeSize(DBGFRETURNTYPE enmRetType)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync switch (enmRetType)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync {
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_NEAR16: return 2;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_NEAR32: return 4;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_NEAR64: return 8;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_FAR16: return 4;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_FAR32: return 4;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_FAR64: return 8;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_IRET16: return 6;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_IRET32: return 4*3;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_IRET32_PRIV: return 4*5;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_IRET32_V86: return 4*9;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync case DBGFRETURNTYPE_IRET64:
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync default:
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync return 0;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync }
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync}
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to stack frame info. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef struct DBGFSTACKFRAME *PDBGFSTACKFRAME;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to const stack frame info. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef struct DBGFSTACKFRAME const *PCDBGFSTACKFRAME;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Info about a stack frame.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef struct DBGFSTACKFRAME
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Frame number. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t iFrame;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Frame flags. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t fFlags;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The frame address.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * The off member is [e|r]bp and the Sel member is ss. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFADDRESS AddrFrame;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The stack address of the frame.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * The off member is [e|r]sp and the Sel member is ss. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFADDRESS AddrStack;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The program counter (PC) address of the frame.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * The off member is [e|r]ip and the Sel member is cs. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFADDRESS AddrPC;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Pointer to the symbol nearest the program counter (PC). NULL if not found. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync PRTDBGSYMBOL pSymPC;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Pointer to the linnumber nearest the program counter (PC). NULL if not found. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync PDBGFLINE pLinePC;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The return frame address.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * The off member is [e|r]bp and the Sel member is ss. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFADDRESS AddrReturnFrame;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The return stack address.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * The off member is [e|r]sp and the Sel member is ss. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFADDRESS AddrReturnStack;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The way this frame returns to the next one. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE enmReturnType;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The program counter (PC) address which the frame returns to.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * The off member is [e|r]ip and the Sel member is cs. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFADDRESS AddrReturnPC;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Pointer to the symbol nearest the return PC. NULL if not found. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync PRTDBGSYMBOL pSymReturnPC;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Pointer to the linnumber nearest the return PC. NULL if not found. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync PDBGFLINE pLineReturnPC;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 32-bytes of stack arguments. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync union
30f07af559efcbd967e801903746fc21f81ee533vboxsync {
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 64-bit view */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint64_t au64[4];
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 32-bit view */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t au32[8];
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 16-bit view */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint16_t au16[16];
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** 8-bit view */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint8_t au8[32];
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync } Args;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Pointer to the next frame.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Might not be used in some cases, so consider it internal. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync PCDBGFSTACKFRAME pNextInternal;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Pointer to the first frame.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Might not be used in some cases, so consider it internal. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync PCDBGFSTACKFRAME pFirstInternal;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync} DBGFSTACKFRAME;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @name DBGFSTACKFRAME Flags.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @{ */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Set if the content of the frame is filled in by DBGFR3StackWalk() and can be used
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * to construct the next frame. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFSTACKFRAME_FLAGS_ALL_VALID RT_BIT(0)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** This is the last stack frame we can read.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * This flag is not set if the walk stop because of max dept or recursion. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFSTACKFRAME_FLAGS_LAST RT_BIT(1)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** This is the last record because we detected a loop. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFSTACKFRAME_FLAGS_LOOP RT_BIT(2)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** This is the last record because we reached the maximum depth. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFSTACKFRAME_FLAGS_MAX_DEPTH RT_BIT(3)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** 16-bit frame. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFSTACKFRAME_FLAGS_16BIT RT_BIT(4)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** 32-bit frame. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFSTACKFRAME_FLAGS_32BIT RT_BIT(5)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** 64-bit frame. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFSTACKFRAME_FLAGS_64BIT RT_BIT(6)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @} */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @name DBGFCODETYPE
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @{ */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef enum DBGFCODETYPE
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The usual invalid 0 value. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFCODETYPE_INVALID = 0,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Stack walk for guest code. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFCODETYPE_GUEST,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Stack walk for hypervisor code. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFCODETYPE_HYPER,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Stack walk for ring 0 code. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFCODETYPE_RING0,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** The usual 32-bit blowup. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFCODETYPE_32BIT_HACK = 0x7fffffff
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync} DBGFCODETYPE;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @} */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3StackWalkBegin(PVM pVM, VMCPUID idCpu, DBGFCODETYPE enmCodeType, PCDBGFSTACKFRAME *ppFirstFrame);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3StackWalkBeginEx(PVM pVM, VMCPUID idCpu, DBGFCODETYPE enmCodeType, PCDBGFADDRESS pAddrFrame,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync PCDBGFADDRESS pAddrStack,PCDBGFADDRESS pAddrPC,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFRETURNTYPE enmReturnType, PCDBGFSTACKFRAME *ppFirstFrame);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(PCDBGFSTACKFRAME) DBGFR3StackWalkNext(PCDBGFSTACKFRAME pCurrent);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(void) DBGFR3StackWalkEnd(PCDBGFSTACKFRAME pFirstFrame);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Flags to pass to DBGFR3DisasInstrEx().
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @{ */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Disassemble the current guest instruction, with annotations. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGF_DISAS_FLAGS_CURRENT_GUEST RT_BIT(0)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Disassemble the current hypervisor instruction, with annotations. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGF_DISAS_FLAGS_CURRENT_HYPER RT_BIT(1)
100b161379af7255c69e27587cc746e5f76ff050vboxsync/** No annotations for current context. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGF_DISAS_FLAGS_NO_ANNOTATION RT_BIT(2)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** No symbol lookup. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGF_DISAS_FLAGS_NO_SYMBOLS RT_BIT(3)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** No instruction bytes. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_NO_BYTES RT_BIT(4)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** No address in the output. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_NO_ADDRESS RT_BIT(5)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Set if the hidden selector registers are known to be valid. (REM hack to
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * avoid assertions.) */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_HID_SEL_REGS_VALID RT_BIT(6)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Disassemble in the default mode of the specific context. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGF_DISAS_FLAGS_DEFAULT_MODE UINT32_C(0x00000000)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Disassemble in 16-bit mode. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_16BIT_MODE UINT32_C(0x10000000)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Disassemble in 16-bit mode with real mode address translation. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_16BIT_REAL_MODE UINT32_C(0x20000000)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Disassemble in 32-bit mode. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_32BIT_MODE UINT32_C(0x30000000)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Disassemble in 64-bit mode. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_64BIT_MODE UINT32_C(0x40000000)
2fce40121ae472df2fd959fbe19775ed43304a0bvboxsync/** The disassembly mode mask. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_MODE_MASK UINT32_C(0x70000000)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Mask containing the valid flags. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGF_DISAS_FLAGS_VALID_MASK UINT32_C(0x7000007f)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** @} */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
100b161379af7255c69e27587cc746e5f76ff050vboxsync/** Special flat selector. */
100b161379af7255c69e27587cc746e5f76ff050vboxsync#define DBGF_SEL_FLAT 1
100b161379af7255c69e27587cc746e5f76ff050vboxsync
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3DisasInstrEx(PVM pVM, VMCPUID idCpu, RTSEL Sel, RTGCPTR GCPtr, uint32_t fFlags,
100b161379af7255c69e27587cc746e5f76ff050vboxsync char *pszOutput, uint32_t cbOutput, uint32_t *pcbInstr);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3DisasInstrCurrent(PVMCPU pVCpu, char *pszOutput, uint32_t cbOutput);
100b161379af7255c69e27587cc746e5f76ff050vboxsyncVMMR3DECL(int) DBGFR3DisasInstrCurrentLogInternal(PVMCPU pVCpu, const char *pszPrefix);
100b161379af7255c69e27587cc746e5f76ff050vboxsync
100b161379af7255c69e27587cc746e5f76ff050vboxsync/** @def DBGFR3DisasInstrCurrentLog
100b161379af7255c69e27587cc746e5f76ff050vboxsync * Disassembles the current guest context instruction and writes it to the log.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * All registers and data will be displayed. Addresses will be attempted resolved to symbols.
100b161379af7255c69e27587cc746e5f76ff050vboxsync */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#ifdef LOG_ENABLED
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync# define DBGFR3DisasInstrCurrentLog(pVCpu, pszPrefix) \
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync do { \
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync if (LogIsEnabled()) \
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync DBGFR3DisasInstrCurrentLogInternal(pVCpu, pszPrefix); \
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync } while (0)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#else
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync# define DBGFR3DisasInstrCurrentLog(pVCpu, pszPrefix) do { } while (0)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#endif
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsyncVMMR3DECL(int) DBGFR3DisasInstrLogInternal(PVMCPU pVCpu, RTSEL Sel, RTGCPTR GCPtr);
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** @def DBGFR3DisasInstrLog
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Disassembles the specified guest context instruction and writes it to the log.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Addresses will be attempted resolved to symbols.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * @thread Any EMT.
100b161379af7255c69e27587cc746e5f76ff050vboxsync */
100b161379af7255c69e27587cc746e5f76ff050vboxsync#ifdef LOG_ENABLED
100b161379af7255c69e27587cc746e5f76ff050vboxsync# define DBGFR3DisasInstrLog(pVCpu, Sel, GCPtr) \
100b161379af7255c69e27587cc746e5f76ff050vboxsync do { \
100b161379af7255c69e27587cc746e5f76ff050vboxsync if (LogIsEnabled()) \
100b161379af7255c69e27587cc746e5f76ff050vboxsync DBGFR3DisasInstrLogInternal(pVCpu, Sel, GCPtr); \
100b161379af7255c69e27587cc746e5f76ff050vboxsync } while (0)
100b161379af7255c69e27587cc746e5f76ff050vboxsync#else
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync# define DBGFR3DisasInstrLog(pVCpu, Sel, GCPtr) do { } while (0)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#endif
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsyncVMMR3DECL(int) DBGFR3MemScan(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, RTGCUINTPTR cbRange, RTGCUINTPTR uAlign,
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync const void *pvNeedle, size_t cbNeedle, PDBGFADDRESS pHitAddress);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3MemRead(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, void *pvBuf, size_t cbRead);
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsyncVMMR3DECL(int) DBGFR3MemReadString(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, char *pszBuf, size_t cbBuf);
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsyncVMMR3DECL(int) DBGFR3MemWrite(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, void const *pvBuf, size_t cbRead);
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** @name Flags for DBGFR3PagingDumpEx, PGMR3DumpHierarchyHCEx and
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * PGMR3DumpHierarchyGCEx
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * @{ */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** The CR3 from the current CPU state. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_CURRENT_CR3 RT_BIT_32(0)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** The current CPU paging mode (PSE, PAE, LM, EPT, NX). */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_CURRENT_MODE RT_BIT_32(1)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Whether PSE is enabled (!DBGFPGDMP_FLAGS_CURRENT_STATE).
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Same value as X86_CR4_PSE. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_PSE RT_BIT_32(4) /* */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Whether PAE is enabled (!DBGFPGDMP_FLAGS_CURRENT_STATE).
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Same value as X86_CR4_PAE. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_PAE RT_BIT_32(5) /* */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Whether LME is enabled (!DBGFPGDMP_FLAGS_CURRENT_STATE).
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Same value as MSR_K6_EFER_LME. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_LME RT_BIT_32(8)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Whether nested paging is enabled (!DBGFPGDMP_FLAGS_CURRENT_STATE). */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_NP RT_BIT_32(9)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Whether extended nested page tables are enabled
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * (!DBGFPGDMP_FLAGS_CURRENT_STATE). */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_EPT RT_BIT_32(10)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Whether no-execution is enabled (!DBGFPGDMP_FLAGS_CURRENT_STATE).
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Same value as MSR_K6_EFER_NXE. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_NXE RT_BIT_32(11)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Whether to print the CR3. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_PRINT_CR3 RT_BIT_32(27)
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Whether to print the header. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_HEADER RT_BIT_32(28)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Whether to dump additional page information. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_PAGE_INFO RT_BIT_32(29)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Dump the shadow tables if set.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Cannot be used together with DBGFPGDMP_FLAGS_GUEST. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_SHADOW RT_BIT_32(30)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Dump the guest tables if set.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Cannot be used together with DBGFPGDMP_FLAGS_SHADOW. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_GUEST RT_BIT_32(31)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Mask of valid bits. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_VALID_MASK UINT32_C(0xf8000f33)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** The mask of bits controlling the paging mode. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFPGDMP_FLAGS_MODE_MASK UINT32_C(0x00000f32)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** @} */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsyncVMMDECL(int) DBGFR3PagingDumpEx(PVM pVM, VMCPUID idCpu, uint32_t fFlags, uint64_t cr3, uint64_t u64FirstAddr,
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync uint64_t u64LastAddr, uint32_t cMaxDepth, PCDBGFINFOHLP pHlp);
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** @name DBGFR3SelQueryInfo flags.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * @{ */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Get the info from the guest descriptor table. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFSELQI_FLAGS_DT_GUEST UINT32_C(0)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** Get the info from the shadow descriptor table.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Only works in raw-mode. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFSELQI_FLAGS_DT_SHADOW UINT32_C(1)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** If currently executing in in 64-bit mode, blow up data selectors. */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync#define DBGFSELQI_FLAGS_DT_ADJ_64BIT_MODE UINT32_C(2)
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/** @} */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsyncVMMR3DECL(int) DBGFR3SelQueryInfo(PVM pVM, VMCPUID idCpu, RTSEL Sel, uint32_t fFlags, PDBGFSELINFO pSelInfo);
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync/**
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync * Register identifiers.
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsync */
817577d2c4d6dee709de7a92d3bb7d0aeedae9aevboxsynctypedef enum DBGFREG
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /* General purpose registers: */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_AL = 0,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_AX = DBGFREG_AL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_EAX = DBGFREG_AL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_RAX = DBGFREG_AL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_CL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_CX = DBGFREG_CL,
100b161379af7255c69e27587cc746e5f76ff050vboxsync DBGFREG_ECX = DBGFREG_CL,
100b161379af7255c69e27587cc746e5f76ff050vboxsync DBGFREG_RCX = DBGFREG_CL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_DL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_DX = DBGFREG_DL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_EDX = DBGFREG_DL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_RDX = DBGFREG_DL,
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_BL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_BX = DBGFREG_BL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_EBX = DBGFREG_BL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_RBX = DBGFREG_BL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_SPL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_SP = DBGFREG_SPL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_ESP = DBGFREG_SPL,
30f07af559efcbd967e801903746fc21f81ee533vboxsync DBGFREG_RSP = DBGFREG_SPL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_BPL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_BP = DBGFREG_BPL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_EBP = DBGFREG_BPL,
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREG_RBP = DBGFREG_BPL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_SIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_SI = DBGFREG_SIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_ESI = DBGFREG_SIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_RSI = DBGFREG_SIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_DIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_DI = DBGFREG_DIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_EDI = DBGFREG_DIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_RDI = DBGFREG_DIL,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R8,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R8B = DBGFREG_R8,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R8W = DBGFREG_R8,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R8D = DBGFREG_R8,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R9,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R9B = DBGFREG_R9,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R9W = DBGFREG_R9,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R9D = DBGFREG_R9,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R10,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R10B = DBGFREG_R10,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R10W = DBGFREG_R10,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R10D = DBGFREG_R10,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R11,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R11B = DBGFREG_R11,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R11W = DBGFREG_R11,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R11D = DBGFREG_R11,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R12,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R12B = DBGFREG_R12,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R12W = DBGFREG_R12,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R12D = DBGFREG_R12,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R13,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R13B = DBGFREG_R13,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R13W = DBGFREG_R13,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R13D = DBGFREG_R13,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R14,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R14B = DBGFREG_R14,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R14W = DBGFREG_R14,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R14D = DBGFREG_R14,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R15,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R15B = DBGFREG_R15,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R15W = DBGFREG_R15,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_R15D = DBGFREG_R15,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /* Segments and other special registers: */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_CS,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_CS_ATTR,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_CS_BASE,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_CS_LIMIT,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_DS,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_DS_ATTR,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_DS_BASE,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_DS_LIMIT,
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync DBGFREG_ES,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ES_ATTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ES_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ES_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FS_ATTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FS_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FS_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_GS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_GS_ATTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_GS_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_GS_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_SS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_SS_ATTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_SS_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_SS_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_IP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_EIP = DBGFREG_IP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_RIP = DBGFREG_IP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FLAGS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_EFLAGS = DBGFREG_FLAGS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_RFLAGS = DBGFREG_FLAGS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /* FPU: */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FCW,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FSW,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FTW,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FOP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FPUIP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FPUCS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FPUDP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_FPUDS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MXCSR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MXCSR_MASK,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST0,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST1,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST2,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST3,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST4,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST5,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST6,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ST7,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MM0,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MM1,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MM2,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MM3,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MM4,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MM5,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MM6,
efdc3bd872b77b5ec7d19d77504264de24b0582bvboxsync DBGFREG_MM7,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /* SSE: */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM0,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM1,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM2,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM3,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM4,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM5,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM6,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM7,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM8,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM9,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM10,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM11,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM12,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM13,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM14,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_XMM15,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /** @todo add XMM aliases. */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /* System registers: */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_GDTR_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_GDTR_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_IDTR_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_IDTR_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_LDTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_LDTR_ATTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_LDTR_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_LDTR_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_TR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_TR_ATTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_TR_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_TR_LIMIT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_CR0,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_CR2,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_CR3,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_CR4,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_CR8,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_DR0,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_DR1,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_DR2,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_DR3,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_DR6,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_DR7,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /* MSRs: */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_IA32_APICBASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_IA32_CR_PAT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_IA32_PERF_STATUS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_IA32_SYSENTER_CS,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_IA32_SYSENTER_EIP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_IA32_SYSENTER_ESP,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_IA32_TSC,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K6_EFER,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K6_STAR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K8_CSTAR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K8_FS_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K8_GS_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K8_KERNEL_GS_BASE,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K8_LSTAR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K8_SF_MASK,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_MSR_K8_TSC_AUX,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /** The number of registers to pass to DBGFR3RegQueryAll. */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_ALL_COUNT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /* Misc aliases that doesn't need be part of the 'all' query: */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_AH = DBGFREG_ALL_COUNT,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_CH,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_DH,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_BH,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_GDTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_IDTR,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /** The end of the registers. */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_END,
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync /** The usual 32-bit type hack. */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync DBGFREG_32BIT_HACK = 0x7fffffff
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync} DBGFREG;
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync/** Pointer to a register identifier. */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsynctypedef DBGFREG *PDBGFREG;
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync/** Pointer to a const register identifier. */
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsynctypedef DBGFREG const *PCDBGFREG;
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync/**
4f2b002896072b0b5a7cb566341c8bac5e69392bvboxsync * Register value type.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsynctypedef enum DBGFREGVALTYPE
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFREGVALTYPE_INVALID = 0,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Unsigned 8-bit register value. */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync DBGFREGVALTYPE_U8,
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync /** Unsigned 16-bit register value. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE_U16,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Unsigned 32-bit register value. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE_U32,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Unsigned 64-bit register value. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE_U64,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Unsigned 128-bit register value. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DBGFREGVALTYPE_U128,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Long double register value. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE_R80,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Descriptor table register value. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE_DTR,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** End of the valid register value types. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE_END,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The usual 32-bit type hack. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE_32BIT_HACK = 0x7fffffff
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync} DBGFREGVALTYPE;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/** Pointer to a register value type. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef DBGFREGVALTYPE *PDBGFREGVALTYPE;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * A generic register value type.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef union DBGFREGVAL
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync{
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync uint8_t u8; /**< The 8-bit view. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync uint16_t u16; /**< The 16-bit view. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync uint32_t u32; /**< The 32-bit view. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync uint64_t u64; /**< The 64-bit view. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync RTUINT128U u128; /**< The 128-bit view. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync RTFLOAT80U2 r80; /**< The 80-bit floating point view. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** GDTR or LDTR (DBGFREGVALTYPE_DTR). */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync struct
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync {
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The table address. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint64_t u64Base;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The table limit (length minus 1). */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint32_t u32Limit;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync } dtr;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint8_t au8[16]; /**< The 8-bit array view. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint16_t au16[8]; /**< The 16-bit array view. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint32_t au32[4]; /**< The 32-bit array view. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint64_t au64[2]; /**< The 64-bit array view. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync RTUINT128U u;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync} DBGFREGVAL;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync/** Pointer to a generic register value type. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsynctypedef DBGFREGVAL *PDBGFREGVAL;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync/** Pointer to a const generic register value type. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsynctypedef DBGFREGVAL const *PCDBGFREGVAL;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync/**
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync * Register sub-field descriptor.
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsynctypedef struct DBGFREGSUBFIELD
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync{
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The name of the sub-field. NULL is used to terminate the array. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync const char *pszName;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The index of the first bit. Ignored if pfnGet is set. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint8_t iFirstBit;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The number of bits. Mandatory. */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync uint8_t cBits;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The shift count. Not applied when pfnGet is set, but used to
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync * calculate the minimum type. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync int8_t cShift;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** Sub-field flags, DBGFREGSUBFIELD_FLAGS_XXX. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync uint8_t fFlags;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Getter (optional). */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(int, pfnGet)(void *pvUser, struct DBGFREGSUBFIELD const *pSubField, PRTUINT128U puValue);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Setter (optional). */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(int, pfnSet)(void *pvUser, struct DBGFREGSUBFIELD const *pSubField, RTUINT128U uValue, RTUINT128U fMask);
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync} DBGFREGSUBFIELD;
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync/** Pointer to a const register sub-field descriptor. */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsynctypedef DBGFREGSUBFIELD const *PCDBGFREGSUBFIELD;
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync/** @name DBGFREGSUBFIELD_FLAGS_XXX
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync * @{ */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync/** The sub-field is read-only. */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync#define DBGFREGSUBFIELD_FLAGS_READ_ONLY UINT8_C(0x01)
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync/** @} */
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Macro for creating a read-write sub-field entry without getters. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync#define DBGFREGSUBFIELD_RW(a_szName, a_iFirstBit, a_cBits, a_cShift) \
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync { a_szName, a_iFirstBit, a_cBits, a_cShift, 0 /*fFlags*/, NULL /*pfnGet*/, NULL /*pfnSet*/ }
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Macro for creating a read-write sub-field entry with getters. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync#define DBGFREGSUBFIELD_RW_SG(a_szName, a_cBits, a_cShift, a_pfnGet, a_pfnSet) \
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync { a_szName, 0 /*iFirstBit*/, a_cBits, a_cShift, 0 /*fFlags*/, a_pfnGet, a_pfnSet }
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Macro for creating a terminator sub-field entry. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync#define DBGFREGSUBFIELD_TERMINATOR() \
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync { NULL, 0, 0, 0, 0, NULL, NULL }
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Register alias descriptor.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef struct DBGFREGALIAS
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync{
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The alias name. NULL is used to terminate the array. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync const char *pszName;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Set to a valid type if the alias has a different type. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE enmType;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync} DBGFREGALIAS;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Pointer to a const register alias descriptor. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef DBGFREGALIAS const *PCDBGFREGALIAS;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Register descriptor.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef struct DBGFREGDESC
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync{
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The normal register name. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync const char *pszName;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The register identifier if this is a CPU register. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREG enmReg;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The default register type. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE enmType;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Flags, see DBGFREG_FLAGS_XXX. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync uint32_t fFlags;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The internal register indicator.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * For CPU registers this is the offset into the CPUMCTX structure,
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * thuse the 'off' prefix. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t offRegister;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Getter. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DECLCALLBACKMEMBER(int, pfnGet)(void *pvUser, struct DBGFREGDESC const *pDesc, PDBGFREGVAL pValue);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** Setter. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync DECLCALLBACKMEMBER(int, pfnSet)(void *pvUser, struct DBGFREGDESC const *pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Aliases (optional). */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync PCDBGFREGALIAS paAliases;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Sub fields (optional). */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync PCDBGFREGSUBFIELD paSubFields;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync} DBGFREGDESC;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** @name Macros for constructing DBGFREGDESC arrays.
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync * @{ */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFREGDESC_RW(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet) \
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, 0 /*fFlags*/, a_offRegister, a_pfnGet, a_pfnSet, NULL /*paAlises*/, NULL /*paSubFields*/ }
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFREGDESC_RO(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet) \
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, DBGFREG_FLAGS_READ_ONLY, a_offRegister, a_pfnGet, a_pfnSet, NULL /*paAlises*/, NULL /*paSubFields*/ }
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFREGDESC_RW_A(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases) \
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, 0 /*fFlags*/, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, NULL /*paSubFields*/ }
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync#define DBGFREGDESC_RO_A(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases) \
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, DBGFREG_FLAGS_READ_ONLY, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, NULL /*paSubFields*/ }
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync#define DBGFREGDESC_RW_S(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet, a_paSubFields) \
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, 0 /*fFlags*/, a_offRegister, a_pfnGet, a_pfnSet, /*paAliases*/, a_paSubFields }
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFREGDESC_RO_S(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet, a_paSubFields) \
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, DBGFREG_FLAGS_READ_ONLY, a_offRegister, a_pfnGet, a_pfnSet, /*paAliases*/, a_paSubFields }
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync#define DBGFREGDESC_RW_AS(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields) \
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, 0 /*fFlags*/, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields }
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFREGDESC_RO_AS(a_szName, a_TypeSuff, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields) \
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync { a_szName, DBGFREG_END, DBGFREGVALTYPE_##a_TypeSuff, DBGFREG_FLAGS_READ_ONLY, a_offRegister, a_pfnGet, a_pfnSet, a_paAliases, a_paSubFields }
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync#define DBGFREGDESC_TERMINATOR() \
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync { NULL, DBGFREG_END, DBGFREGVALTYPE_INVALID, 0, 0, NULL, NULL, NULL, NULL }
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** @} */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** @name DBGFREG_FLAGS_XXX
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @{ */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** The register is read-only. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync#define DBGFREG_FLAGS_READ_ONLY RT_BIT_32(0)
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** @} */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Entry in a batch query or set operation.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef struct DBGFREGENTRY
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync{
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The register identifier. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREG enmReg;
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync /** The size of the value in bytes. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync DBGFREGVALTYPE enmType;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The register value. The valid view is indicated by enmType. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVAL Val;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync} DBGFREGENTRY;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Pointer to a register entry in a batch operation. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef DBGFREGENTRY *PDBGFREGENTRY;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Pointer to a const register entry in a batch operation. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef DBGFREGENTRY const *PCDBGFREGENTRY;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryU8( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint8_t *pu8);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryU16( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint16_t *pu16);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryU32( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint32_t *pu32);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryU64( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64);
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryU128(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint128_t *pu128);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryLrd( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, long double *plrd);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryXdtr(PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64Base, uint16_t *pu16Limit);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryBatch(PVM pVM,VMCPUID idCpu, PDBGFREGENTRY paRegs, size_t cRegs);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuQueryAll( PVM pVM, VMCPUID idCpu, PDBGFREGENTRY paRegs, size_t cRegs);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuSetU8( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint8_t u8);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuSetU16( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint16_t u16);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuSetU32( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint32_t u32);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuSetU64( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t u64);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuSetU128( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint128_t u128);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuSetLrd( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, long double lrd);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegCpuSetBatch( PVM pVM, VMCPUID idCpu, PCDBGFREGENTRY paRegs, size_t cRegs);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(const char *) DBGFR3RegCpuName(PVM pVM, DBGFREG enmReg, DBGFREGVALTYPE enmType);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3_INT_DECL(int) DBGFR3RegRegisterCpu(PVM pVM, PVMCPU pVCpu, PCDBGFREGDESC paRegisters);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegRegisterDevice(PVM pVM, PCDBGFREGDESC paRegisters, PPDMDEVINS pDevIns, const char *pszPrefix, uint32_t iInstance);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Entry in a named batch query or set operation.
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef struct DBGFREGENTRYNM
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync{
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The register name. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync const char *pszName;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The size of the value in bytes. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVALTYPE enmType;
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync /** The register value. The valid view is indicated by enmType. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFREGVAL Val;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync} DBGFREGENTRYNM;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Pointer to a named register entry in a batch operation. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef DBGFREGENTRYNM *PDBGFREGENTRYNM;
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync/** Pointer to a const named register entry in a batch operation. */
9b62e122a37f42c2bbaae1312ad198f44bebea5cvboxsynctypedef DBGFREGENTRYNM const *PCDBGFREGENTRYNM;
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQuery( PVM pVM, VMCPUID idDefCpu, const char *pszReg, PDBGFREGVAL pValue, PDBGFREGVALTYPE penmType);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryU8( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint8_t *pu8);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryU16( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint16_t *pu16);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryU32( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint32_t *pu32);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryU64( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint64_t *pu64);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryU128(PVM pVM, VMCPUID idDefCpu, const char *pszReg, PRTUINT128U pu128);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/*VMMR3DECL(int) DBGFR3RegNmQueryLrd( PVM pVM, VMCPUID idDefCpu, const char *pszReg, long double *plrd);*/
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryXdtr(PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint64_t *pu64Base, uint16_t *pu16Limit);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryBatch(PVM pVM,VMCPUID idDefCpu, DBGFREGENTRYNM paRegs, size_t cRegs);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmQueryAllCount(PVM pVM, size_t *pcRegs);
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsyncVMMR3DECL(int) DBGFR3RegNmQueryAll( PVM pVM, DBGFREGENTRYNM paRegs, size_t cRegs);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmPrintf( PVM pVM, VMCPUID idDefCpu, char pszBuf, size_t cbBuf, const char *pszFormat, ...);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmPrintfV( PVM pVM, VMCPUID idDefCpu, char pszBuf, size_t cbBuf, const char *pszFormat, ...);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
90624af27b0e648b68167bd3b332d0e3b1d18ab1vboxsyncVMMR3DECL(int) DBGFR3RegNmSetU8( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint8_t u8);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsyncVMMR3DECL(int) DBGFR3RegNmSetU16( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint16_t u16);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmSetU32( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint32_t u32);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmSetU64( PVM pVM, VMCPUID idDefCpu, const char *pszReg, uint64_t u64);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmSetU128( PVM pVM, VMCPUID idDefCpu, const char *pszReg, RTUINT128U u128);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsyncVMMR3DECL(int) DBGFR3RegNmSetLrd( PVM pVM, VMCPUID idDefCpu, const char *pszReg, long double lrd);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3RegNmSetBatch( PVM pVM, VMCPUID idDefCpu, DBGFREGENTRYNM paRegs, size_t cRegs);
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync/** @todo add enumeration methods. */
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync/**
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync * Guest OS digger interface identifier.
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync *
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync * This is for use together with PDBGFR3QueryInterface and is used to
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync * obtain access to optional interfaces.
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync */
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsynctypedef enum DBGFOSINTERFACE
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync{
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync /** The usual invalid entry. */
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync DBGFOSINTERFACE_INVALID = 0,
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync /** Process info. */
cd2274c977e1b722b535e4f601a324e8029b5e43vboxsync DBGFOSINTERFACE_PROCESS,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Thread info. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFOSINTERFACE_THREAD,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The end of the valid entries. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFOSINTERFACE_END,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** The usual 32-bit type blowup. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DBGFOSINTERFACE_32BIT_HACK = 0x7fffffff
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync} DBGFOSINTERFACE;
db87bb1112c1f2827ffa192593174cf845f8f04dvboxsync/** Pointer to a Guest OS digger interface identifier. */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsynctypedef DBGFOSINTERFACE *PDBGFOSINTERFACE;
cf0e96b2c5a08292c6d13e4fdcb2d9518d1983e8vboxsync/** Pointer to a const Guest OS digger interface identifier. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef DBGFOSINTERFACE const *PCDBGFOSINTERFACE;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync/**
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * Guest OS Digger Registration Record.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
680c2aff33be2ee9340c8763a3cb5c218c352bcfvboxsync * This is used with the DBGFR3OSRegister() API.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef struct DBGFOSREG
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync{
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Magic value (DBGFOSREG_MAGIC). */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint32_t u32Magic;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync /** Flags. Reserved. */
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync uint32_t fFlags;
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync /** The size of the instance data. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync uint32_t cbData;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /** Operative System name. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync char szName[24];
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Constructs the instance.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @returns VBox status code.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(int, pfnConstruct)(PVM pVM, void *pvData);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Destroys the instance.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(void, pfnDestruct)(PVM pVM, void *pvData);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Probes the guest memory for OS finger prints.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * No setup or so is performed, it will be followed by a call to pfnInit
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * or pfnRefresh that should take care of that.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @returns true if is an OS handled by this module, otherwise false.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(bool, pfnProbe)(PVM pVM, void *pvData);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Initializes a fresly detected guest, loading symbols and such useful stuff.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * This is called after pfnProbe.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @returns VBox status code.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(int, pfnInit)(PVM pVM, void *pvData);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Refreshes symbols and stuff following a redetection of the same OS.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * This is called after pfnProbe.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync * @returns VBox status code.
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(int, pfnRefresh)(PVM pVM, void *pvData);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Terminates an OS when a new (or none) OS has been detected,
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * and before destruction.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * This is called after pfnProbe and if needed before pfnDestruct.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(void, pfnTerm)(PVM pVM, void *pvData);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Queries the version of the running OS.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * This is only called after pfnInit().
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @returns VBox status code.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pszVersion Where to store the version string.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param cchVersion The size of the version string buffer.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(int, pfnQueryVersion)(PVM pVM, void *pvData, char *pszVersion, size_t cchVersion);
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync /**
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * Queries the pointer to a interface.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync *
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * This is called after pfnProbe.
30f07af559efcbd967e801903746fc21f81ee533vboxsync *
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync * @returns Pointer to the interface if available, NULL if not available.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pVM Pointer to the shared VM structure.
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync * @param pvData Pointer to the instance data.
93e05ea894cefd56ca308d72372b4dd8045bd1eevboxsync * @param enmIf The interface identifier.
eb259de2a9eac4b4dda56e89f5004671f926bd9bvboxsync */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync DECLCALLBACKMEMBER(void *, pfnQueryInterface)(PVM pVM, void *pvData, DBGFOSINTERFACE enmIf);
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
30f07af559efcbd967e801903746fc21f81ee533vboxsync /** Trailing magic (DBGFOSREG_MAGIC). */
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync uint32_t u32EndMagic;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync} DBGFOSREG;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Pointer to a Guest OS digger registration record. */
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsynctypedef DBGFOSREG *PDBGFOSREG;
48e06e6a052c50ecf176f63f5537f80b544bf34avboxsync/** Pointer to a const Guest OS digger registration record. */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsynctypedef DBGFOSREG const *PCDBGFOSREG;
a60be2c64ea23bb7ce4c9998bcd541c4db879fbavboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync/** Magic value for DBGFOSREG::u32Magic and DBGFOSREG::u32EndMagic. (Hitomi Kanehara) */
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync#define DBGFOSREG_MAGIC 0x19830808
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3OSRegister(PVM pVM, PCDBGFOSREG pReg);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3OSDeregister(PVM pVM, PCDBGFOSREG pReg);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3OSDetect(PVM pVM, char *pszName, size_t cchName);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(int) DBGFR3OSQueryNameAndVersion(PVM pVM, char *pszName, size_t cchName, char *pszVersion, size_t cchVersion);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsyncVMMR3DECL(void *) DBGFR3OSQueryInterface(PVM pVM, DBGFOSINTERFACE enmIf);
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
13493ab7596e827b8d0caab2c89e635dd65f78f9vboxsync
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsyncVMMR3DECL(int) DBGFR3CoreWrite(PVM pVM, const char *pszFilename, bool fReplaceFile);
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync/** @} */
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsyncRT_C_DECLS_END
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync#endif
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync
28a2653de6f80a4b1f000cfc52e1a04492d4c151vboxsync