VirtualBox

Changeset 53608 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Dec 30, 2014 5:06:09 PM (10 years ago)
Author:
vboxsync
Message:

cidet: Reduce context for linux. Enabled the 2nd instruction (add Ev,Gv) and fixed associated bugs.

Location:
trunk/src/VBox/ValidationKit/utils/cpu
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/utils/cpu/Makefile.kmk

    r53578 r53608  
    5454        cidet-instr-1.cpp
    5555cidet-app_DEFS = IN_DIS
     56cidet-app_DEFS.linux = CIDET_REDUCED_CTX
    5657cidet-app_LIBS = $(PATH_STAGE_LIB)/DisasmR3Static$(VBOX_SUFF_LIB)
    5758
  • trunk/src/VBox/ValidationKit/utils/cpu/cidet-app.cpp

    r53607 r53608  
    473473    pThis->Core.ActualCtx.uErr                 = pCtx->uc_mcontext.gregs[REG_ERR];
    474474
    475     /* Fudge the FS register as it seems REG_CSGSFS isn't working right. */
    476     if (   pThis->Core.ActualCtx.aSRegs[X86_SREG_FS] == 0
    477         && pThis->Core.ExpectedCtx.aSRegs[X86_SREG_FS] != 0)
     475    /* Fudge the FS and GS registers as setup_sigcontext returns 0. */
     476    if (pThis->Core.ActualCtx.aSRegs[X86_SREG_FS] == 0)
    478477       pThis->Core.ActualCtx.aSRegs[X86_SREG_FS] = pThis->Core.ExpectedCtx.aSRegs[X86_SREG_FS];
     478    if (pThis->Core.ActualCtx.aSRegs[X86_SREG_GS] == 0)
     479       pThis->Core.ActualCtx.aSRegs[X86_SREG_GS] = pThis->Core.ExpectedCtx.aSRegs[X86_SREG_GS];
    479480
    480481#  elif defined(RT_ARCH_X86)
     
    519520    }
    520521
     522#  if 0
    521523    /* Fudge the resume flag (it's probably always set here). */
    522524    if (   (pThis->Core.ActualCtx.rfl & X86_EFL_RF)
    523525        && !(pThis->Core.ExpectedCtx.rfl & X86_EFL_RF))
    524526        pThis->Core.ActualCtx.rfl &= ~X86_EFL_RF;
     527#  endif
    525528
    526529# else
     
    539542        pThis->Core.ActualCtx.uXcpt = UINT32_MAX;
    540543        Assert(pThis->Core.ActualCtx.uErr == UINT64_MAX);
     544        pThis->Core.ActualCtx.rfl &= ~X86_EFL_RF;
    541545    }
    542546
  • trunk/src/VBox/ValidationKit/utils/cpu/cidet-appA.asm

    r53607 r53608  
    111111        mov     [xCX + CIDETCPUCTX.aGRegs + X86_GREG_x15 * 8], r15
    112112        xor     eax, eax
     113        mov     [xCX + CIDETCPUCTX.cr2], rax
     114 %ifndef CIDET_REDUCED_CTX
    113115        mov     [xCX + CIDETCPUCTX.cr0], rax
    114         mov     [xCX + CIDETCPUCTX.cr2], rax
    115116        mov     [xCX + CIDETCPUCTX.cr3], rax
    116117        mov     [xCX + CIDETCPUCTX.cr4], rax
     
    122123        mov     [xCX + CIDETCPUCTX.dr6], rax
    123124        mov     [xCX + CIDETCPUCTX.dr7], rax
     125        mov     [xCX + CIDETCPUCTX.tr], ax
     126        mov     [xCX + CIDETCPUCTX.ldtr], ax
     127 %endif
    124128%else
    125129        xor     eax, eax
     
    150154        mov     [xCX + CIDETCPUCTX.aGRegs + X86_GREG_x15 * 8    ], eax
    151155        mov     [xCX + CIDETCPUCTX.aGRegs + X86_GREG_x15 * 8 + 4], eax
     156        mov     [xCX + CIDETCPUCTX.cr2    ], eax
     157        mov     [xCX + CIDETCPUCTX.cr2 + 4], eax
     158 %ifndef CIDET_REDUCED_CTX
    152159        mov     [xCX + CIDETCPUCTX.cr0    ], eax
    153160        mov     [xCX + CIDETCPUCTX.cr0 + 4], eax
    154         mov     [xCX + CIDETCPUCTX.cr2    ], eax
    155         mov     [xCX + CIDETCPUCTX.cr2 + 4], eax
    156161        mov     [xCX + CIDETCPUCTX.cr3    ], eax
    157162        mov     [xCX + CIDETCPUCTX.cr3 + 4], eax
     
    172177        mov     [xCX + CIDETCPUCTX.dr7    ], eax
    173178        mov     [xCX + CIDETCPUCTX.dr7 + 4], eax
    174 %endif
    175179        mov     [xCX + CIDETCPUCTX.tr], ax
    176180        mov     [xCX + CIDETCPUCTX.ldtr], ax
     181 %endif
     182%endif
    177183        dec     xAX
    178184        mov     [xCX + CIDETCPUCTX.uErr], xAX
  • trunk/src/VBox/ValidationKit/utils/cpu/cidet-core.cpp

    r53607 r53608  
    264264    while (i-- > 0)
    265265        pThis->InTemplateCtx.aSRegs[i] = 0; /* Front end sets these afterwards. */
     266    pThis->InTemplateCtx.cr2  = 0;
     267#ifndef CIDET_REDUCED_CTX
    266268    pThis->InTemplateCtx.tr   = 0;
    267269    pThis->InTemplateCtx.ldtr = 0;
    268270    pThis->InTemplateCtx.cr0  = 0;
    269     pThis->InTemplateCtx.cr2  = 0;
    270271    pThis->InTemplateCtx.cr3  = 0;
    271272    pThis->InTemplateCtx.cr4  = 0;
    272273    pThis->InTemplateCtx.cr8  = 0;
     274#endif
    273275    pThis->InTemplateCtx.fIgnoredRFlags = 0;
    274276    pThis->InTemplateCtx.uXcpt          = UINT32_MAX;
     
    426428            /* The AMD64 low variants: spl, bpl, sil and dil. */
    427429            pThis->fRex = true;
     430            pThis->fHasStackRegInMrmReg = iReg == X86_GREG_xSP;
    428431
    429432            /* Check for collisions. */
     
    456459            pThis->fNoRexPrefix             = true;
    457460            pThis->fHasHighByteRegInMrmReg  = true;
     461            pThis->fHasStackRegInMrmReg     = false;
    458462            pThis->aOperands[pThis->idxMrmRegOp].fIsHighByteRegister = true;
    459463            Assert(!pThis->fRexW); Assert(!pThis->fRexX); Assert(!pThis->fRexB);
     
    494498    pThis->bModRm |= (iReg & X86_MODRM_REG_SMASK) << X86_MODRM_REG_SHIFT;
    495499    pThis->fRexR   = iReg >= 8;
     500    pThis->fHasStackRegInMrmReg = iReg == X86_GREG_xSP && CIDET_OF_K_IS_GPR(pThis->fMrmRegOp);
    496501
    497502    /*
     
    673678            pThis->bModRm &= ~X86_MODRM_RM_MASK;
    674679            pThis->bModRm |= iRm;
    675             if (CIDET_OF_K_IS_GPR(pThis->fMrmRmOp))
     680            if (CIDET_OF_K_IS_GPR(pThis->fMrmRegOp))
    676681            {
    677682                iReg -= pThis->fHasHighByteRegInMrmReg * 4;
     
    929934            pThis->fRexB   = iRm >= 8;
    930935            pThis->fRexX   = false;
    931             if (CIDET_OF_K_IS_GPR(pThis->fMrmRmOp))
    932             {
    933                 if (pThis->fHasHighByteRegInMrmReg)
    934                     iReg -= 4;
     936            if (CIDET_OF_K_IS_GPR(pThis->fMrmRegOp))
     937            {
     938                iReg -= pThis->fHasHighByteRegInMrmReg * 4;
    935939                pThis->fHasRegCollisionMemBase = iReg == pThis->aOperands[pThis->idxMrmRmOp].iMemBaseReg;
    936940                pThis->fHasRegCollisionMemIndex = iReg == pThis->aOperands[pThis->idxMrmRmOp].iMemIndexReg;
     
    11791183                case 1:
    11801184                    pThis->fOpSizePrf = false;
    1181                     if (!pThis->fNoRexPrefix)
     1185                    if (pThis->fNoRexPrefix)
    11821186                        break;
    11831187                    pThis->fRexW = true;
     
    22192223    IF_FIELD_DIFFERS_SET_ERROR(aSRegs[X86_SREG_FS],    "%#06x");
    22202224    IF_FIELD_DIFFERS_SET_ERROR(aSRegs[X86_SREG_GS],    "%#06x");
     2225    IF_FIELD_DIFFERS_SET_ERROR(uXcpt,                  "%#04x");
     2226    IF_FIELD_DIFFERS_SET_ERROR(uErr,                   "%#04llx");
     2227    IF_FIELD_DIFFERS_SET_ERROR(cr2,                    "%#010llx");
     2228#ifndef CIDET_REDUCED_CTX
    22212229    IF_FIELD_DIFFERS_SET_ERROR(tr,                     "%#06x");
    22222230    IF_FIELD_DIFFERS_SET_ERROR(ldtr,                   "%#06x");
    22232231    IF_FIELD_DIFFERS_SET_ERROR(cr0,                    "%#010llx");
    2224     IF_FIELD_DIFFERS_SET_ERROR(cr2,                    "%#010llx");
    22252232    IF_FIELD_DIFFERS_SET_ERROR(cr3,                    "%#010llx");
    22262233    IF_FIELD_DIFFERS_SET_ERROR(cr4,                    "%#010llx");
     
    22322239    IF_FIELD_DIFFERS_SET_ERROR(dr6,                    "%#010llx");
    22332240    IF_FIELD_DIFFERS_SET_ERROR(dr7,                    "%#010llx");
    2234     IF_FIELD_DIFFERS_SET_ERROR(uXcpt,                  "%#04x");
    2235     IF_FIELD_DIFFERS_SET_ERROR(uErr,                   "%#04llx");
    2236 
    2237 AssertBreakpoint();
     2241#endif
     2242
     2243AssertMsgFailed(("cDiffs=%d\n", cDiffs));
    22382244    Assert(cDiffs > 0);
    22392245    return cDiffs == 0;
  • trunk/src/VBox/ValidationKit/utils/cpu/cidet-instr-1.cpp

    r53579 r53608  
    191191                    *pThis->aOperands[0].Expected.pu32 = pEntry->uOut;
    192192                    if (!pThis->aOperands[0].fIsMem)
    193                         pThis->aOperands[0].Expected.pu32[0] = 0;
     193                        pThis->aOperands[0].Expected.pu32[1] = 0;
    194194                    *pThis->aOperands[1].Expected.pu32 = pEntry->uIn2;
    195195                    pThis->ExpectedCtx.rfl            |= pEntry->fEFlagsOut;
     
    253253const CIDETINSTR g_aCidetInstructions1[] =
    254254{
     255#if 1
    255256    {
    256257        "add Eb,Gb", cidetInOutAdd,  1, {0x00, 0, 0}, 0, 2,
     
    259260            0, 0 }, CIDET_IF_MODRM
    260261    },
    261 #if 0
    262     {
    263         "add Ev,Gv", cidetInOutAdd,  1, {0x00, 0, 0}, 0, 2,
    264         {   CIDET_OF_K_GPR | CIDET_OF_Z_VAR_WDQ | CIDET_OF_M_RM,
    265             CIDET_OF_K_GPR | CIDET_OF_Z_VAR_WDQ | CIDET_OF_M_REG,
     262#endif
     263#if 1
     264    {
     265        "add Ev,Gv", cidetInOutAdd,  1, {0x01, 0, 0}, 0, 2,
     266        {   CIDET_OF_K_GPR | CIDET_OF_Z_VAR_WDQ | CIDET_OF_M_RM | CIDET_OF_A_RW,
     267            CIDET_OF_K_GPR | CIDET_OF_Z_VAR_WDQ | CIDET_OF_M_REG | CIDET_OF_A_R,
    266268            0, 0 }, CIDET_IF_MODRM
    267269    },
  • trunk/src/VBox/ValidationKit/utils/cpu/cidet.h

    r53579 r53608  
    160160    uint16_t            aSRegs[6];
    161161
     162#ifndef CIDET_REDUCED_CTX
    162163    uint16_t            tr;
    163164    uint16_t            ldtr;
    164165    uint64_t            cr0;
     166#else
     167    uint16_t            au16Padding[2];
     168#endif
    165169    uint64_t            cr2;
     170#ifndef CIDET_REDUCED_CTX
    166171    uint64_t            cr3;
    167172    uint64_t            cr4;
     
    173178    uint64_t            dr6;
    174179    uint64_t            dr7;
     180#endif
    175181
    176182    uint64_t            uErr;           /**< Exception error code.  UINT64_MAX if not applicable.  (Not for input context.) */
  • trunk/src/VBox/ValidationKit/utils/cpu/cidet.mac

    r53579 r53608  
    3535    .aSRegs             resw 6
    3636
     37%ifndef CIDET_REDUCED_CTX
    3738    .tr                 resw 1
    3839    .ldtr               resw 1
    3940    .cr0                resq 1
     41%else
     42    .au16Padding        resw 2
     43%endif
    4044    .cr2                resq 1
     45%ifndef CIDET_REDUCED_CTX
    4146    .cr3                resq 1
    4247    .cr4                resq 1
     
    4853    .dr6                resq 1
    4954    .dr7                resq 1
     55%endif
    5056
    5157    .uErr               resq 1
Note: See TracChangeset for help on using the changeset viewer.

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