/** @file * DBGF - Debugger Facility, VM Core File Format. */ /* * Copyright (C) 2010-2020 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; * you can redistribute it and/or modify it under the terms of the GNU * General Public License (GPL) as published by the Free Software * Foundation, in version 2 as it comes in the "COPYING" file of the * VirtualBox OSE distribution. VirtualBox OSE is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. * * The contents of this file may alternatively be used under the terms * of the Common Development and Distribution License Version 1.0 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the * VirtualBox OSE distribution, in which case the provisions of the * CDDL are applicable instead of those of the GPL. * * You may elect to license modified versions of this file under the * terms and conditions of either the GPL or the CDDL or both. */ #ifndef VBOX_INCLUDED_vmm_dbgfcorefmt_h #define VBOX_INCLUDED_vmm_dbgfcorefmt_h #ifndef RT_WITHOUT_PRAGMA_ONCE # pragma once #endif #include #include #include RT_C_DECLS_BEGIN /** @defgroup grp_dbgf_corefmt VM Core File Format * @ingroup grp_dbgf * * @todo Add description of the core file format and how the structures in this * file relate to it. Point to X86XSAVEAREA in x86.h for the CPU's * FPU/SSE/AVX/XXX state. * @todo Add the note names. * * @{ */ /** DBGCORECOREDESCRIPTOR::u32Magic. */ #define DBGFCORE_MAGIC UINT32_C(0xc01ac0de) /** DBGCORECOREDESCRIPTOR::u32FmtVersion. */ #define DBGFCORE_FMT_VERSION UINT32_C(0x00010005) /** * An x86 segment selector. */ typedef struct DBGFCORESEL { uint64_t uBase; uint32_t uLimit; uint32_t uAttr; uint16_t uSel; uint16_t uReserved0; uint32_t uReserved1; } DBGFCORESEL; AssertCompileSizeAlignment(DBGFCORESEL, 8); /** * A gdtr/ldtr descriptor. */ typedef struct DBGFCOREXDTR { uint64_t uAddr; uint32_t cb; uint32_t uReserved0; } DBGFCOREXDTR; AssertCompileSizeAlignment(DBGFCOREXDTR, 8); /** * A simpler to parse CPU dump than CPUMCTX. * * Please bump DBGFCORE_FMT_VERSION by 1 if you make any changes to this * structure. */ typedef struct DBGFCORECPU { uint64_t rax; uint64_t rbx; uint64_t rcx; uint64_t rdx; uint64_t rsi; uint64_t rdi; uint64_t r8; uint64_t r9; uint64_t r10; uint64_t r11; uint64_t r12; uint64_t r13; uint64_t r14; uint64_t r15; uint64_t rip; uint64_t rsp; uint64_t rbp; uint64_t rflags; DBGFCORESEL cs; DBGFCORESEL ds; DBGFCORESEL es; DBGFCORESEL fs; DBGFCORESEL gs; DBGFCORESEL ss; uint64_t cr0; uint64_t cr2; uint64_t cr3; uint64_t cr4; uint64_t dr[8]; DBGFCOREXDTR gdtr; DBGFCOREXDTR idtr; DBGFCORESEL ldtr; DBGFCORESEL tr; struct { uint64_t cs; uint64_t eip; uint64_t esp; } sysenter; uint64_t msrEFER; uint64_t msrSTAR; uint64_t msrPAT; uint64_t msrLSTAR; uint64_t msrCSTAR; uint64_t msrSFMASK; uint64_t msrKernelGSBase; uint64_t msrApicBase; uint64_t aXcr[2]; uint32_t cbExt; uint32_t uPadding0; X86XSAVEAREA ext; } DBGFCORECPU; /** Pointer to a DBGF-core CPU. */ typedef DBGFCORECPU *PDBGFCORECPU; /** Pointer to the const DBGF-core CPU. */ typedef const DBGFCORECPU *PCDBGFCORECPU; AssertCompileMemberAlignment(DBGFCORECPU, cr0, 8); AssertCompileMemberAlignment(DBGFCORECPU, msrEFER, 8); AssertCompileMemberAlignment(DBGFCORECPU, ext, 8); AssertCompileSizeAlignment(DBGFCORECPU, 8); /** * The DBGF Core descriptor. */ typedef struct DBGFCOREDESCRIPTOR { /** The core file magic (DBGFCORE_MAGIC) */ uint32_t u32Magic; /** The core file format version (DBGFCORE_FMT_VERSION). */ uint32_t u32FmtVersion; /** Size of this structure (sizeof(DBGFCOREDESCRIPTOR)). */ uint32_t cbSelf; /** VirtualBox version. */ uint32_t u32VBoxVersion; /** VirtualBox revision. */ uint32_t u32VBoxRevision; /** Number of CPUs. */ uint32_t cCpus; } DBGFCOREDESCRIPTOR; AssertCompileSizeAlignment(DBGFCOREDESCRIPTOR, 8); /** Pointer to DBGFCOREDESCRIPTOR data. */ typedef DBGFCOREDESCRIPTOR *PDBGFCOREDESCRIPTOR; /** @} */ RT_C_DECLS_END #endif /* !VBOX_INCLUDED_vmm_dbgfcorefmt_h */