VirtualBox

Changeset 72146 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 7, 2018 3:22:35 PM (7 years ago)
Author:
vboxsync
Message:

bs3kit: Made g_fBs3TrapNoV86Assist only apply to #GP assist, not to the V86 syscall stuff.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapDefaultHandler.c

    r72138 r72146  
    104104        switch (pTrapFrame->Ctx.rdx.u8)
    105105        {
    106             case 0: ASMSetCR0(uValue); break;
    107             case 2: ASMSetCR2(uValue); break;
    108             case 3: ASMSetCR3(uValue); break;
    109             case 4: ASMSetCR4(uValue); break;
     106            case 0: ASMSetCR0(uValue); pTrapFrame->Ctx.cr0.u32 = uValue; break;
     107            case 2: ASMSetCR2(uValue); pTrapFrame->Ctx.cr2.u32 = uValue; break;
     108            case 3: ASMSetCR3(uValue); pTrapFrame->Ctx.cr3.u32 = uValue; break;
     109            case 4: ASMSetCR4(uValue); pTrapFrame->Ctx.cr4.u32 = uValue; break;
    110110            default: Bs3Panic();
    111111        }
     
    126126    }
    127127    else if (uSyscallNo == BS3_SYSCALL_SET_TR)
     128    {
    128129        Bs3RegSetTr(pTrapFrame->Ctx.rdx.u16);
     130        pTrapFrame->Ctx.tr = pTrapFrame->Ctx.rdx.u16;
     131    }
    129132    else if (uSyscallNo == BS3_SYSCALL_GET_TR)
    130133        pTrapFrame->Ctx.rax.u16 = ASMGetTR();
    131134    else if (uSyscallNo == BS3_SYSCALL_SET_LDTR)
     135    {
    132136        Bs3RegSetLdtr(pTrapFrame->Ctx.rdx.u16);
     137        pTrapFrame->Ctx.ldtr = pTrapFrame->Ctx.rdx.u16;
     138    }
    133139    else if (uSyscallNo == BS3_SYSCALL_GET_LDTR)
    134140        pTrapFrame->Ctx.rax.u16 = ASMGetLDTR();
     
    148154    //                  pTrapFrame->Ctx.cs, pTrapFrame->Ctx.rip.u32, pTrapFrame->Ctx.rflags.u32, pTrapFrame->Ctx.ss,
    149155    //                  pTrapFrame->Ctx.rsp.u32, g_fBs3TrapNoV86Assist, 42);
    150     if (   (pTrapFrame->Ctx.rflags.u32 & X86_EFL_VM)
    151         && !g_fBs3TrapNoV86Assist)
     156    if ((pTrapFrame->Ctx.rflags.u32 & X86_EFL_VM))
    152157    {
    153158        bool                    fHandled    = true;
     
    165170         * Deal with GPs in V8086 mode.
    166171         */
    167         if (pTrapFrame->bXcpt == X86_XCPT_GP)
     172        if (   pTrapFrame->bXcpt == X86_XCPT_GP
     173            && !g_fBs3TrapNoV86Assist)
    168174        {
    169175            bOpCode = *pbCode++;
     
    259265         */
    260266        else if (   pTrapFrame->bXcpt == X86_XCPT_UD
     267                 && pTrapFrame->Ctx.cs == BS3_SEL_TEXT16
     268                 && pTrapFrame->Ctx.rax.u16 <= BS3_SYSCALL_LAST
    261269                 && pbCode[0] == 0xf0
    262270                 && pbCode[1] == 0xcd
    263                  && pbCode[2] == BS3_TRAP_SYSCALL
    264                  && pTrapFrame->Ctx.cs == BS3_SEL_TEXT16)
     271                 && pbCode[2] == BS3_TRAP_SYSCALL)
    265272        {
    266273            pbCode += 3;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r72138 r72146  
    844844/** Get the LDT register (value returned in ax). */
    845845#define BS3_SYSCALL_GET_LDTR    UINT16_C(0x000f)
     846/** The last system call value. */
     847#define BS3_SYSCALL_LAST        BS3_SYSCALL_GET_LDTR
    846848/** @} */
    847849
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