Index: trunk/src/VBox/VMM/Makefile.kmk
===================================================================
--- trunk/src/VBox/VMM/Makefile.kmk	(revision 50952)
+++ trunk/src/VBox/VMM/Makefile.kmk	(revision 50953)
@@ -147,4 +147,6 @@
 	VMMR3/EMHM.cpp \
 	VMMR3/FTM.cpp \
+	VMMR3/GIM.cpp \
+	VMMR3/GIMHv.cpp \
 	VMMR3/IEMR3.cpp \
 	VMMR3/IOM.cpp \
@@ -223,4 +225,6 @@
 	VMMAll/EMAllA.asm \
 	VMMAll/FTMAll.cpp \
+	VMMAll/GIMAll.cpp \
+	VMMAll/GIMAllHv.cpp \
 	VMMAll/TMAll.cpp \
 	VMMAll/TMAllCpu.cpp \
@@ -461,4 +465,6 @@
  	VMMAll/EMAllA.asm \
 	VMMAll/FTMAll.cpp \
+	VMMAll/GIMAll.cpp \
+	VMMAll/GIMAllHv.cpp \
  	VMMAll/MMAll.cpp \
  	VMMAll/MMAllHyper.cpp \
@@ -563,4 +569,6 @@
  	VMMAll/EMAllA.asm \
  	VMMAll/FTMAll.cpp \
+	VMMAll/GIMAll.cpp \
+	VMMAll/GIMAllHv.cpp \
  	VMMAll/HMAll.cpp \
 	VMMAll/IEMAll.cpp \
