Changeset 66203 in vbox
- Timestamp:
- Mar 22, 2017 3:15:12 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66188 r66203 139 139 /** Operand size in bytes (0 if not applicable). */ 140 140 uint8_t cbOperand; 141 /** Target ring (0..3). */141 /** Current target ring (0..3). */ 142 142 uint8_t uCpl; 143 143 … … 147 147 /** Target mode (g_bBs3CurrentMode). */ 148 148 uint8_t bMode; 149 /** First ring being tested. */ 150 uint8_t iFirstRing; 151 /** End of rings being tested. */ 152 uint8_t iEndRing; 149 153 150 154 … … 158 162 uint8_t offCurImm; 159 163 /** Buffer for assembling the current instruction. */ 160 uint8_t abCurInstr[2 7];164 uint8_t abCurInstr[25]; 161 165 162 166 /** Set if the encoding can't be tested in the same ring as this test code. … … 1805 1809 * @param bMode The mode being tested. 1806 1810 */ 1807 bool BS3_CMN_NM(Bs3Cg1Init)(PBS3CG1STATE pThis, uint8_t bMode , uint8_t cRings, uint8_t iFirstRing)1811 bool BS3_CMN_NM(Bs3Cg1Init)(PBS3CG1STATE pThis, uint8_t bMode) 1808 1812 { 1809 1813 BS3MEMKIND const enmMemKind = BS3_MODE_IS_RM_OR_V86(bMode) ? BS3MEMKIND_REAL … … 1813 1817 Bs3MemSet(pThis, 0, sizeof(*pThis)); 1814 1818 1819 pThis->iFirstRing = BS3_MODE_IS_V86(bMode) ? 3 : 0; 1820 pThis->iEndRing = BS3_MODE_IS_RM_SYS(bMode) ? 1 : 4; 1815 1821 pThis->bMode = bMode; 1816 1822 pThis->pszMode = Bs3GetModeName(bMode); … … 1872 1878 ASMCompilerBarrier(); 1873 1879 pThis->CodePgFar.off = 0; 1874 pThis->CodePgFar.sel = pThis->u DataPgFlat >> 4;1875 pThis->CodePgRip = pThis->CodePgFar.off;1880 pThis->CodePgFar.sel = pThis->uCodePgFlat >> 4; 1881 pThis->CodePgRip = pThis->CodePgFar.off; 1876 1882 } 1877 1883 else if (BS3_MODE_IS_16BIT_CODE(bMode)) … … 1903 1909 /* Create basic context for each target ring. In protected 16-bit code we need 1904 1910 set up code selectors that can access pbCodePg. ASSUMES 16-bit driver code! */ 1905 Bs3RegCtxSaveEx(&pThis->aInitialCtxs[ iFirstRing], bMode, 512);1911 Bs3RegCtxSaveEx(&pThis->aInitialCtxs[pThis->iFirstRing], bMode, 1024 * 3); 1906 1912 if (BS3_MODE_IS_RM_OR_V86(bMode)) 1907 1913 { 1908 pThis->aInitialCtxs[ iFirstRing].cs = pThis->CodePgFar.sel;1909 BS3_ASSERT( iFirstRing + 1 >= cRings);1914 pThis->aInitialCtxs[pThis->iFirstRing].cs = pThis->CodePgFar.sel; 1915 BS3_ASSERT(pThis->iFirstRing + 1 == pThis->iEndRing); 1910 1916 } 1911 1917 else if (BS3_MODE_IS_16BIT_CODE(bMode)) … … 1916 1922 uintptr_t const uFlatCodePgSeg = (uintptr_t)pThis->pbCodePg; 1917 1923 #endif 1918 for (iRing = iFirstRing + 1; iRing < cRings; iRing++)1924 for (iRing = pThis->iFirstRing + 1; iRing < pThis->iEndRing; iRing++) 1919 1925 { 1920 Bs3MemCpy(&pThis->aInitialCtxs[iRing], &pThis->aInitialCtxs[ iFirstRing], sizeof(pThis->aInitialCtxs[iRing]));1926 Bs3MemCpy(&pThis->aInitialCtxs[iRing], &pThis->aInitialCtxs[pThis->iFirstRing], sizeof(pThis->aInitialCtxs[iRing])); 1921 1927 Bs3RegCtxConvertToRingX(&pThis->aInitialCtxs[iRing], iRing); 1922 1928 } 1923 for (iRing = iFirstRing; iRing < cRings; iRing++)1929 for (iRing = pThis->iFirstRing; iRing < pThis->iEndRing; iRing++) 1924 1930 { 1925 1931 pThis->aInitialCtxs[iRing].cs = BS3_SEL_SPARE_00 + iRing * 8 + iRing; … … 1929 1935 else 1930 1936 { 1931 Bs3RegCtxSetRipCsFromCurPtr(&pThis->aInitialCtxs[ iFirstRing], (FPFNBS3FAR)pThis->pbCodePg);1932 for (iRing = iFirstRing + 1; iRing < cRings; iRing++)1937 Bs3RegCtxSetRipCsFromCurPtr(&pThis->aInitialCtxs[pThis->iFirstRing], (FPFNBS3FAR)pThis->pbCodePg); 1938 for (iRing = pThis->iFirstRing + 1; iRing < pThis->iEndRing; iRing++) 1933 1939 { 1934 Bs3MemCpy(&pThis->aInitialCtxs[iRing], &pThis->aInitialCtxs[ iFirstRing], sizeof(pThis->aInitialCtxs[iRing]));1940 Bs3MemCpy(&pThis->aInitialCtxs[iRing], &pThis->aInitialCtxs[pThis->iFirstRing], sizeof(pThis->aInitialCtxs[iRing])); 1935 1941 Bs3RegCtxConvertToRingX(&pThis->aInitialCtxs[iRing], iRing); 1936 1942 } … … 1942 1948 1943 1949 1944 static uint8_t BS3_CMN_NM(Bs3Cg1WorkerInner)(PBS3CG1STATE pThis , uint8_t bMode, uint8_t const cRings, uint8_t const iFirstRing)1950 static uint8_t BS3_CMN_NM(Bs3Cg1WorkerInner)(PBS3CG1STATE pThis) 1945 1951 { 1946 1952 uint8_t iRing; 1947 1953 unsigned iInstr; 1948 1949 #if 01950 if (bMode != BS3_MODE_LM16)1951 return BS3TESTDOMODE_SKIPPED;1952 #endif1953 1954 1954 1955 /* … … 1964 1965 unsigned iEncodingNext; 1965 1966 bool fInvalidInstr = false; 1966 uint8_t bTestXcptExpected = BS3_MODE_IS_PAGED( bMode) ? X86_XCPT_PF : X86_XCPT_UD;1967 uint8_t bTestXcptExpected = BS3_MODE_IS_PAGED(pThis->bMode) ? X86_XCPT_PF : X86_XCPT_UD; 1967 1968 1968 1969 /* … … 2030 2031 * Do the rings. 2031 2032 */ 2032 for (iRing = iFirstRing + pThis->fSameRingNotOkay; iRing < cRings; iRing++)2033 for (iRing = pThis->iFirstRing + pThis->fSameRingNotOkay; iRing < pThis->iEndRing; iRing++) 2033 2034 { 2034 2035 PCBS3CG1TESTHDR pHdr; … … 2050 2051 2051 2052 Bs3MemCpy(&pThis->Ctx, &pThis->aInitialCtxs[iRing], sizeof(pThis->Ctx)); 2052 if (BS3_MODE_IS_PAGED( bMode))2053 if (BS3_MODE_IS_PAGED(pThis->bMode)) 2053 2054 { 2054 2055 offCode = X86_PAGE_SIZE - pThis->cbCurInstr; … … 2109 2110 } 2110 2111 2111 #if 02112 if (bMode >= BS3_MODE_PE16_32)2113 {2114 Bs3TestTerm();2115 Bs3Shutdown();2116 }2117 #endif2118 2119 2112 return 0; 2120 2113 } … … 2123 2116 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(Bs3Cg1Worker)(uint8_t bMode) 2124 2117 { 2125 unsigned const iFirstRing = BS3_MODE_IS_V86(bMode) ? 3 : 0; 2126 uint8_t const cRings = BS3_MODE_IS_RM_OR_V86(bMode) ? 1 : 4; 2127 uint8_t bRet = 1; 2118 uint8_t bRet = 1; 2128 2119 #if 1 2129 2120 BS3CG1STATE This; 2130 if (BS3_CMN_NM(Bs3Cg1Init)(&This, bMode, cRings, iFirstRing)) 2131 { 2132 bRet = BS3_CMN_NM(Bs3Cg1WorkerInner)(&This, bMode, iFirstRing, cRings); 2121 2122 # if 0 2123 /* (for debugging) */ 2124 if (bMode != BS3_MODE_PPV86) 2125 return BS3TESTDOMODE_SKIPPED; 2126 # endif 2127 2128 if (BS3_CMN_NM(Bs3Cg1Init)(&This, bMode)) 2129 { 2130 bRet = BS3_CMN_NM(Bs3Cg1WorkerInner)(&This); 2133 2131 2134 2132 Bs3Cg1Destroy(&This); … … 2140 2138 { 2141 2139 2142 if (BS3_CMN_NM(Bs3Cg1Init)(pThis, bMode , cRings, iFirstRing))2140 if (BS3_CMN_NM(Bs3Cg1Init)(pThis, bMode)) 2143 2141 { 2144 bRet = BS3_CMN_NM(Bs3Cg1WorkerInner)(pThis , bMode, iFirstRing, cRings);2142 bRet = BS3_CMN_NM(Bs3Cg1WorkerInner)(pThis); 2145 2143 2146 2144 Bs3Cg1Destroy(pThis); … … 2150 2148 } 2151 2149 #endif 2150 2151 #if 0 2152 /* (for debugging) */ 2153 if (bMode >= BS3_MODE_PE16_32) 2154 { 2155 Bs3TestTerm(); 2156 Bs3Shutdown(); 2157 } 2158 #endif 2152 2159 return bRet; 2153 2160 }
Note:
See TracChangeset
for help on using the changeset viewer.

