VirtualBox

Changeset 66102 in vbox for trunk


Ignore:
Timestamp:
Mar 15, 2017 9:23:01 AM (8 years ago)
Author:
vboxsync
Message:

bs3-cpu-generated-1: updates

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

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

    r66055 r66102  
    235235    /* [BS3CG1DST_OP4] = */     BS3CG1DSTSIZE_OPERAND,
    236236    /* [BS3CG1DST_EFL] = */     4,
     237    /* [BS3CG1DST_EFL_UNDEF]=*/ 4,
    237238
    238239    /* [BS3CG1DST_AL] = */      1,
     
    336337    /* [BS3CG1DST_OP4] = */     ~0U,
    337338    /* [BS3CG1DST_EFL] = */     RT_OFFSETOF(BS3REGCTX, rflags),
     339    /* [BS3CG1DST_EFL_UNDEF]=*/ ~0, /* special field */
    338340
    339341    /* [BS3CG1DST_AL] = */      RT_OFFSETOF(BS3REGCTX, rax.u8),
     
    633635 *
    634636 * @returns Success indicator (true/false).
    635  * @param   pThis   The state.
    636  * @param   pCtx    The context.
    637  * @param   pHdr    The program header.
    638  * @param   off     The program offset relative to the end of the header.
    639  * @param   cb      The program size.
     637 * @param   pThis       The state.
     638 * @param   pCtx        The context.
     639 * @param   pHdr        The program header.
     640 * @param   off         The program offset relative to the end of the header.
     641 * @param   cb          The program size.
     642 * @param   pEflCtx     The context to take undefined EFLAGS from.  (This is NULL
     643 *                      if we're processing a input context modifier program.)
    640644 */
    641 static bool Bs3Cg1RunContextModifier(PBS3CG1STATE pThis, PBS3REGCTX pCtx, PCBS3CG1TESTHDR pHdr, unsigned off, unsigned cb)
     645static bool Bs3Cg1RunContextModifier(PBS3CG1STATE pThis, PBS3REGCTX pCtx, PCBS3CG1TESTHDR pHdr, unsigned off, unsigned cb,
     646                                     PCBS3REGCTX pEflCtx)
    642647{
    643648    uint8_t const BS3_FAR *pbCode = (uint8_t const BS3_FAR *)(pHdr + 1) + off;
     
    782787            if (offField < sizeof(BS3REGCTX))
    783788                PtrField.pu8 = (uint8_t BS3_FAR *)pCtx + offField;
     789            /* Special field: Copying in undefined EFLAGS from the result context. */
     790            else if (idxField == BS3CG1DST_EFL_UNDEF)
     791            {
     792                if (!pEflCtx || (bOpcode & BS3CG1_CTXOP_OPERATOR_MASK) != BS3CG1_CTXOP_ASSIGN)
     793                {
     794                    Bs3TestFailed("Invalid BS3CG1DST_EFL_UNDEF usage");
     795                    return false;
     796                }
     797                PtrField.pu32 = &pCtx->rflags.u32;
     798                uValue = (*PtrField.pu32 & ~(uint32_t)uValue) | (pEflCtx->rflags.u32 & (uint32_t)uValue);
     799            }
    784800            //@todo else if (idxField <= BS3CG1DST_OP4)
    785801            //@todo {
     
    10441060                        This.Ctx.rip.u = BS3_FP_OFF(pbCode);
    10451061
    1046                         if (Bs3Cg1RunContextModifier(&This, &This.Ctx, pHdr, pHdr->cbSelector, pHdr->cbInput))
     1062                        if (Bs3Cg1RunContextModifier(&This, &This.Ctx, pHdr, pHdr->cbSelector, pHdr->cbInput, NULL))
    10471063                        {
    10481064                            /* Run the instruction. */
     
    10531069
    10541070                            /* Check the control exception result first. */
    1055                             if (   This.TrapFrame.bXcpt == (BS3_MODE_IS_PAGED(bMode) ? X86_XCPT_PF : X86_XCPT_UD)
     1071                            if (   This.TrapFrame.bXcpt     == (BS3_MODE_IS_PAGED(bMode) ? X86_XCPT_PF : X86_XCPT_UD)
    10561072                                && This.TrapFrame.Ctx.rip.u == This.Ctx.rip.u + This.cbCurInstr)
    10571073                            {
    10581074                                /* Apply output modifications and compare the contexts. */
    10591075                                if (Bs3Cg1RunContextModifier(&This, &This.Ctx, pHdr,
    1060                                                              pHdr->cbSelector + pHdr->cbInput, pHdr->cbOutput))
     1076                                                             pHdr->cbSelector + pHdr->cbInput, pHdr->cbOutput,
     1077                                                             &This.TrapFrame.Ctx))
    10611078                                {
    10621079                                    Bs3TestCheckRegCtxEx(&This.TrapFrame.Ctx, &This.Ctx, This.cbCurInstr,  0 /*cbSpAdjust*/,
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h

    r66055 r66102  
    201201    /* Flags. */
    202202    BS3CG1DST_EFL,
     203    BS3CG1DST_EFL_UNDEF, /**< Special field only valid in output context modifiers: EFLAGS |= Value & Ouput.EFLAGS; */
    203204    /* 8-bit GPRs. */
    204205    BS3CG1DST_AL,
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