Changeset 105250 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Jul 10, 2024 1:47:33 AM (7 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r105177 r105250 740 740 * G bit to accomplish this. 741 741 */ 742 bool fMaybeLargePage = true;742 int fMaybeLargePage = -1; 743 743 if (pTlb->aEntries[idxEven].uTag == (GCPtrTag | pTlb->uTlbRevision)) 744 744 { … … 786 786 if ((pTlb->aEntries[idxEven].uTag & GCPtrTagMask) == GCPtrTag) 787 787 { 788 Assert(pTlb->aEntries[idxEven].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE); /* bad guest */ 789 pTlb->aEntries[idxEven].uTag = 0; 790 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 791 pVCpu->iem.s.cbInstrBufTotal = 0; 788 if (pTlb->aEntries[idxEven].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE) 789 { 790 pTlb->aEntries[idxEven].uTag = 0; 791 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 792 pVCpu->iem.s.cbInstrBufTotal = 0; 793 fMaybeLargePage = true; 794 } 795 else 796 { 797 Assert(fMaybeLargePage == -1); 798 break; 799 } 792 800 } 793 801 if ((pTlb->aEntries[idxEven + 1].uTag & GCPtrTagMask) == GCPtrTagGlob) 794 802 { 795 Assert(pTlb->aEntries[idxEven + 1].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE); /* bad guest */ 796 pTlb->aEntries[idxEven + 1].uTag = 0; 797 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 798 pVCpu->iem.s.cbInstrBufTotal = 0; 803 if (pTlb->aEntries[idxEven + 1].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE) 804 { 805 pTlb->aEntries[idxEven + 1].uTag = 0; 806 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 807 pVCpu->iem.s.cbInstrBufTotal = 0; 808 fMaybeLargePage = true; 809 } 810 else 811 { 812 Assert(fMaybeLargePage == -1); 813 break; 814 } 799 815 } 800 816 GCPtrTag++; … … 823 839 if ((pTlb->aEntries[idxEven].uTag & GCPtrTagMask) == GCPtrTag) 824 840 { 825 Assert(pTlb->aEntries[idxEven].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE); /* bad guest */ 826 pTlb->aEntries[idxEven].uTag = 0; 827 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 828 pVCpu->iem.s.cbInstrBufTotal = 0; 841 if (pTlb->aEntries[idxEven].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE) 842 { 843 pTlb->aEntries[idxEven].uTag = 0; 844 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 845 pVCpu->iem.s.cbInstrBufTotal = 0; 846 fMaybeLargePage = true; 847 } 848 else 849 { 850 Assert(fMaybeLargePage == -1); 851 break; 852 } 829 853 } 830 854 if ((pTlb->aEntries[idxEven + 1].uTag & GCPtrTagMask) == GCPtrTagGlob) 831 855 { 832 Assert(pTlb->aEntries[idxEven + 1].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE); /* bad guest */ 833 pTlb->aEntries[idxEven + 1].uTag = 0; 834 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 835 pVCpu->iem.s.cbInstrBufTotal = 0; 856 if (pTlb->aEntries[idxEven + 1].fFlagsAndPhysRev & IEMTLBE_F_PT_LARGE_PAGE) 857 { 858 pTlb->aEntries[idxEven + 1].uTag = 0; 859 if (!a_fDataTlb && GCPtrTag == GCPtrInstrBufPcTag) 860 pVCpu->iem.s.cbInstrBufTotal = 0; 861 fMaybeLargePage = true; 862 } 863 else 864 { 865 Assert(fMaybeLargePage == -1); 866 break; 867 } 836 868 } 837 869 GCPtrTag++;
Note:
See TracChangeset
for help on using the changeset viewer.