VirtualBox

Changeset 70696 in vbox for trunk/src/VBox/ValidationKit


Ignore:
Timestamp:
Jan 23, 2018 4:28:54 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
120433
Message:

bootsectors/bs3-cpu-instr-2: Use the FS/GS base MSR to verify initial, existing base address read test.

File:
1 edited

Legend:

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

    r70667 r70696  
    848848
    849849static void bs3CpuInstr2_rdfsbase_rdgsbase_Common(uint8_t bMode, BS3CI2FSGSBASE const *paFsGsBaseWorkers,
    850                                                   unsigned cFsGsBaseWorkers)
     850                                                  unsigned cFsGsBaseWorkers, uint32_t idxFsGsBaseMsr)
    851851{
    852852    BS3REGCTX         Ctx;
     
    877877        if (fSupportsFsGsBase)
    878878        {
     879            uint64_t uBaseAddr;
     880
    879881            /* CR4.FSGSBASE disabled -> #UD. */
    880882            Ctx.cr4.u &= ~X86_CR4_FSGSBASE;
    881883            bs3CpuInstr2_fsgsbase_ExpectUD(bMode, &Ctx, &ExpectCtx, &TrapFrame);
    882884
    883             /* Read any existing base address. */
    884             Ctx.rbx.u  = 0xa0000;
     885            /* Read and verify existing base address. */
     886            uBaseAddr  = ASMRdMsr(idxFsGsBaseMsr);
     887            Ctx.rbx.u  = 0;
    885888            Ctx.cr4.u |= X86_CR4_FSGSBASE;
    886889            Bs3MemCpy(&ExpectCtx, &Ctx, sizeof(ExpectCtx));
    887890            Bs3TrapSetJmpAndRestore(&Ctx, &TrapFrame);
    888891            ExpectCtx.rip.u       = Ctx.rip.u + paFsGsBaseWorkers[iWorker].offWorkerUd2;
    889             ExpectCtx.rbx.u       = TrapFrame.Ctx.rbx.u;
     892            ExpectCtx.rbx.u       = uBaseAddr;
    890893            ExpectCtx.rflags.u32 |= X86_EFL_RF;
    891894            if (!Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &ExpectCtx, 0 /*cbPcAdjust*/, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, "lm64",
     
    895898            }
    896899
    897             /* Write and read back the address. */
     900            /* Write, read and verify series of base addresses. */
    898901            if (!bs3CpuInstr2_fsgsbase_VerifyWorker(bMode, &Ctx, &ExpectCtx, &TrapFrame, &paFsGsBaseWorkers[iWorker], &iIter))
    899902            {
     
    950953            bs3CpuInstr2_fsgsbase_ExpectUD(bMode, &Ctx, &ExpectCtx, &TrapFrame);
    951954
    952             /* Write the base address. */
     955            /* Write a base address. */
    953956            Ctx.rbx.u  = 0xa0000;
    954957            Ctx.cr4.u |= X86_CR4_FSGSBASE;
     
    963966            }
    964967
    965             /* Write and read back the address. */
     968            /* Write and read back series of base addresses. */
    966969            if (!bs3CpuInstr2_fsgsbase_VerifyWorker(bMode, &Ctx, &ExpectCtx, &TrapFrame, &paFsGsBaseWorkers[iWorker], &iIter))
    967970            {
     
    10001003BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdfsbase)(uint8_t bMode)
    10011004{
    1002     bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, s_aRdFsBaseWorkers, RT_ELEMENTS(s_aRdFsBaseWorkers));
     1005    bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, s_aRdFsBaseWorkers, RT_ELEMENTS(s_aRdFsBaseWorkers), MSR_K8_FS_BASE);
    10031006    return 0;
    10041007}
     
    10071010BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdgsbase)(uint8_t bMode)
    10081011{
    1009     bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, s_aRdGsBaseWorkers, RT_ELEMENTS(s_aRdGsBaseWorkers));
     1012    bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, s_aRdGsBaseWorkers, RT_ELEMENTS(s_aRdGsBaseWorkers), MSR_K8_GS_BASE);
    10101013    return 0;
    10111014}
Note: See TracChangeset for help on using the changeset viewer.

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