Index: /trunk/src/VBox/VMM/PGMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PGMInternal.h	(revision 453)
+++ /trunk/src/VBox/VMM/PGMInternal.h	(revision 454)
@@ -643,8 +643,11 @@
     /** AVL node code with the (HC) physical address of this page. */
     AVLOHCPHYSNODECORE  Core;
+#if HC_ARCH_BITS == 64 && GC_ARCH_BITS == 32 && defined(IN_GC)
+    uint32_t            Alignment0; /**< Alignment. */
+#endif 
+    /** Pointer to the HC mapping of the page. */
+    HCPTRTYPE(void *)   pvPageHC;
     /** The guest physical address. */
     RTGCPHYS            GCPhys;
-    /** Pointer to the HC mapping of the page. */
-    HCPTRTYPE(void *)   pvPageHC;
     /** The kind of page we're shadowing. (This is really a PGMPOOLKIND enum.) */
     uint8_t             enmKind;
@@ -701,4 +704,7 @@
      */
     bool                fCR3Mix;
+#if HC_ARCH_BITS == 64 || GC_ARCH_BITS == 64
+    bool                Alignment[4];   /**< Align the structure size on a 64-bit boundrary. */
+#endif 
 } PGMPOOLPAGE, *PPGMPOOLPAGE, **PPPGMPOOLPAGE;
 
@@ -740,8 +746,8 @@
     /** The number of present page table entries in the entire pool. */
     uint32_t        cPresent;
+    /** Pointer to the array of user nodes - GC pointer. */
+    GCPTRTYPE(PPGMPOOLUSER) paUsersGC;
     /** Pointer to the array of user nodes - HC pointer. */
     HCPTRTYPE(PPGMPOOLUSER) paUsersHC;
-    /** Pointer to the array of user nodes - GC pointer. */
-    GCPTRTYPE(PPGMPOOLUSER) paUsersGC;
 #endif /* PGMPOOL_WITH_USER_TRACKING */
 #ifdef PGMPOOL_WITH_GCPHYS_TRACKING
@@ -750,8 +756,8 @@
     /** The number of user nodes we've allocated. */
     uint16_t        cMaxPhysExts;
+    /** Pointer to the array of physical xref extent - GC pointer. */
+    GCPTRTYPE(PPGMPOOLPHYSEXT) paPhysExtsGC;
     /** Pointer to the array of physical xref extent nodes - HC pointer. */
     HCPTRTYPE(PPGMPOOLPHYSEXT) paPhysExtsHC;
-    /** Pointer to the array of physical xref extent - GC pointer. */
-    GCPTRTYPE(PPGMPOOLPHYSEXT) paPhysExtsGC;
 #endif /* PGMPOOL_WITH_GCPHYS_TRACKING */
 #ifdef PGMPOOL_WITH_CACHE
@@ -766,4 +772,8 @@
 #endif /* PGMPOOL_WITH_CACHE */
 #ifdef PGMPOOL_WITH_MONITORING
+    /** Head of the list of modified pages. */
+    uint16_t        iModifiedHead;
+    /** The current number of modified pages. */
+    uint16_t        cModifiedPages;
     /** Access handler, GC. */
     GCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnAccessHandlerGC;
@@ -774,8 +784,4 @@
     /** The access handler description (HC ptr). */
     HCPTRTYPE(const char *)         pszAccessHandler;
-    /** Head of the list of modified pages. */
-    uint16_t        iModifiedHead;
-    /** The current number of modified pages. */
-    uint16_t        cModifiedPages;
 #endif /* PGMPOOL_WITH_MONITORING */
     /** The number of pages currently in use. */
@@ -784,4 +790,5 @@
     /** The high wather mark for cUsedPages. */
     uint16_t        cUsedPagesHigh;
+    uint32_t        Alignment1;         /**< Align the next member on a 64-bit boundrary. */
     /** Profiling pgmPoolAlloc(). */
     STAMPROFILEADV  StatAlloc;
@@ -854,4 +861,5 @@
     /** The high wather mark for cModifiedPages. */
     uint16_t        cModifiedPagesHigh;
+    uint16_t        Alignment2[3];      /**< Align the next member on a 64-bit boundrary. */
 # endif
 # ifdef PGMPOOL_WITH_CACHE
@@ -872,4 +880,5 @@
     /** The AVL tree for looking up a page by its HC physical address. */
     AVLOHCPHYSTREE  HCPhysTree;
