- Timestamp:
- May 18, 2007 3:52:52 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 21317
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/SELM.cpp
r2720 r2721 1733 1733 } 1734 1734 } 1735 } 1736 1737 if (!pVM->selm.s.fSyncTSSRing0Stack) 1738 { 1739 RTGCPTR pGuestTSS = pVM->selm.s.GCPtrGuestTss; 1740 uint32_t ESPR0; 1741 int rc = PGMPhysReadGCPtr(pVM, &ESPR0, pGuestTSS + RT_OFFSETOF(VBOXTSS, esp0), sizeof(ESPR0)); 1742 if (VBOX_SUCCESS(rc)) 1743 { 1744 RTSEL SelSS0; 1745 rc = PGMPhysReadGCPtr(pVM, &SelSS0, pGuestTSS + RT_OFFSETOF(VBOXTSS, ss0), sizeof(SelSS0)); 1735 1736 if (!pVM->selm.s.fSyncTSSRing0Stack) 1737 { 1738 RTGCPTR pGuestTSS = pVM->selm.s.GCPtrGuestTss; 1739 uint32_t ESPR0; 1740 int rc = PGMPhysReadGCPtr(pVM, &ESPR0, pGuestTSS + RT_OFFSETOF(VBOXTSS, esp0), sizeof(ESPR0)); 1746 1741 if (VBOX_SUCCESS(rc)) 1747 1742 { 1748 if ( ESPR0 == pVM->selm.s.Tss.esp1 1749 && SelSS0 == (pVM->selm.s.Tss.ss1 & ~1)) 1750 return true; 1751 1752 RTGCPHYS GCPhys; 1753 uint64_t fFlags; 1754 1755 rc = PGMGstGetPage(pVM, pGuestTSS, &fFlags, &GCPhys); 1756 AssertRC(rc); 1757 AssertMsgFailed(("TSS out of sync!! (%04X:%08X vs %04X:%08X (guest)) Tss=%VGv Phys=%VGp\n", 1758 (pVM->selm.s.Tss.ss1 & ~1), pVM->selm.s.Tss.esp1, SelSS0, ESPR0, pGuestTSS, GCPhys)); 1743 RTSEL SelSS0; 1744 rc = PGMPhysReadGCPtr(pVM, &SelSS0, pGuestTSS + RT_OFFSETOF(VBOXTSS, ss0), sizeof(SelSS0)); 1745 if (VBOX_SUCCESS(rc)) 1746 { 1747 if ( ESPR0 == pVM->selm.s.Tss.esp1 1748 && SelSS0 == (pVM->selm.s.Tss.ss1 & ~1)) 1749 return true; 1750 1751 RTGCPHYS GCPhys; 1752 uint64_t fFlags; 1753 1754 rc = PGMGstGetPage(pVM, pGuestTSS, &fFlags, &GCPhys); 1755 AssertRC(rc); 1756 AssertMsgFailed(("TSS out of sync!! (%04X:%08X vs %04X:%08X (guest)) Tss=%VGv Phys=%VGp\n", 1757 (pVM->selm.s.Tss.ss1 & ~1), pVM->selm.s.Tss.esp1, SelSS0, ESPR0, pGuestTSS, GCPhys)); 1758 } 1759 else 1760 AssertRC(rc); 1759 1761 } 1760 1762 else 1761 AssertRC(rc); 1762 } 1763 else 1764 /* Happens during early Windows XP boot when it is switching page tables. */ 1765 Assert(rc == VINF_SUCCESS || ((rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) && !(CPUMGetGuestEFlags(pVM) & X86_EFL_IF))); 1763 /* Happens during early Windows XP boot when it is switching page tables. */ 1764 Assert(rc == VINF_SUCCESS || ((rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) && !(CPUMGetGuestEFlags(pVM) & X86_EFL_IF))); 1765 } 1766 1766 } 1767 1767 return false;
Note:
See TracChangeset
for help on using the changeset viewer.