dbgf.h revision 6a8887b42d3f7ff79c8ecec145b64c6447835a0d
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * DBGF - Debugger Facility. (VMM)
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * Copyright (C) 2006-2007 Oracle Corporation
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * This file is part of VirtualBox Open Source Edition (OSE), as
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * available from http://www.virtualbox.org. This file is free software;
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * you can redistribute it and/or modify it under the terms of the GNU
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * General Public License (GPL) as published by the Free Software
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * Foundation, in version 2 as it comes in the "COPYING" file of the
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * The contents of this file may alternatively be used under the terms
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * of the Common Development and Distribution License Version 1.0
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * VirtualBox OSE distribution, in which case the provisions of the
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * CDDL are applicable instead of those of the GPL.
3e8ebc69e18e02f0935b37e8f5837aab18557f50ludovicp * You may elect to license modified versions of this file under the
65faf58a723c5e70638f0a3fb4239f7042301ddeludo * terms and conditions of either the GPL or the CDDL or both.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** @defgroup grp_dbgf The Debugger Facility API
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** @addgroup grp_dbgf_rz The RZ DBGF API
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * @ingroup grp_dbgf
d5af1880773b35da2da505be54be517b746e7410ludovicpVMMRZDECL(int) DBGFRZTrap01Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6);
d5af1880773b35da2da505be54be517b746e7410ludovicpVMMRZDECL(int) DBGFRZTrap03Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * Mixed address.
d5af1880773b35da2da505be54be517b746e7410ludovicp /** The flat address. */
a9bdd643112af44da28ffc614f51413c2ab09669ludo /** The selector offset address. */
a9bdd643112af44da28ffc614f51413c2ab09669ludo /** The selector. DBGF_SEL_FLAT is a legal value. */
a9bdd643112af44da28ffc614f51413c2ab09669ludo /** Flags describing further details about the address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** Pointer to a mixed address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** Pointer to a const mixed address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** @name DBGFADDRESS Flags.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** A 16:16 far address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** A 16:32 far address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** A 16:64 far address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** A flat address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** A physical address. */
d5af1880773b35da2da505be54be517b746e7410ludovicp/** A physical address. */
d5af1880773b35da2da505be54be517b746e7410ludovicp/** The address type mask. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** Set if the address is valid. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** The address is within the hypervisor memoary area (HMA).
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * If not set, the address can be assumed to be a guest address. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** Checks if the mixed address is flat or not. */
d5af1880773b35da2da505be54be517b746e7410ludovicp#define DBGFADDRESS_IS_FLAT(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FLAT )
d5af1880773b35da2da505be54be517b746e7410ludovicp/** Checks if the mixed address is flat or not. */
d5af1880773b35da2da505be54be517b746e7410ludovicp#define DBGFADDRESS_IS_PHYS(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_PHYS )
d5af1880773b35da2da505be54be517b746e7410ludovicp/** Checks if the mixed address is far 16:16 or not. */
d5af1880773b35da2da505be54be517b746e7410ludovicp#define DBGFADDRESS_IS_FAR16(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FAR16 )
d5af1880773b35da2da505be54be517b746e7410ludovicp/** Checks if the mixed address is far 16:32 or not. */
d5af1880773b35da2da505be54be517b746e7410ludovicp#define DBGFADDRESS_IS_FAR32(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FAR32 )
d5af1880773b35da2da505be54be517b746e7410ludovicp/** Checks if the mixed address is far 16:64 or not. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn#define DBGFADDRESS_IS_FAR64(pAddress) ( ((pAddress)->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) == DBGFADDRESS_FLAGS_FAR64 )
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** Checks if the mixed address is valid. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn#define DBGFADDRESS_IS_VALID(pAddress) ( !!((pAddress)->fFlags & DBGFADDRESS_FLAGS_VALID) )
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn/** Checks if the address is flagged as within the HMA. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn#define DBGFADDRESS_IS_HMA(pAddress) ( !!((pAddress)->fFlags & DBGFADDRESS_FLAGS_HMA) )
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbnVMMR3DECL(int) DBGFR3AddrFromSelOff(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, RTSEL Sel, RTUINTPTR off);
d5af1880773b35da2da505be54be517b746e7410ludovicpVMMR3DECL(int) DBGFR3AddrFromSelInfoOff(PVM pVM, PDBGFADDRESS pAddress, PCDBGFSELINFO pSelInfo, RTUINTPTR off);
d5af1880773b35da2da505be54be517b746e7410ludovicpVMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromFlat(PVM pVM, PDBGFADDRESS pAddress, RTGCUINTPTR FlatPtr);
d5af1880773b35da2da505be54be517b746e7410ludovicpVMMR3DECL(PDBGFADDRESS) DBGFR3AddrFromPhys(PVM pVM, PDBGFADDRESS pAddress, RTGCPHYS PhysAddr);
d5af1880773b35da2da505be54be517b746e7410ludovicpVMMR3DECL(bool) DBGFR3AddrIsValid(PVM pVM, PCDBGFADDRESS pAddress);
d5af1880773b35da2da505be54be517b746e7410ludovicpVMMR3DECL(int) DBGFR3AddrToPhys(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, PRTGCPHYS pGCPhys);
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbnVMMR3DECL(int) DBGFR3AddrToHostPhys(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, PRTHCPHYS pHCPhys);
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbnVMMR3DECL(int) DBGFR3AddrToVolatileR3Ptr(PVM pVM, VMCPUID idCpu, PDBGFADDRESS pAddress, bool fReadOnly, void **ppvR3Ptr);
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbnVMMR3DECL(PDBGFADDRESS) DBGFR3AddrAdd(PDBGFADDRESS pAddress, RTGCUINTPTR uAddend);
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbnVMMR3DECL(PDBGFADDRESS) DBGFR3AddrSub(PDBGFADDRESS pAddress, RTGCUINTPTR uSubtrahend);
d5af1880773b35da2da505be54be517b746e7410ludovicp * VMM Debug Event Type.
a9bdd643112af44da28ffc614f51413c2ab09669ludo /** Halt completed.
a9bdd643112af44da28ffc614f51413c2ab09669ludo * This notifies that a halt command have been successfully completed.
a9bdd643112af44da28ffc614f51413c2ab09669ludo /** Detach completed.
a9bdd643112af44da28ffc614f51413c2ab09669ludo * This notifies that the detach command have been successfully completed.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** The command from the debugger is not recognized.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * This means internal error or half implemented features.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Fatal error.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * This notifies a fatal error in the VMM and that the debugger get's a
6df86604699d401d24863654538c078d3750963ashankar_mbn * chance to first hand information about the the problem.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Breakpoint Hit.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * This notifies that a breakpoint installed by the debugger was hit. The
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * identifier of the breakpoint can be found in the DBGFEVENT::u::Bp::iBp member.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Breakpoint Hit in the Hypervisor.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * This notifies that a breakpoint installed by the debugger was hit. The
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * identifier of the breakpoint can be found in the DBGFEVENT::u::Bp::iBp member.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Assertion in the Hypervisor (breakpoint instruction).
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * This notifies that a breakpoint instruction was hit in the hypervisor context.
2c8454e288252bcfa5e77ea3d35bfed05266b869hajma /** Single Stepped.
2c8454e288252bcfa5e77ea3d35bfed05266b869hajma * This notifies that a single step operation was completed.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Single Stepped.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * This notifies that a hypervisor single step operation was completed.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** The developer have used the DBGFSTOP macro or the PDMDeviceDBGFSTOP function
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * to bring up the debugger at a specific place.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** The VM is terminating.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * When this notification is received, the debugger thread should detach ASAP.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** The usual 32-bit hack. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * The context of an event.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** The usual invalid entry. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Raw mode. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Recompiled mode. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** VMX / AVT mode. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Hypervisor context. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Other mode */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** The usual 32-bit hack */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * VMM Debug Event.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbntypedef struct DBGFEVENT
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Type. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Context */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Type specific data. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Fatal error details. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** The GC return code. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Source location. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** File name. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Function name. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Message. */
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn /** Line number. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** Assertion messages. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** The first message. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** The second message. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** Breakpoint. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** The identifier of the breakpoint which was hit. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** Padding for ensuring that the structure is 8 byte aligned. */
d5af1880773b35da2da505be54be517b746e7410ludovicp/** Pointer to VMM Debug Event. */
d5af1880773b35da2da505be54be517b746e7410ludovicp/** Pointer to const VMM Debug Event. */
d5af1880773b35da2da505be54be517b746e7410ludovicp/** @def DBGFSTOP
3e8ebc69e18e02f0935b37e8f5837aab18557f50ludovicp * Stops the debugger raising a DBGFEVENT_DEVELOPER_STOP event.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * @returns VBox status code which must be propagated up to EM if not VINF_SUCCESS.
9def8137e705ec92bc3a2881a8457795c860fdb1shankar_mbn * @param pVM VM Handle.
d5af1880773b35da2da505be54be517b746e7410ludovicp# define DBGFSTOP(pVM) DBGFR3EventSrc(pVM, DBGFEVENT_DEV_STOP, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL)
62ecec3a82a8b838ee76c1f6610902d8fd7015cbmatthew_swiftVMMR3DECL(void) DBGFR3Relocate(PVM pVM, RTGCINTPTR offDelta);
62ecec3a82a8b838ee76c1f6610902d8fd7015cbmatthew_swiftVMMR3DECL(int) DBGFR3Event(PVM pVM, DBGFEVENTTYPE enmEvent);
62ecec3a82a8b838ee76c1f6610902d8fd7015cbmatthew_swiftVMMR3DECL(int) DBGFR3EventSrc(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszFile, unsigned uLine, const char *pszFunction, const char *pszFormat, ...);
62ecec3a82a8b838ee76c1f6610902d8fd7015cbmatthew_swiftVMMR3DECL(int) DBGFR3EventSrcV(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszFile, unsigned uLine, const char *pszFunction, const char *pszFormat, va_list args);
62ecec3a82a8b838ee76c1f6610902d8fd7015cbmatthew_swiftVMMR3DECL(int) DBGFR3EventAssertion(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszMsg1, const char *pszMsg2);
62ecec3a82a8b838ee76c1f6610902d8fd7015cbmatthew_swiftVMMR3DECL(int) DBGFR3EventBreakpoint(PVM pVM, DBGFEVENTTYPE enmEvent);
62ecec3a82a8b838ee76c1f6610902d8fd7015cbmatthew_swiftVMMR3DECL(int) DBGFR3EventWait(PVM pVM, RTMSINTERVAL cMillies, PCDBGFEVENT *ppEvent);
074f2520bc04a7a93b4123bc58fb40055c9174d2hajma/** Breakpoint type. */
074f2520bc04a7a93b4123bc58fb40055c9174d2hajma /** Free breakpoint entry. */
074f2520bc04a7a93b4123bc58fb40055c9174d2hajma /** Debug register. */
074f2520bc04a7a93b4123bc58fb40055c9174d2hajma /** INT 3 instruction. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** Recompiler. */
d5af1880773b35da2da505be54be517b746e7410ludovicp /** ensure 32-bit size. */
typedef struct DBGFBP
bool fEnabled;
struct DBGFBPREG
} Reg;
struct DBGFBPINT3
} Int3;
struct DBGFBPREM
} Rem;
} DBGFBP;
VMMR3DECL(int) DBGFR3BpSet(PVM pVM, PCDBGFADDRESS pAddress, uint64_t iHitTrigger, uint64_t iHitDisable, PRTUINT piBp);
VMMR3DECL(int) DBGFR3BpSetReg(PVM pVM, PCDBGFADDRESS pAddress, uint64_t iHitTrigger, uint64_t iHitDisable,
VMMR3DECL(int) DBGFR3BpSetREM(PVM pVM, PCDBGFADDRESS pAddress, uint64_t iHitTrigger, uint64_t iHitDisable, PRTUINT piBp);
typedef struct DBGFINFOHLP
} DBGFINFOHLP;
typedef DECLCALLBACK(void) FNDBGFHANDLERDEV(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs);
typedef DECLCALLBACK(void) FNDBGFHANDLERUSB(PPDMUSBINS pUsbIns, PCDBGFINFOHLP pHlp, const char *pszArgs);
typedef DECLCALLBACK(void) FNDBGFHANDLERDRV(PPDMDRVINS pDrvIns, PCDBGFINFOHLP pHlp, const char *pszArgs);
VMMR3DECL(int) DBGFR3InfoRegisterDevice(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDEV pfnHandler, PPDMDEVINS pDevIns);
VMMR3DECL(int) DBGFR3InfoRegisterDriver(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDRV pfnHandler, PPDMDRVINS pDrvIns);
VMMR3DECL(int) DBGFR3InfoRegisterInternal(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERINT pfnHandler);
VMMR3DECL(int) DBGFR3InfoRegisterInternalEx(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLERINT pfnHandler, uint32_t fFlags);
VMMR3DECL(int) DBGFR3InfoRegisterExternal(PVM pVM, const char *pszName, const char *pszDesc, PFNDBGFHANDLEREXT pfnHandler, void *pvUser);
#ifdef LOG_ENABLED
if (LogIsEnabled()) \
typedef DECLCALLBACK(int) FNDBGFINFOENUM(PVM pVM, const char *pszName, const char *pszDesc, void *pvUser);
typedef struct DBGFSYMBOL
} DBGFSYMBOL;
typedef struct DBGFLINE
} DBGFLINE;
VMMR3DECL(int) DBGFR3AsLoadImage(PVM pVM, RTDBGAS hDbgAs, const char *pszFilename, const char *pszModName, PCDBGFADDRESS pModAddress, RTDBGSEGIDX iModSeg, uint32_t fFlags);
VMMR3DECL(int) DBGFR3AsLoadMap(PVM pVM, RTDBGAS hDbgAs, const char *pszFilename, const char *pszModName, PCDBGFADDRESS pModAddress, RTDBGSEGIDX iModSeg, RTGCUINTPTR uSubtrahend, uint32_t fFlags);
VMMR3DECL(int) DBGFR3AsLinkModule(PVM pVM, RTDBGAS hDbgAs, RTDBGMOD hMod, PCDBGFADDRESS pModAddress, RTDBGSEGIDX iModSeg, uint32_t fFlags);
VMMR3DECL(int) DBGFR3AsSymbolByAddr(PVM pVM, RTDBGAS hDbgAs, PCDBGFADDRESS pAddress, PRTGCINTPTR poffDisp, PRTDBGSYMBOL pSymbol, PRTDBGMOD phMod);
VMMR3DECL(PRTDBGSYMBOL) DBGFR3AsSymbolByAddrA(PVM pVM, RTDBGAS hDbgAs, PCDBGFADDRESS pAddress, PRTGCINTPTR poffDisp, PRTDBGMOD phMod);
VMMR3DECL(int) DBGFR3AsSymbolByName(PVM pVM, RTDBGAS hDbgAs, const char *pszSymbol, PRTDBGSYMBOL pSymbol, PRTDBGMOD phMod);
VMMR3DECL(int) DBGFR3ModuleLoad(PVM pVM, const char *pszFilename, RTGCUINTPTR AddressDelta, const char *pszName, RTGCUINTPTR ModuleAddress, unsigned cbImage);
VMMR3DECL(void) DBGFR3ModuleRelocate(PVM pVM, RTGCUINTPTR OldImageBase, RTGCUINTPTR NewImageBase, RTGCUINTPTR cbImage,
VMMR3DECL(int) DBGFR3SymbolAdd(PVM pVM, RTGCUINTPTR ModuleAddress, RTGCUINTPTR SymbolAddress, RTUINT cbSymbol, const char *pszSymbol);
VMMR3DECL(int) DBGFR3SymbolByAddr(PVM pVM, RTGCUINTPTR Address, PRTGCINTPTR poffDisplacement, PDBGFSYMBOL pSymbol);
VMMR3DECL(int) DBGFR3LineByAddr(PVM pVM, RTGCUINTPTR Address, PRTGCINTPTR poffDisplacement, PDBGFLINE pLine);
VMMR3DECL(PDBGFLINE) DBGFR3LineByAddrAlloc(PVM pVM, RTGCUINTPTR Address, PRTGCINTPTR poffDisplacement);
typedef enum DBGFRETRUNTYPE
switch (enmRetType)
case DBGFRETURNTYPE_IRET64:
typedef struct DBGFSTACKFRAME
} Args;
typedef enum DBGFCODETYPE
DBGFCODETYPE_INVALID = 0,
} DBGFCODETYPE;
VMMR3DECL(int) DBGFR3StackWalkBegin(PVM pVM, VMCPUID idCpu, DBGFCODETYPE enmCodeType, PCDBGFSTACKFRAME *ppFirstFrame);
VMMR3DECL(int) DBGFR3StackWalkBeginEx(PVM pVM, VMCPUID idCpu, DBGFCODETYPE enmCodeType, PCDBGFADDRESS pAddrFrame,
VMMR3DECL(int) DBGFR3DisasInstrEx(PVM pVM, VMCPUID idCpu, RTSEL Sel, RTGCPTR GCPtr, uint32_t fFlags,
#ifdef LOG_ENABLED
if (LogIsEnabled()) \
#ifdef LOG_ENABLED
if (LogIsEnabled()) \
VMMR3DECL(int) DBGFR3MemScan(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, RTGCUINTPTR cbRange, RTGCUINTPTR uAlign,
VMMR3DECL(int) DBGFR3MemRead(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, void *pvBuf, size_t cbRead);
VMMR3DECL(int) DBGFR3MemReadString(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, char *pszBuf, size_t cbBuf);
VMMR3DECL(int) DBGFR3MemWrite(PVM pVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, void const *pvBuf, size_t cbRead);
VMMDECL(int) DBGFR3PagingDumpEx(PVM pVM, VMCPUID idCpu, uint32_t fFlags, uint64_t cr3, uint64_t u64FirstAddr,
VMMR3DECL(int) DBGFR3SelQueryInfo(PVM pVM, VMCPUID idCpu, RTSEL Sel, uint32_t fFlags, PDBGFSELINFO pSelInfo);
typedef enum DBGFREG
DBGFREG_AL = 0,
} DBGFREG;
VMMR3DECL(int) DBGFR3RegQueryXdtr( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint64_t *pu64Base, uint16_t *pu16Limit);
typedef enum DBGFOSINTERFACE
typedef struct DBGFOSREG
DECLCALLBACKMEMBER(int, pfnQueryVersion)(PVM pVM, void *pvData, char *pszVersion, size_t cchVersion);
} DBGFOSREG;
VMMR3DECL(int) DBGFR3OSQueryNameAndVersion(PVM pVM, char *pszName, size_t cchName, char *pszVersion, size_t cchVersion);