SELMInternal.h revision 7d87a14a824aa06687c8287d87ef9d9440acd8e6
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * SELM - Internal header file.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Copyright (C) 2006-2012 Oracle Corporation
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * available from http://www.virtualbox.org. This file is free software;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * you can redistribute it and/or modify it under the terms of the GNU
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * General Public License (GPL) as published by the Free Software
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** @defgroup grp_selm_int Internals
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * @ingroup grp_selm
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * @internal
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** Enable or disable tracking of Shadow GDT/LDT/TSS.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#if defined(VBOX_WITH_RAW_MODE) || defined(DOXYGEN_RUNNING)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** Enable or disable tracking of Guest GDT/LDT/TSS.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#if defined(VBOX_WITH_RAW_MODE) || defined(DOXYGEN_RUNNING)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** The number of GDTS allocated for our GDT. (full size) */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** aHyperSel index to retrieve hypervisor selectors */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** The Flat CS selector used by the VMM inside the GC. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** The Flat DS selector used by the VMM inside the GC. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** The 64-bit mode CS selector used by the VMM inside the GC. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** The TSS selector used by the VMM inside the GC. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** The TSS selector for taking trap 08 (\#DF). */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** Number of GDTs we need for internal use */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define SELM_HYPER_SEL_MAX (SELM_HYPER_SEL_TSS_TRAP08 + 1)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** Default GDT selectors we use for the hypervisor. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define SELM_HYPER_DEFAULT_SEL_CS ((SELM_GDT_ELEMENTS - 0x1) << 3)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define SELM_HYPER_DEFAULT_SEL_DS ((SELM_GDT_ELEMENTS - 0x2) << 3)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define SELM_HYPER_DEFAULT_SEL_CS64 ((SELM_GDT_ELEMENTS - 0x3) << 3)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define SELM_HYPER_DEFAULT_SEL_TSS ((SELM_GDT_ELEMENTS - 0x4) << 3)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define SELM_HYPER_DEFAULT_SEL_TSS_TRAP08 ((SELM_GDT_ELEMENTS - 0x5) << 3)
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/** The lowest value default we use. */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define SELM_HYPER_DEFAULT_BASE SELM_HYPER_DEFAULT_SEL_TSS_TRAP08
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Converts a SELM pointer into a VM pointer.
typedef struct SELM
bool fGuestTss32Bit;
bool fGDTRangeRegistered;
bool fDisableMonitoring;
bool fSyncTSSRing0Stack;
#ifdef VBOX_WITH_STATISTICS
VMMRCDECL(int) selmRCGuestGDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
VMMRCDECL(int) selmRCGuestLDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
VMMRCDECL(int) selmRCGuestTSSWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
VMMRCDECL(int) selmRCShadowGDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
VMMRCDECL(int) selmRCShadowLDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
VMMRCDECL(int) selmRCShadowTSSWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
#ifdef VBOX_WITH_RAW_RING1