Index: /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingAlias.c
===================================================================
--- /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingAlias.c	(revision 64702)
+++ /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingAlias.c	(revision 64703)
@@ -166,5 +166,5 @@
 #if ARCH_BITS == 16
     /*
-     * We can do this stuff in v8086 mode.
+     * We can't do this stuff in v8086 mode, so switch to 16-bit prot mode and do it there.
      */
     else
Index: /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingProtect.c
===================================================================
--- /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingProtect.c	(revision 64702)
+++ /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingProtect.c	(revision 64703)
@@ -362,2 +362,21 @@
 }
 
+
+#undef Bs3PagingGetPte
+BS3_CMN_DEF(void BS3_FAR *, Bs3PagingGetPte,(uint64_t uFlat, int *prc))
+{
+    RTCCUINTXREG const  cr3        = ASMGetCR3();
+    RTCCUINTXREG const  cr4        = g_uBs3CpuDetected & BS3CPU_F_CPUID ? ASMGetCR4() : 0;
+    bool const          fLegacyPTs = !(cr4 & X86_CR4_PAE);
+    bool const          fUseInvlPg = (g_uBs3CpuDetected & BS3CPU_TYPE_MASK) >= BS3CPU_80486;
+    int                 rc;
+    if (!prc)
+        prc = &rc;
+    if (!fLegacyPTs)
+        return BS3_CMN_FAR_NM(bs3PagingGetPte)(cr3,  g_bBs3CurrentMode, uFlat, fUseInvlPg, prc);
+    if (uFlat < _4G)
+        return BS3_CMN_FAR_NM(bs3PagingGetLegacyPte)(cr3, (uint32_t)uFlat, fUseInvlPg, prc);
+    *prc = VERR_OUT_OF_RANGE;
+    return NULL;
+}
+
Index: /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesByOne.c
===================================================================
--- /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesByOne.c	(revision 64702)
+++ /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesByOne.c	(revision 64703)
@@ -151,6 +151,7 @@
     for (i = 0; i < cEntries; i++)
     {
-        const char *pszFmtStr = "Error #%u (%#x) in %s!\n";
-        bool        fSkipped  = true;
+        const char *pszFmtStr   = "Error #%u (%#x) in %s!\n";
+        bool        fSkipped    = true;
+        bool const  fOnlyPaging = RT_BOOL(paEntries[i].fFlags & BS3TESTMODEBYONEENTRY_F_ONLY_PAGING);
         uint8_t     bErrNo;
         Bs3TestSub(paEntries[i].pszSubTest);
@@ -173,5 +174,5 @@
 
 # if ARCH_BITS == 16
-        if (true)
+        if (!fOnlyPaging)
         {
             PRE_DO_CALL(g_szBs3ModeName_rm);
@@ -191,5 +192,5 @@
          * Unpaged prot mode.
          */
-        if (true)
+        if (!fOnlyPaging)
         {
             PRE_DO_CALL(g_szBs3ModeName_pe16);
@@ -208,5 +209,5 @@
         }
 
-        if (true)
+        if (!fOnlyPaging)
         {
             PRE_DO_CALL(g_szBs3ModeName_pe16_32);
@@ -219,5 +220,5 @@
         }
 
-        if (fDoWeirdV86Modes)
+        if (fDoWeirdV86Modes && !fOnlyPaging)
         {
             PRE_DO_CALL(g_szBs3ModeName_pe16_v86);
@@ -230,5 +231,5 @@
         }
 
-        if (true)
+        if (!fOnlyPaging)
         {
             PRE_DO_CALL(g_szBs3ModeName_pe32);
@@ -241,5 +242,5 @@
         }
 
-        if (true)
+        if (!fOnlyPaging)
         {
             PRE_DO_CALL(g_szBs3ModeName_pe32_16);
@@ -252,5 +253,5 @@
         }
 
-        if (fDoV86Modes)
+        if (fDoV86Modes && !fOnlyPaging)
         {
             PRE_DO_CALL(g_szBs3ModeName_pev86);
Index: /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk
===================================================================
--- /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk	(revision 64702)
+++ /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk	(revision 64703)
@@ -65,4 +65,6 @@
 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3MemMove)
 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3MemPCpy)
+$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingGetPde)
+$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingGetPte)
 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingSetupCanonicalTraps)
 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3SlabAlloc)