Index: trunk/src/VBox/VMM/VMMAll/GIMAll.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMAll/GIMAll.cpp	(revision 50953)
+++ trunk/src/VBox/VMM/VMMAll/GIMAll.cpp	(revision 50953)
@@ -0,0 +1,41 @@
+/* $Id$ */
+/** @file
+ * GIM - Guest Interface Manager - All Contexts.
+ */
+
+/*
+ * Copyright (C) 2014 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.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_GIM
+#include "GIMInternal.h"
+#include <VBox/vmm/vm.h>
+
+
+VMMDECL(bool) GIMIsEnabled(PVM pVM)
+{
+    return pVM->gim.s.fEnabled;
+}
+
+
+VMM_INT_DECL(int) GIMHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
+{
+    PVM pVM = pVCpu->CTX_SUFF(pVM);
+    Assert(GIMIsEnabled(pVM));
+    VMCPU_ASSERT_EMT(pVCpu);
+
+    return pVM->gim.s.CTX_SUFF(pfnHypercall)(pVCpu, pCtx);
+}
+
Index: trunk/src/VBox/VMM/VMMAll/GIMAllHv.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMAll/GIMAllHv.cpp	(revision 50953)
+++ trunk/src/VBox/VMM/VMMAll/GIMAllHv.cpp	(revision 50953)
@@ -0,0 +1,31 @@
+/* $Id$ */
+/** @file
+ * GIM - Guest Interface Manager, Microsoft Hyper-V, All Contexts.
+ */
+
+/*
+ * Copyright (C) 2014 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.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_GIM
+#include "GIMHvInternal.h"
+
+#include <iprt/err.h>
+
+DECLEXPORT(int) GIMHvHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
+{
+    return VINF_SUCCESS;
+}
+
Index: trunk/src/VBox/VMM/VMMR3/GIM.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/GIM.cpp	(revision 50953)
+++ trunk/src/VBox/VMM/VMMR3/GIM.cpp	(revision 50953)
@@ -0,0 +1,214 @@
+/* $Id$ */
+/** @file
+ * GIM - Guest Interface Manager.
+ */
+
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/** @page pg_gim        GIM - The Guest Interface Manager
+ *
+ * The Guest Interface Manager abstracts an interface provider through which
+ * guests may interact with the hypervisor.
+ *
+ * @see grp_gim
+ *
+ *
+ * @section sec_gim_provider   Providers
+ *
+ * A GIM provider implements a particular hypervisor interface such as Microsoft
+ * Hyper-V, Linux KVM and so on. It hooks into various components in the VMM to
+ * ease the guest in running under a recognized virtualized environment. This is
+ * also referred to as paravirtualization interfaces.
+ *
+ * The idea behind this is primarily for making guests more accurate and
+ * efficient when operating in a virtualized environment.
+ *
+ * For instance, a guest when interfaced to VirtualBox through a GIM provider
+ * may rely on the provider (and VirtualBox ultimately) for providing the
+ * correct TSC frequency and may therefore not have to caliberate the TSC
+ * itself, resulting in higher accuracy and saving several CPU cycles.
+ *
+ * Only one provider can be active for a running VM.
+ */
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_GIM
+#include <VBox/log.h>
+#include "GIMInternal.h"
+#include <VBox/vmm/vm.h>
+#include <VBox/vmm/hm.h>
+#include <VBox/vmm/ssm.h>
+
+#include <iprt/err.h>
+#include <iprt/string.h>
+
+/* Include all GIM providers. */
+#include "GIMHvInternal.h"
+
+/*******************************************************************************
+*   Internal Functions                                                         *
+*******************************************************************************/
+static DECLCALLBACK(int) gimR3Save(PVM pVM, PSSMHANDLE pSSM);
+static DECLCALLBACK(int) gimR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
+
+
+/**
+ * Initializes the GIM.
+ *
+ * @returns VBox status code.
+ * @param   pVM         Pointer to the VM.
+ */
+VMMR3_INT_DECL(int) GIMR3Init(PVM pVM)
+{
+    LogFlow(("GIMR3Init\n"));
+
+    /*
+     * Assert alignment and sizes.
+     */
+    AssertCompile(sizeof(pVM->gim.s) <= sizeof(pVM->gim.padding));
+
+    /*
+     * Register the saved state data unit.
+     */
+    int rc;
+#if 0
+    rc = SSMR3RegisterInternal(pVM, "GIM", 0, GIM_SSM_VERSION, sizeof(GIM),
+                                    NULL, NULL, NULL,
+                                    NULL, gimR3Save, NULL,
+                                    NULL, gimR3Load, NULL);
+    if (RT_FAILURE(rc))
+        return rc;
+#endif
+
+    /*
+     * Read configuration.
+     */
+    PCFGMNODE pCfgNode = CFGMR3GetChild(CFGMR3GetRoot(pVM), "GIM/");
+
+    /** @cfgm{GIM/Provider, string}
+     * The name of the GIM provider. The default is "none". */
+    char szProvider[64];
+    rc = CFGMR3QueryStringDef(pCfgNode, "Provider", szProvider, sizeof(szProvider), "none");
+    AssertLogRelRCReturn(rc, rc);
+
+    /*
+     * Setup the GIM provider for this VM.
+     */
+    LogRel(("GIM: Using provider \"%s\"\n", szProvider));
+    if (!RTStrCmp(szProvider, "none"))
+    {
+        Assert(!pVM->gim.s.fEnabled);
+        pVM->gim.s.enmProvider = GIMPROVIDER_NONE;
+    }
+    else
+    {
+        pVM->gim.s.fEnabled = true;
+        if (!RTStrCmp(szProvider, "HyperV"))
+        {
+            pVM->gim.s.enmProvider = GIMPROVIDER_HYPERV;
+            rc = GIMR3HvInit(pVM);
+        }
+        /** @todo KVM and others. */
+        else
+        {
+            LogRel(("GIM: Provider \"%s\" unknown.\n", szProvider));
+            rc = VERR_NOT_SUPPORTED;
+        }
+    }
+
+    return rc;
+}
+
+
+/**
+ * Applies relocations to data and code managed by this
+ * component. This function will be called at init and
+ * whenever the VMM need to relocate it self inside the GC.
+ *
+ * @param   pVM         Pointer to the VM.
+ * @param   offDelta    Relocation delta relative to old location.
+ */
+VMM_INT_DECL(void) GIMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
+{
+    LogFlow(("GIMR3Relocate\n"));
+
+    if (   !pVM->gim.s.fEnabled
+        || HMIsEnabled(pVM))
+    {
+        return;
+    }
+
+    switch (pVM->gim.s.enmProvider)
+    {
+        case GIMPROVIDER_HYPERV:
+        {
+            GIMR3HvRelocate(pVM, offDelta);
+            break;
+        }
+
+        case GIMPROVIDER_KVM:            /** @todo KVM. */
+        default:
+        {
+            AssertMsgFailed(("Invalid provider id %#x\n", pVM->gim.s.enmProvider));
+            break;
+        }
+    }
+}
+
+
+/**
+ * Execute state save operation.
+ *
+ * @returns VBox status code.
+ * @param   pVM             Pointer to the VM.
+ * @param   pSSM            SSM operation handle.
+ */
+DECLCALLBACK(int) gimR3Save(PVM pVM, PSSMHANDLE pSSM)
+{
+    /** @todo save state. */
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * Execute state load operation.
+ *
+ * @returns VBox status code.
+ * @param   pVM             Pointer to the VM.
+ * @param   pSSM            SSM operation handle.
+ * @param   uVersion        Data layout version.
+ * @param   uPass           The data pass.
+ */
+DECLCALLBACK(int) gimR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
+{
+    /** @todo load state. */
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * Terminates the GIM.
+ *
+ * Termination means cleaning up and freeing all resources,
+ * the VM itself is, at this point, powered off or suspended.
+ *
+ * @returns VBox status code.
+ * @param   pVM         Pointer to the VM.
+ */
+VMMR3_INT_DECL(int) GIMR3Term(PVM pVM)
+{
+    return VINF_SUCCESS;
+}
+
Index: trunk/src/VBox/VMM/VMMR3/GIMHv.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/GIMHv.cpp	(revision 50953)
+++ trunk/src/VBox/VMM/VMMR3/GIMHv.cpp	(revision 50953)
@@ -0,0 +1,69 @@
+/* $Id$ */
+/** @file
+ * GIM - Guest Interface Manager, Hyper-V implementation.
+ */
+
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#define LOG_GROUP LOG_GROUP_GIM
+#include "GIMHvInternal.h"
+#include "GIMInternal.h"
+
+#include <iprt/assert.h>
+#include <iprt/err.h>
+
+#include <VBox/vmm/cpum.h>
+#include <VBox/vmm/vm.h>
+#include <VBox/vmm/hm.h>
+#include <VBox/vmm/pdmapi.h>
+
+/*******************************************************************************
+*   Defined Constants And Macros                                               *
+*******************************************************************************/
+#define GIMHV_HYPERCALL                 "GIMHvHypercall"
+
+
+VMMR3_INT_DECL(int) GIMR3HvInit(PVM pVM)
+{
+    AssertReturn(pVM, VERR_INVALID_PARAMETER);
+    AssertReturn(pVM->gim.s.enmProvider == GIMPROVIDER_HYPERV, VERR_INTERNAL_ERROR_5);
+
+    int rc;
+    pVM->gim.s.pfnHypercallR3 = &GIMHvHypercall;
+    if (!HMIsEnabled(pVM))
+    {
+        rc = PDMR3LdrGetSymbolRC(pVM, NULL /* pszModule */, GIMHV_HYPERCALL, &pVM->gim.s.pfnHypercallRC);
+        AssertRCReturn(rc, rc);
+    }
+    rc = PDMR3LdrGetSymbolR0(pVM, NULL /* pszModule */, GIMHV_HYPERCALL, &pVM->gim.s.pfnHypercallR0);
+    AssertRCReturn(rc, rc);
+
+    /*
+     * Expose HVP (Hypervisor Present) bit to the guest.
+     */
+    CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_HVP);
+
+    /** @todo Register CPUID leaves, MSR ranges with CPUM. */
+    return VINF_SUCCESS;
+}
+
+
+VMMR3_INT_DECL(void) GIMR3HvRelocate(PVM pVM, RTGCINTPTR offDelta)
+{
+    int rc = PDMR3LdrGetSymbolRC(pVM, NULL /* pszModule */, GIMHV_HYPERCALL, &pVM->gim.s.pfnHypercallRC);
+    AssertFatalRC(rc);
+}
+
Index: trunk/src/VBox/VMM/VMMR3/VM.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMR3/VM.cpp	(revision 50952)
+++ trunk/src/VBox/VMM/VMMR3/VM.cpp	(revision 50953)
@@ -67,4 +67,5 @@
 #include <VBox/vmm/ftm.h>
 #include <VBox/vmm/hm.h>
+#include <VBox/vmm/gim.h>
 #include "VMInternal.h"
 #include <VBox/vmm/vm.h>
@@ -988,34 +989,43 @@
                                                                     if (RT_SUCCESS(rc))
                                                                     {
-                                                                        rc = PGMR3InitDynMap(pVM);
-                                                                        if (RT_SUCCESS(rc))
-                                                                            rc = MMR3HyperInitFinalize(pVM);
-#ifdef VBOX_WITH_RAW_MODE
-                                                                        if (RT_SUCCESS(rc))
-                                                                            rc = PATMR3InitFinalize(pVM);
-#endif
-                                                                        if (RT_SUCCESS(rc))
-                                                                            rc = PGMR3InitFinalize(pVM);
-                                                                        if (RT_SUCCESS(rc))
-                                                                            rc = SELMR3InitFinalize(pVM);
-                                                                        if (RT_SUCCESS(rc))
-                                                                            rc = TMR3InitFinalize(pVM);
-#ifdef VBOX_WITH_REM
-                                                                        if (RT_SUCCESS(rc))
-                                                                            rc = REMR3InitFinalize(pVM);
-#endif
+                                                                        /* GIM must be init'd after PDM, relies on PDMR3 for
+                                                                           symbol resolution.*/
+                                                                        rc = GIMR3Init(pVM);
                                                                         if (RT_SUCCESS(rc))
                                                                         {
-                                                                            PGMR3MemSetup(pVM, false /*fAtReset*/);
-                                                                            PDMR3MemSetup(pVM, false /*fAtReset*/);
+                                                                            rc = PGMR3InitDynMap(pVM);
+                                                                            if (RT_SUCCESS(rc))
+                                                                                rc = MMR3HyperInitFinalize(pVM);
+#ifdef VBOX_WITH_RAW_MODE
+                                                                            if (RT_SUCCESS(rc))
+                                                                                rc = PATMR3InitFinalize(pVM);
+#endif
+                                                                            if (RT_SUCCESS(rc))
+                                                                                rc = PGMR3InitFinalize(pVM);
+                                                                            if (RT_SUCCESS(rc))
+                                                                                rc = SELMR3InitFinalize(pVM);
+                                                                            if (RT_SUCCESS(rc))
+                                                                                rc = TMR3InitFinalize(pVM);
+#ifdef VBOX_WITH_REM
+                                                                            if (RT_SUCCESS(rc))
+                                                                                rc = REMR3InitFinalize(pVM);
+#endif
+
+                                                                            if (RT_SUCCESS(rc))
+                                                                            {
+                                                                                PGMR3MemSetup(pVM, false /*fAtReset*/);
+                                                                                PDMR3MemSetup(pVM, false /*fAtReset*/);
+                                                                            }
+                                                                            if (RT_SUCCESS(rc))
+                                                                                rc = vmR3InitDoCompleted(pVM, VMINITCOMPLETED_RING3);
+                                                                            if (RT_SUCCESS(rc))
+                                                                            {
+                                                                                LogFlow(("vmR3InitRing3: returns %Rrc\n", VINF_SUCCESS));
+                                                                                return VINF_SUCCESS;
+                                                                            }
+
+                                                                            int rc2 = GIMR3Term(pVM);
+                                                                            AssertRC(rc2);
                                                                         }
-                                                                        if (RT_SUCCESS(rc))
-                                                                            rc = vmR3InitDoCompleted(pVM, VMINITCOMPLETED_RING3);
-                                                                        if (RT_SUCCESS(rc))
-                                                                        {
-                                                                            LogFlow(("vmR3InitRing3: returns %Rrc\n", VINF_SUCCESS));
-                                                                            return VINF_SUCCESS;
-                                                                        }
-
                                                                         int rc2 = PDMR3Term(pVM);
                                                                         AssertRC(rc2);
Index: trunk/src/VBox/VMM/include/GIMHvInternal.h
===================================================================
--- trunk/src/VBox/VMM/include/GIMHvInternal.h	(revision 50953)
+++ trunk/src/VBox/VMM/include/GIMHvInternal.h	(revision 50953)
@@ -0,0 +1,36 @@
+/* $Id$ */
+/** @file
+ * GIM - Hyper-V, Internal header file.
+ */
+
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef ___GIMHvInternal_h
+#define ___GIMHvInternal_h
+
+#include <iprt/cdefs.h>
+#include <VBox/types.h>
+
+RT_C_DECLS_BEGIN
+
+#ifdef IN_RING3
+VMMR3_INT_DECL(int)         GIMR3HvInit(PVM pVM);
+VMMR3_INT_DECL(void)        GIMR3HvRelocate(PVM pVM, RTGCINTPTR offDelta);
+#endif /* IN_RING3 */
+
+DECLEXPORT(int)             GIMHvHypercall(PVMCPU pVCpu, PCPUMCTX pCtx);
+
+RT_C_DECLS_END
+
+#endif /* ___GIMHvInternal_h */
+
Index: trunk/src/VBox/VMM/include/GIMInternal.h
===================================================================
--- trunk/src/VBox/VMM/include/GIMInternal.h	(revision 50953)
+++ trunk/src/VBox/VMM/include/GIMInternal.h	(revision 50953)
@@ -0,0 +1,95 @@
+/* $Id$ */
+/** @file
+ * GIM - Internal header file.
+ */
+
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef ___GIMInternal_h
+#define ___GIMInternal_h
+
+#include <VBox/vmm/gim.h>
+
+#define GIM_SSM_VERSION                 1
+
+
+RT_C_DECLS_BEGIN
+
+/** @defgroup grp_gim_int       Internal
+ * @ingroup grp_gim
+ * @internal
+ * @{
+ */
+
+/**
+ * GIM VM Instance data.
+ * Changes to this must checked against the padding of the gim union in VM!
+ */
+typedef struct GIM
+{
+    /** Whether GIM is enabled for this VM or not. */
+    bool                             fEnabled;
+    /** The provider that is active for this VM. */
+    GIMPROVIDER                      enmProvider;
+    /** Pointer to the provider's ring-3 hypercall handler. */
+    R3PTRTYPE(PFNGIMHYPERCALL)       pfnHypercallR3;
+    /** Pointer to the provider's ring-0 hypercall handler. */
+    R0PTRTYPE(PFNGIMHYPERCALL)       pfnHypercallR0;
+    /** Pointer to the provider's raw-mode context hypercall handler. */
+    RCPTRTYPE(PFNGIMHYPERCALL)       pfnHypercallRC;
+
+    union
+    {
+        struct
+        {
+            /** Hypervisor system identity - Minor version number. */
+            uint16_t                 uVersionMinor;
+            /** Hypervisor system identity - Major version number. */
+            uint16_t                 uVersionMajor;
+            /** Hypervisor system identify - Service branch (Bits 31-24) and number (Bits
+             *  23-0). */
+            uint32_t                 uVersionService;
+            /** Guest OS identity MSR. */
+            uint64_t                 u64GuestOsIdMsr;
+            /** Reference TSC page MSR. */
+            uint64_t                 u64TscPageMsr;
+        } hv;
+
+        struct
+        {
+        } kvm;
+    } u;
+} GIM;
+/** Pointer to GIM VM instance data. */
+typedef GIM *PGIM;
+
+
+/**
+ * GIM VMCPU Instance data.
+ */
+typedef struct GIMCPU
+{
+} GIMCPU;
+/** Pointer to GIM VMCPU instance data. */
+typedef GIMCPU *PGIMCPU;
+
+
+#ifdef IN_RING0
+#endif /* IN_RING0 */
+
+/** @} */
+
+RT_C_DECLS_END
+
+#endif /* ___GIMInternal_h */
+
Index: trunk/src/VBox/VMM/testcase/tstVMStructDTrace.cpp
===================================================================
--- trunk/src/VBox/VMM/testcase/tstVMStructDTrace.cpp	(revision 50952)
+++ trunk/src/VBox/VMM/testcase/tstVMStructDTrace.cpp	(revision 50953)
@@ -45,4 +45,5 @@
 #include "VMMInternal.h"
 #include "DBGFInternal.h"
+#include "GIMInternal.h"
 #include "STAMInternal.h"
 #include "EMInternal.h"
Index: trunk/src/VBox/VMM/testcase/tstVMStructRC.cpp
===================================================================
--- trunk/src/VBox/VMM/testcase/tstVMStructRC.cpp	(revision 50952)
+++ trunk/src/VBox/VMM/testcase/tstVMStructRC.cpp	(revision 50953)
@@ -74,4 +74,5 @@
 #include "VMMInternal.h"
 #include "DBGFInternal.h"
+#include "GIMInternal.h"
 #include "STAMInternal.h"
 #include "CSAMInternal.h"
Index: trunk/src/VBox/VMM/testcase/tstVMStructSize.cpp
===================================================================
--- trunk/src/VBox/VMM/testcase/tstVMStructSize.cpp	(revision 50952)
+++ trunk/src/VBox/VMM/testcase/tstVMStructSize.cpp	(revision 50953)
@@ -44,4 +44,5 @@
 #include "VMMInternal.h"
 #include "DBGFInternal.h"
+#include "GIMInternal.h"
 #include "STAMInternal.h"
 #include "VMInternal.h"
@@ -226,4 +227,5 @@
     PRINT_OFFSET(VM, tm.s.VirtualSyncLock);
     CHECK_PADDING_VM(64, dbgf);
+    CHECK_PADDING_VM(64, gim);
     CHECK_PADDING_VM(64, ssm);
     CHECK_PADDING_VM(64, rem);
@@ -242,4 +244,5 @@
     CHECK_PADDING_VMCPU(64, iom);
     CHECK_PADDING_VMCPU(64, dbgf);
+    CHECK_PADDING_VMCPU(64, gim);
 #if 0
     PRINT_OFFSET(VMCPU, abAlignment2);
