Changeset 882 in vbox
- Timestamp:
- Feb 13, 2007 5:26:15 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18594
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/EM.cpp
r880 r882 1515 1515 && pCtx->eflags.Bits.u1VM == 0) 1516 1516 { 1517 RTGCPTR pInstrGC;1518 1517 Assert(!PATMIsPatchGCAddr(pVM, pCtx->eip)); 1519 1520 pInstrGC = SELMToFlat(pVM, pCtx->cs, &pCtx->csHid, (RTGCPTR)pCtx->eip); 1521 1522 CSAMR3CheckEIP(pVM, pInstrGC, SELMIsSelector32Bit(pVM, pCtx->cs, &pCtx->csHid)); 1518 CSAMR3CheckCode(pVM, pCtx, pCtx->eip); 1523 1519 } 1524 1520 … … 2486 2482 { 2487 2483 STAM_PROFILE_ADV_SUSPEND(&pVM->em.s.StatRAWEntry, b); 2488 CSAMR3Check EIP(pVM, pCtx->eip, SELMIsSelector32Bit(pVM, pCtx->cs, &pCtx->csHid));2484 CSAMR3CheckCode(pVM, pCtx, pCtx->eip); 2489 2485 STAM_PROFILE_ADV_RESUME(&pVM->em.s.StatRAWEntry, b); 2490 2486 } … … 3021 3017 if (VM_FF_ISSET(pVM, VM_FF_CSAM_SCAN_PAGE)) 3022 3018 { 3019 PCPUMCTX pCtx = pVM->em.s.pCtx; 3020 3023 3021 /** @todo: check for 16 or 32 bits code! (D bit in the code selector) */ 3024 3022 Log(("Forced action VM_FF_CSAM_SCAN_PAGE\n")); 3025 CSAMR3CheckEIP(pVM, CPUMGetGuestEIP(pVM), true); 3023 3024 CSAMR3CheckCode(pVM, pCtx, pCtx->eip); 3026 3025 VM_FF_CLEAR(pVM, VM_FF_CSAM_SCAN_PAGE); 3027 3026 } -
trunk/src/VBox/VMM/PATM/CSAM.cpp
r846 r882 2028 2028 2029 2029 /** 2030 * Scan and analyse code starting at specified EIP2031 * 2032 * @returns VBox status code. (trap handled or not)2030 * Scan and analyse code 2031 * 2032 * @returns VBox status code. 2033 2033 * @param pVM The VM to operate on. 2034 * @param p Eip Instruction pointer2035 * @param fCode32 16 of 32 bits code2036 */ 2037 CSAMR3DECL(int) CSAMR3Check EIP(PVM pVM, RTGCPTR pEip, bool fCode32)2034 * @param pCtx CPU context 2035 * @param pInstrGC Instruction pointer 2036 */ 2037 CSAMR3DECL(int) CSAMR3CheckCode(PVM pVM, PCPUMCTX pCtx, RTGCPTR pInstrGC) 2038 2038 { 2039 2039 int rc; 2040 2040 PCSAMPAGE pPage = NULL; 2041 2041 2042 if (EMIsRawRing0Enabled(pVM) == false || PATMIsPatchGCAddr(pVM, p Eip) == true)2042 if (EMIsRawRing0Enabled(pVM) == false || PATMIsPatchGCAddr(pVM, pInstrGC) == true) 2043 2043 { 2044 2044 // No use … … 2050 2050 // Cache record for PATMGCVirtToHCVirt 2051 2051 CSAMP2GLOOKUPREC cacheRec = {0}; 2052 bool fCode32 = SELMIsSelector32Bit(pVM, pCtx->cs, &pCtx->csHid); 2052 2053 2053 2054 //assuming 32 bits code for now 2054 2055 Assert(fCode32); 2055 2056 2057 pInstrGC = SELMToFlat(pVM, pCtx->cs, &pCtx->csHid, pInstrGC); 2058 2056 2059 STAM_PROFILE_START(&pVM->csam.s.StatTime, a); 2057 rc = csamAnalyseCallCodeStream(pVM, p Eip, pEip, fCode32, CSAMR3AnalyseCallback, pPage, &cacheRec);2060 rc = csamAnalyseCallCodeStream(pVM, pInstrGC, pInstrGC, fCode32, CSAMR3AnalyseCallback, pPage, &cacheRec); 2058 2061 STAM_PROFILE_STOP(&pVM->csam.s.StatTime, a); 2059 2062 if (rc != VINF_SUCCESS) … … 2061 2064 Log(("csamAnalyseCodeStream failed with %d\n", rc)); 2062 2065 return rc; 2063 }2064 else2065 {2066 // Log(("CSAMR3CheckEIP: already scanned page at %VGv\n", pEip));2067 2066 } 2068 2067 } -
trunk/src/VBox/VMM/PATM/PATM.cpp
r838 r882 3909 3909 { 3910 3910 DISCPUSTATE cpu; 3911 PCPUMCTX pCtx; 3911 3912 HCPTRTYPE(uint8_t *) pInstrHC; 3912 3913 uint32_t opsize; … … 3924 3925 return VERR_PATCHING_REFUSED; 3925 3926 3927 CPUMQueryGuestCtxPtr(pVM, &pCtx); 3928 3926 3929 /* Test for patch conflict only with patches that actually change guest code. */ 3927 3930 if (!(flags & (PATMFL_GUEST_SPECIFIC|PATMFL_IDTHANDLER|PATMFL_INTHANDLER|PATMFL_TRAMPOLINE))) … … 3948 3951 { 3949 3952 /* New code. Make sure CSAM has a go at it first. */ 3950 CSAMR3Check EIP(pVM, pInstrGC, !!(flags & PATMFL_CODE32));3953 CSAMR3CheckCode(pVM, pCtx, pInstrGC); 3951 3954 } 3952 3955
Note:
See TracChangeset
for help on using the changeset viewer.