VirtualBox

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


Ignore:
Timestamp:
Jan 22, 2018 8:31:09 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
120402
Message:

bootsector/bs3-cpu-instr-2: FSGSBASE testcase fixes.

File:
1 edited

Legend:

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

    r70651 r70666  
    845845
    846846
    847 static void bs3CpuInstr2_rdfsbase_rdgsbase_Common(uint8_t bMode, bool fSupportsFsGsBase,
    848                                                   BS3CI2FSGSBASE const *paFsGsBaseWorkers, unsigned cFsGsBaseWorkers)
     847static void bs3CpuInstr2_rdfsbase_rdgsbase_Common(uint8_t bMode, BS3CI2FSGSBASE const *paFsGsBaseWorkers,
     848                                                  unsigned cFsGsBaseWorkers)
    849849{
    850850    BS3REGCTX         Ctx;
     
    853853    unsigned          iWorker;
    854854    unsigned          iIter;
     855    uint32_t          uDummy;
     856    uint32_t          uStdExtFeatEbx;
     857    bool              fSupportsFsGsBase;
     858
     859    ASMCpuId_Idx_ECX(7, 0, &uDummy, &uStdExtFeatEbx, &uDummy, &uDummy);
     860    fSupportsFsGsBase = RT_BOOL(uStdExtFeatEbx & X86_CPUID_STEXT_FEATURE_EBX_FSGSBASE);
    855861
    856862    /* Ensure the structures are allocated before we sample the stack pointer. */
     
    873879            bs3CpuInstr2_fsgsbase_ExpectUD(bMode, &Ctx, &ExpectCtx, &TrapFrame);
    874880
    875             /* Read null base address. */
     881            /* Read existing base address. */
    876882            Ctx.rbx.u  = 0xa0000;
    877883            Ctx.cr4.u |= X86_CR4_FSGSBASE;
     
    879885            Bs3TrapSetJmpAndRestore(&Ctx, &TrapFrame);
    880886            ExpectCtx.rip.u       = Ctx.rip.u + paFsGsBaseWorkers[iWorker].offWorkerUd2;
    881             ExpectCtx.rbx.u       = 0;
     887            ExpectCtx.rbx.u       = TrapFrame.Ctx.rbx.u;
    882888            ExpectCtx.rflags.u32 |= X86_EFL_RF;
    883889            if (!Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &ExpectCtx, 0 /*cbPcAdjust*/, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, "lm64",
     
    908914
    909915
    910 static void bs3CpuInstr2_wrfsbase_wrgsbase_Common(uint8_t bMode, bool fSupportsFsGsBase,
    911                                                   BS3CI2FSGSBASE const *paFsGsBaseWorkers, unsigned cFsGsBaseWorkers)
     916static void bs3CpuInstr2_wrfsbase_wrgsbase_Common(uint8_t bMode, BS3CI2FSGSBASE const *paFsGsBaseWorkers,
     917                                                  unsigned cFsGsBaseWorkers)
    912918{
    913919    BS3REGCTX         Ctx;
     
    916922    unsigned          iWorker;
    917923    unsigned          iIter;
     924    uint32_t          uDummy;
     925    uint32_t          uStdExtFeatEbx;
     926    bool              fSupportsFsGsBase;
     927
     928    ASMCpuId_Idx_ECX(7, 0, &uDummy, &uStdExtFeatEbx, &uDummy, &uDummy);
     929    fSupportsFsGsBase = RT_BOOL(uStdExtFeatEbx & X86_CPUID_STEXT_FEATURE_EBX_FSGSBASE);
    918930
    919931    /* Ensure the structures are allocated before we sample the stack pointer. */
     
    972984BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_wrfsbase)(uint8_t bMode)
    973985{
    974     bool const fSupportFsGsBase = RT_BOOL(ASMCpuId_EBX(7) & X86_CPUID_STEXT_FEATURE_EBX_FSGSBASE);
    975     bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, fSupportFsGsBase, s_aWrFsBaseWorkers, RT_ELEMENTS(s_aWrFsBaseWorkers));
     986    bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, s_aWrFsBaseWorkers, RT_ELEMENTS(s_aWrFsBaseWorkers));
    976987    return 0;
    977988}
     
    980991BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_wrgsbase)(uint8_t bMode)
    981992{
    982     bool const fSupportFsGsBase = RT_BOOL(ASMCpuId_EBX(7) & X86_CPUID_STEXT_FEATURE_EBX_FSGSBASE);
    983     bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, fSupportFsGsBase, s_aWrGsBaseWorkers, RT_ELEMENTS(s_aWrGsBaseWorkers));
     993    bs3CpuInstr2_wrfsbase_wrgsbase_Common(bMode, s_aWrGsBaseWorkers, RT_ELEMENTS(s_aWrGsBaseWorkers));
    984994    return 0;
    985995}
     
    988998BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdfsbase)(uint8_t bMode)
    989999{
    990     bool const fSupportFsGsBase = RT_BOOL(ASMCpuId_EBX(7) & X86_CPUID_STEXT_FEATURE_EBX_FSGSBASE);
    991     bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, fSupportFsGsBase, s_aRdFsBaseWorkers, RT_ELEMENTS(s_aRdFsBaseWorkers));
     1000    bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, s_aRdFsBaseWorkers, RT_ELEMENTS(s_aRdFsBaseWorkers));
    9921001    return 0;
    9931002}
     
    9961005BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdgsbase)(uint8_t bMode)
    9971006{
    998     bool const fSupportFsGsBase = RT_BOOL(ASMCpuId_EBX(7) & X86_CPUID_STEXT_FEATURE_EBX_FSGSBASE);
    999     bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, fSupportFsGsBase, s_aRdGsBaseWorkers, RT_ELEMENTS(s_aRdGsBaseWorkers));
     1007    bs3CpuInstr2_rdfsbase_rdgsbase_Common(bMode, s_aRdGsBaseWorkers, RT_ELEMENTS(s_aRdGsBaseWorkers));
    10001008    return 0;
    10011009}
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