VirtualBox

Changeset 66203 in vbox


Ignore:
Timestamp:
Mar 22, 2017 3:15:12 PM (8 years ago)
Author:
vboxsync
Message:

bs3kit-cpu-generated-1: V8086 fixes, works again now. More cleanups.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c

    r66188 r66203  
    139139    /** Operand size in bytes (0 if not applicable). */
    140140    uint8_t                 cbOperand;
    141     /** Target ring (0..3). */
     141    /** Current target ring (0..3). */
    142142    uint8_t                 uCpl;
    143143
     
    147147    /** Target mode (g_bBs3CurrentMode).  */
    148148    uint8_t                 bMode;
     149    /** First ring being tested. */
     150    uint8_t                 iFirstRing;
     151    /** End of rings being tested. */
     152    uint8_t                 iEndRing;
    149153
    150154
     
    158162    uint8_t                 offCurImm;
    159163    /** Buffer for assembling the current instruction. */
    160     uint8_t                 abCurInstr[27];
     164    uint8_t                 abCurInstr[25];
    161165
    162166    /** Set if the encoding can't be tested in the same ring as this test code.
     
    18051809 * @param   bMode               The mode being tested.
    18061810 */
    1807 bool BS3_CMN_NM(Bs3Cg1Init)(PBS3CG1STATE pThis, uint8_t bMode, uint8_t cRings, uint8_t iFirstRing)
     1811bool BS3_CMN_NM(Bs3Cg1Init)(PBS3CG1STATE pThis, uint8_t bMode)
    18081812{
    18091813    BS3MEMKIND const    enmMemKind = BS3_MODE_IS_RM_OR_V86(bMode) ? BS3MEMKIND_REAL
     
    18131817    Bs3MemSet(pThis, 0, sizeof(*pThis));
    18141818
     1819    pThis->iFirstRing         = BS3_MODE_IS_V86(bMode)    ? 3 : 0;
     1820    pThis->iEndRing           = BS3_MODE_IS_RM_SYS(bMode) ? 1 : 4;
    18151821    pThis->bMode              = bMode;
    18161822    pThis->pszMode            = Bs3GetModeName(bMode);
     
    18721878        ASMCompilerBarrier();
    18731879        pThis->CodePgFar.off = 0;
    1874         pThis->CodePgFar.sel = pThis->uDataPgFlat >> 4;
    1875         pThis->CodePgRip = pThis->CodePgFar.off;
     1880        pThis->CodePgFar.sel = pThis->uCodePgFlat >> 4;
     1881        pThis->CodePgRip     = pThis->CodePgFar.off;
    18761882    }
    18771883    else if (BS3_MODE_IS_16BIT_CODE(bMode))
     
    19031909    /* Create basic context for each target ring.  In protected 16-bit code we need
    19041910       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);
    19061912    if (BS3_MODE_IS_RM_OR_V86(bMode))
    19071913    {
    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);
    19101916    }
    19111917    else if (BS3_MODE_IS_16BIT_CODE(bMode))
     
    19161922        uintptr_t const uFlatCodePgSeg = (uintptr_t)pThis->pbCodePg;
    19171923#endif
    1918         for (iRing = iFirstRing + 1; iRing < cRings; iRing++)
     1924        for (iRing = pThis->iFirstRing + 1; iRing < pThis->iEndRing; iRing++)
    19191925        {
    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]));
    19211927            Bs3RegCtxConvertToRingX(&pThis->aInitialCtxs[iRing], iRing);
    19221928        }
    1923         for (iRing = iFirstRing; iRing < cRings; iRing++)
     1929        for (iRing = pThis->iFirstRing; iRing < pThis->iEndRing; iRing++)
    19241930        {
    19251931            pThis->aInitialCtxs[iRing].cs = BS3_SEL_SPARE_00 + iRing * 8 + iRing;
     
    19291935    else
    19301936    {
    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++)
    19331939        {
    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]));
    19351941            Bs3RegCtxConvertToRingX(&pThis->aInitialCtxs[iRing], iRing);
    19361942        }
     
    19421948
    19431949
    1944 static uint8_t BS3_CMN_NM(Bs3Cg1WorkerInner)(PBS3CG1STATE pThis, uint8_t bMode, uint8_t const cRings, uint8_t const iFirstRing)
     1950static uint8_t BS3_CMN_NM(Bs3Cg1WorkerInner)(PBS3CG1STATE pThis)
    19451951{
    19461952    uint8_t  iRing;
    19471953    unsigned iInstr;
    1948 
    1949 #if 0
    1950     if (bMode != BS3_MODE_LM16)
    1951         return BS3TESTDOMODE_SKIPPED;
    1952 #endif
    19531954
    19541955    /*
     
    19641965        unsigned iEncodingNext;
    19651966        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;
    19671968
    19681969        /*
     
    20302031             * Do the rings.
    20312032             */
    2032             for (iRing = iFirstRing + pThis->fSameRingNotOkay; iRing < cRings; iRing++)
     2033            for (iRing = pThis->iFirstRing + pThis->fSameRingNotOkay; iRing < pThis->iEndRing; iRing++)
    20332034            {
    20342035                PCBS3CG1TESTHDR pHdr;
     
    20502051
    20512052                        Bs3MemCpy(&pThis->Ctx, &pThis->aInitialCtxs[iRing], sizeof(pThis->Ctx));
    2052                         if (BS3_MODE_IS_PAGED(bMode))
     2053                        if (BS3_MODE_IS_PAGED(pThis->bMode))
    20532054                        {
    20542055                            offCode = X86_PAGE_SIZE - pThis->cbCurInstr;
     
    21092110    }
    21102111
    2111 #if 0
    2112     if (bMode >= BS3_MODE_PE16_32)
    2113     {
    2114         Bs3TestTerm();
    2115         Bs3Shutdown();
    2116     }
    2117 #endif
    2118 
    21192112    return 0;
    21202113}
     
    21232116BS3_DECL_FAR(uint8_t) BS3_CMN_NM(Bs3Cg1Worker)(uint8_t bMode)
    21242117{
    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;
    21282119#if 1
    21292120    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);
    21332131
    21342132        Bs3Cg1Destroy(&This);
     
    21402138    {
    21412139
    2142         if (BS3_CMN_NM(Bs3Cg1Init)(pThis, bMode, cRings, iFirstRing))
     2140        if (BS3_CMN_NM(Bs3Cg1Init)(pThis, bMode))
    21432141        {
    2144             bRet = BS3_CMN_NM(Bs3Cg1WorkerInner)(pThis, bMode, iFirstRing, cRings);
     2142            bRet = BS3_CMN_NM(Bs3Cg1WorkerInner)(pThis);
    21452143
    21462144            Bs3Cg1Destroy(pThis);
     
    21502148    }
    21512149#endif
     2150
     2151#if 0
     2152    /* (for debugging) */
     2153    if (bMode >= BS3_MODE_PE16_32)
     2154    {
     2155        Bs3TestTerm();
     2156        Bs3Shutdown();
     2157    }
     2158#endif
    21522159    return bRet;
    21532160}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy