Changeset 70666 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Jan 22, 2018 8:31:09 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 120402
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.c
r70651 r70666 845 845 846 846 847 static void bs3CpuInstr2_rdfsbase_rdgsbase_Common(uint8_t bMode, bool fSupportsFsGsBase,848 BS3CI2FSGSBASE const *paFsGsBaseWorkers,unsigned cFsGsBaseWorkers)847 static void bs3CpuInstr2_rdfsbase_rdgsbase_Common(uint8_t bMode, BS3CI2FSGSBASE const *paFsGsBaseWorkers, 848 unsigned cFsGsBaseWorkers) 849 849 { 850 850 BS3REGCTX Ctx; … … 853 853 unsigned iWorker; 854 854 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); 855 861 856 862 /* Ensure the structures are allocated before we sample the stack pointer. */ … … 873 879 bs3CpuInstr2_fsgsbase_ExpectUD(bMode, &Ctx, &ExpectCtx, &TrapFrame); 874 880 875 /* Read nullbase address. */881 /* Read existing base address. */ 876 882 Ctx.rbx.u = 0xa0000; 877 883 Ctx.cr4.u |= X86_CR4_FSGSBASE; … … 879 885 Bs3TrapSetJmpAndRestore(&Ctx, &TrapFrame); 880 886 ExpectCtx.rip.u = Ctx.rip.u + paFsGsBaseWorkers[iWorker].offWorkerUd2; 881 ExpectCtx.rbx.u = 0;887 ExpectCtx.rbx.u = TrapFrame.Ctx.rbx.u; 882 888 ExpectCtx.rflags.u32 |= X86_EFL_RF; 883 889 if (!Bs3TestCheckRegCtxEx(&TrapFrame.Ctx, &ExpectCtx, 0 /*cbPcAdjust*/, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, "lm64", … … 908 914 909 915 910 static void bs3CpuInstr2_wrfsbase_wrgsbase_Common(uint8_t bMode, bool fSupportsFsGsBase,911 BS3CI2FSGSBASE const *paFsGsBaseWorkers,unsigned cFsGsBaseWorkers)916 static void bs3CpuInstr2_wrfsbase_wrgsbase_Common(uint8_t bMode, BS3CI2FSGSBASE const *paFsGsBaseWorkers, 917 unsigned cFsGsBaseWorkers) 912 918 { 913 919 BS3REGCTX Ctx; … … 916 922 unsigned iWorker; 917 923 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); 918 930 919 931 /* Ensure the structures are allocated before we sample the stack pointer. */ … … 972 984 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_wrfsbase)(uint8_t bMode) 973 985 { 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)); 976 987 return 0; 977 988 } … … 980 991 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_wrgsbase)(uint8_t bMode) 981 992 { 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)); 984 994 return 0; 985 995 } … … 988 998 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdfsbase)(uint8_t bMode) 989 999 { 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)); 992 1001 return 0; 993 1002 } … … 996 1005 BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_rdgsbase)(uint8_t bMode) 997 1006 { 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)); 1000 1008 return 0; 1001 1009 }
Note:
See TracChangeset
for help on using the changeset viewer.