+    uint32_t        Alignment3;         /**< Align the next member on a 64-bit boundrary. */
     /** Array of pages. (cMaxPages in length)
      * The Id is the index into thist array.
Index: /trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp	(revision 453)
+++ /trunk/src/VBox/VMM/testcase/tstVMStructGC.cpp	(revision 454)
@@ -355,4 +355,78 @@
     GEN_CHECK_OFF(PGMTREES, PhysToVirtHandlers);
     GEN_CHECK_OFF(PGMTREES, auPadding);
+    GEN_CHECK_SIZE(PGMPOOLPAGE);
+    GEN_CHECK_OFF(PGMPOOLPAGE, Core);
+    GEN_CHECK_OFF(PGMPOOLPAGE, GCPhys);
+    GEN_CHECK_OFF(PGMPOOLPAGE, pvPageHC);
+    GEN_CHECK_OFF(PGMPOOLPAGE, enmKind);
+    GEN_CHECK_OFF(PGMPOOLPAGE, bPadding);
+    GEN_CHECK_OFF(PGMPOOLPAGE, idx);
+    GEN_CHECK_OFF(PGMPOOLPAGE, iNext);
+#ifdef PGMPOOL_WITH_USER_TRACKING
+    GEN_CHECK_OFF(PGMPOOLPAGE, iUserHead);
+    GEN_CHECK_OFF(PGMPOOLPAGE, cPresent);
+    GEN_CHECK_OFF(PGMPOOLPAGE, iFirstPresent);
+#endif 
+#ifdef PGMPOOL_WITH_MONITORING
+    GEN_CHECK_OFF(PGMPOOLPAGE, cModifications);
+    GEN_CHECK_OFF(PGMPOOLPAGE, iModifiedNext);
+    GEN_CHECK_OFF(PGMPOOLPAGE, iModifiedPrev);
+    GEN_CHECK_OFF(PGMPOOLPAGE, iMonitoredNext);
+    GEN_CHECK_OFF(PGMPOOLPAGE, iMonitoredPrev);
+#endif
+#ifdef PGMPOOL_WITH_CACHE
+    GEN_CHECK_OFF(PGMPOOLPAGE, iAgeNext);
+    GEN_CHECK_OFF(PGMPOOLPAGE, iAgePrev);
+#endif
+    GEN_CHECK_OFF(PGMPOOLPAGE, fZeroed);
+    GEN_CHECK_OFF(PGMPOOLPAGE, fSeenNonGlobal);
+    GEN_CHECK_OFF(PGMPOOLPAGE, fMonitored);
+    GEN_CHECK_OFF(PGMPOOLPAGE, fCached);
+    GEN_CHECK_OFF(PGMPOOLPAGE, fReusedFlushPending);
+    GEN_CHECK_OFF(PGMPOOLPAGE, fCR3Mix);
+    GEN_CHECK_SIZE(PGMPOOL);
+    GEN_CHECK_OFF(PGMPOOL, pVMHC);
+    GEN_CHECK_OFF(PGMPOOL, pVMGC);
+    GEN_CHECK_OFF(PGMPOOL, cMaxPages);
+    GEN_CHECK_OFF(PGMPOOL, cCurPages);
+    GEN_CHECK_OFF(PGMPOOL, iFreeHead);
+    GEN_CHECK_OFF(PGMPOOL, u16Padding);
+#ifdef PGMPOOL_WITH_USER_TRACKING
+    GEN_CHECK_OFF(PGMPOOL, iUserFreeHead);
+    GEN_CHECK_OFF(PGMPOOL, cMaxUsers);
+    GEN_CHECK_OFF(PGMPOOL, cPresent);
+    GEN_CHECK_OFF(PGMPOOL, paUsersHC);
+    GEN_CHECK_OFF(PGMPOOL, paUsersGC);
+#endif /* PGMPOOL_WITH_USER_TRACKING */
+#ifdef PGMPOOL_WITH_GCPHYS_TRACKING
+    GEN_CHECK_OFF(PGMPOOL, iPhysExtFreeHead);
+    GEN_CHECK_OFF(PGMPOOL, cMaxPhysExts);
+    GEN_CHECK_OFF(PGMPOOL, paPhysExtsHC);
+    GEN_CHECK_OFF(PGMPOOL, paPhysExtsGC);
+#endif
+#ifdef PGMPOOL_WITH_CACHE
+    GEN_CHECK_OFF(PGMPOOL, aiHash);
+    GEN_CHECK_OFF(PGMPOOL, iAgeHead);
+    GEN_CHECK_OFF(PGMPOOL, iAgeTail);
+    GEN_CHECK_OFF(PGMPOOL, fCacheEnabled);
+#endif
+#ifdef PGMPOOL_WITH_MONITORING
+    GEN_CHECK_OFF(PGMPOOL, pfnAccessHandlerGC);
+    GEN_CHECK_OFF(PGMPOOL, pfnAccessHandlerR0);
+    GEN_CHECK_OFF(PGMPOOL, pfnAccessHandlerR3);
+    GEN_CHECK_OFF(PGMPOOL, pszAccessHandler);
+    GEN_CHECK_OFF(PGMPOOL, iModifiedHead);
+    GEN_CHECK_OFF(PGMPOOL, cModifiedPages);
+#endif
+    GEN_CHECK_OFF(PGMPOOL, cUsedPages);
+#ifdef VBOX_WITH_STATISTICS
+    GEN_CHECK_OFF(PGMPOOL, cUsedPagesHigh);
+    GEN_CHECK_OFF(PGMPOOL, StatAlloc);
+    GEN_CHECK_OFF(PGMPOOL, StatClearAll);
+#endif 
+    GEN_CHECK_OFF(PGMPOOL, HCPhysTree);
+    GEN_CHECK_OFF(PGMPOOL, aPages);
+    GEN_CHECK_OFF(PGMPOOL, aPages[1]);
+    GEN_CHECK_OFF(PGMPOOL, aPages[PGMPOOL_IDX_FIRST - 1]);
 
     GEN_CHECK_SIZE(REM);
