Changeset 70696 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Jan 23, 2018 4:28:54 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 120433
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.c
r70667 r70696 848 848 849 849 static void bs3CpuInstr2_rdfsbase_rdgsbase_Common(uint8_t bMode, BS3CI2FSGSBASE const *paFsGsBaseWorkers, 850 unsigned cFsGsBaseWorkers )850 unsigned cFsGsBaseWorkers, uint32_t idxFsGsBaseMsr) 851 851 { 852 852 BS3REGCTX Ctx; … … 877 877 if (fSupportsFsGsBase) 878 878 { 879 uint64_t uBaseAddr; 880 879 881 /* CR4.FSGSBASE disabled -> #UD. */ 880 882 Ctx.cr4.u &= ~X86_CR4_FSGSBASE; 881 883 bs3CpuInstr2_fsgsbase_ExpectUD(bMode, &Ctx, &ExpectCtx, &TrapFrame); 882 884 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; 885 888 Ctx.cr4.u |= X86_CR4_FSGSBASE; 886 889 Bs3MemCpy(&ExpectCtx, &Ctx, sizeof(ExpectCtx)); 887 890 Bs3TrapSetJmpAndRestore(&Ctx, &TrapFrame); 888 891 ExpectCtx.rip.u = Ctx.rip.u + paFsGsBaseWorkers[iWorker].offWorkerUd2; 889 ExpectCtx.rbx.u = TrapFrame.Ctx.rbx.u;892 ExpectCtx.rbx.u = uBaseAddr; 890 893 ExpectCtx.rflags.u32 |= X86_EFL_RF; 891 894 if (!Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &ExpectCtx, 0 /*cbPcAdjust*/, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, "lm64", … … 895 898 } 896 899 897 /* Write and read back the address. */900 /* Write, read and verify series of base addresses. */ 898 901 if (!bs3CpuInstr2_fsgsbase_VerifyWorker(bMode, &Ctx, &ExpectCtx, &TrapFrame, &paFsGsBaseWorkers[iWorker], &iIter)) 899 902 { … … 950 953 bs3CpuInstr2_fsgsbase_ExpectUD(bMode, &Ctx, &ExpectCtx, &TrapFrame); 951 954 952 /* Write thebase address. */955 /* Write a base address. */ 953 956 Ctx.rbx.u = 0xa0000; 954 957 Ctx.cr4.u |= X86_CR4_FSGSBASE; … … 963 966 } 964 967 965 /* Write and read back the address. */968 /* Write and read back series of base addresses. */ 966 969 if (!bs3CpuInstr2_fsgsbase_VerifyWorker(bMode, &Ctx, &ExpectCtx, &TrapFrame, &paFsGsBaseWorkers[iWorker], &iIter)) 967 970 { … … 1000 1003 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdfsbase)(uint8_t bMode) 1001 1004 { 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); 1003 1006 return 0; 1004 1007 } … … 1007 1010 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdgsbase)(uint8_t bMode) 1008 1011 { 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); 1010 1013 return 0; 1011 1014 }
Note:
See TracChangeset
for help on using the changeset viewer.