@@ -123,3 +125,4 @@
 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,bs3PagingGetLegacyPte)
 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,bs3PagingGetPte)
+$(call BS3KIT_FN_GEN_MODE_NEARSTUB,bs3kit-common-16,Bs3SwitchTo32BitAndCallC)
 $(call BS3KIT_FN_GEN_MODE_NEARSTUB,bs3kit-common-16,Bs3TrapInit)
Index: /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h
===================================================================
--- /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h	(revision 64702)
+++ /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h	(revision 64703)
@@ -50,4 +50,6 @@
 #define Bs3PagingAlias BS3_CMN_MANGLER(Bs3PagingAlias)
 #define bs3PagingGetLegacyPte BS3_CMN_MANGLER(bs3PagingGetLegacyPte)
+#define Bs3PagingGetPde BS3_CMN_MANGLER(Bs3PagingGetPde)
+#define Bs3PagingGetPte BS3_CMN_MANGLER(Bs3PagingGetPte)
 #define bs3PagingGetPte BS3_CMN_MANGLER(bs3PagingGetPte)
 #define Bs3PagingInitRootForLM BS3_CMN_MANGLER(Bs3PagingInitRootForLM)
@@ -153,4 +155,5 @@
 #ifndef BS3_CMN_ONLY
 # define Bs3CpuDetect BS3_MODE_MANGLER(Bs3CpuDetect)
+# define Bs3SwitchTo32BitAndCallC BS3_MODE_MANGLER(Bs3SwitchTo32BitAndCallC)
 # define Bs3TestDoModes BS3_MODE_MANGLER(Bs3TestDoModes)
 # define Bs3TestDoModesByOne BS3_MODE_MANGLER(Bs3TestDoModesByOne)
Index: /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h
===================================================================
--- /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h	(revision 64702)
+++ /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h	(revision 64703)
@@ -50,4 +50,6 @@
 #undef Bs3PagingAlias
 #undef bs3PagingGetLegacyPte
+#undef Bs3PagingGetPde
+#undef Bs3PagingGetPte
 #undef bs3PagingGetPte
 #undef Bs3PagingInitRootForLM
@@ -153,4 +155,5 @@
 #ifndef BS3_CMN_ONLY
 # undef Bs3CpuDetect
+# undef Bs3SwitchTo32BitAndCallC
 # undef Bs3TestDoModes
 # undef Bs3TestDoModesByOne
Index: /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
===================================================================
--- /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h	(revision 64702)
+++ /trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h	(revision 64703)
@@ -2202,4 +2202,21 @@
 BS3_CMN_PROTO_STUB(int, Bs3PagingUnalias,(uint64_t uDst, uint32_t cbHowMuch));
 
+/**
+ * Get the pointer to the PTE for the given address.
+ *
+ * @returns Pointer to the PTE.
+ * @param   uFlat               The flat address of the page which PTE we want.
+ * @param   prc                 Where to return additional error info. Optional.
+ */
+BS3_CMN_PROTO_STUB(void BS3_FAR *, Bs3PagingGetPte,(uint64_t uFlat, int *prc));
+
+/**
+ * Get the pointer to the PDE for the given address.
+ *
+ * @returns Pointer to the PDE.
+ * @param   uFlat               The flat address of the page which PDE we want.
+ */
+BS3_CMN_PROTO_STUB(void BS3_FAR *, Bs3PagingGetPde,(uint64_t uFlat));
+
 
 /** The physical / flat address of the buffer backing the canonical traps.
@@ -3099,8 +3116,15 @@
     const char * BS3_FAR    pszSubTest;
     PFNBS3TESTDOMODE        pfnWorker;
-    uint32_t                u32Reserved;
+    /** BS3TESTMODEBYONEENTRY_F_XXX. */
+    uint32_t                fFlags;
 } BS3TESTMODEBYONEENTRY;
 /** Pointer to a mode-by-one sub-test entry. */
 typedef BS3TESTMODEBYONEENTRY const *PCBS3TESTMODEBYONEENTRY;
+
+/** @name BS3TESTMODEBYONEENTRY_F_XXX - flags.
+ * @{ */
+/** Only test modes that has paging enabled. */
+#define BS3TESTMODEBYONEENTRY_F_ONLY_PAGING     RT_BIT_32(0)
+/** @} */
 
 
