- Timestamp:
- Mar 12, 2007 12:18:27 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 19426
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/SELM.cpp
r1416 r1418 897 897 */ 898 898 /** @todo we should try to minimize relocations by making sure our current selectors can be reused. */ 899 RTSEL aHyper GDT[SELM_HYPER_SEL_MAX];899 RTSEL aHyperSel[SELM_HYPER_SEL_MAX]; 900 900 if (cbEffLimit >= SELM_HYPER_DEFAULT_BASE) 901 901 { … … 910 910 if (!pGDTE->Gen.u1Present) 911 911 { 912 aHyper GDT[iGDT] = ((uintptr_t)pGDTE - (uintptr_t)pVM->selm.s.paGdtHC) / sizeof(VBOXDESC);913 aHyper GDT[iGDT] = aHyperGDT[iGDT] << X86_SEL_SHIFT;914 Log(("SELM: Found unused GDT %04X\n", aHyper GDT[iGDT]));912 aHyperSel[iGDT] = ((uintptr_t)pGDTE - (uintptr_t)pVM->selm.s.paGdtHC) / sizeof(VBOXDESC); 913 aHyperSel[iGDT] = aHyperSel[iGDT] << X86_SEL_SHIFT; 914 Log(("SELM: Found unused GDT %04X\n", aHyperSel[iGDT])); 915 915 iGDT++; 916 916 } … … 927 927 else 928 928 { 929 aHyper GDT[SELM_HYPER_SEL_CS] = SELM_HYPER_DEFAULT_SEL_CS;930 aHyper GDT[SELM_HYPER_SEL_DS] = SELM_HYPER_DEFAULT_SEL_DS;931 aHyper GDT[SELM_HYPER_SEL_CS64] = SELM_HYPER_DEFAULT_SEL_CS64;932 aHyper GDT[SELM_HYPER_SEL_TSS] = SELM_HYPER_DEFAULT_SEL_TSS;933 aHyper GDT[SELM_HYPER_SEL_TSS_TRAP08] = SELM_HYPER_DEFAULT_SEL_TSS_TRAP08;929 aHyperSel[SELM_HYPER_SEL_CS] = SELM_HYPER_DEFAULT_SEL_CS; 930 aHyperSel[SELM_HYPER_SEL_DS] = SELM_HYPER_DEFAULT_SEL_DS; 931 aHyperSel[SELM_HYPER_SEL_CS64] = SELM_HYPER_DEFAULT_SEL_CS64; 932 aHyperSel[SELM_HYPER_SEL_TSS] = SELM_HYPER_DEFAULT_SEL_TSS; 933 aHyperSel[SELM_HYPER_SEL_TSS_TRAP08] = SELM_HYPER_DEFAULT_SEL_TSS_TRAP08; 934 934 } 935 935 … … 983 983 * Check if our hypervisor selectors were changed. 984 984 */ 985 if ( aHyper GDT[SELM_HYPER_SEL_CS] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS]986 || aHyper GDT[SELM_HYPER_SEL_DS] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_DS]987 || aHyper GDT[SELM_HYPER_SEL_CS64] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS64]988 || aHyper GDT[SELM_HYPER_SEL_TSS] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS]989 || aHyper GDT[SELM_HYPER_SEL_TSS_TRAP08] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08])985 if ( aHyperSel[SELM_HYPER_SEL_CS] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS] 986 || aHyperSel[SELM_HYPER_SEL_DS] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_DS] 987 || aHyperSel[SELM_HYPER_SEL_CS64] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS64] 988 || aHyperSel[SELM_HYPER_SEL_TSS] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS] 989 || aHyperSel[SELM_HYPER_SEL_TSS_TRAP08] != pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08]) 990 990 { 991 991 /* Reinitialize our hypervisor GDTs */ 992 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS] = aHyper GDT[SELM_HYPER_SEL_CS];993 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_DS] = aHyper GDT[SELM_HYPER_SEL_DS];994 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS64] = aHyper GDT[SELM_HYPER_SEL_CS64];995 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS] = aHyper GDT[SELM_HYPER_SEL_TSS];996 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08] = aHyper GDT[SELM_HYPER_SEL_TSS_TRAP08];992 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS] = aHyperSel[SELM_HYPER_SEL_CS]; 993 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_DS] = aHyperSel[SELM_HYPER_SEL_DS]; 994 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_CS64] = aHyperSel[SELM_HYPER_SEL_CS64]; 995 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS] = aHyperSel[SELM_HYPER_SEL_TSS]; 996 pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08] = aHyperSel[SELM_HYPER_SEL_TSS_TRAP08]; 997 997 998 998 STAM_COUNTER_INC(&pVM->selm.s.StatHyperSelsChanged);
Note:
See TracChangeset
for help on using the changeset viewer.