vbox的更動 17106 路徑 trunk/src/recompiler_new
- 時間撮記:
- 2009-2-25 上午12:35:15 (16 年 以前)
- 檔案:
-
- 修改 1 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/recompiler_new/VBoxRecompiler.c
r17041 r17106 1283 1283 pCtx->cr0 = env->cr[0]; 1284 1284 pCtx->cr3 = env->cr[3]; 1285 if ((env->cr[4] ^ pCtx->cr4) & X86_CR4_VME) 1286 VM_FF_SET(pVM, VM_FF_SELM_SYNC_TSS); 1285 1287 pCtx->cr4 = env->cr[4]; 1286 1288 … … 1403 1405 pCtx->cr0 = env->cr[0]; 1404 1406 pCtx->cr3 = env->cr[3]; 1407 if ((env->cr[4] ^ pCtx->cr4) & X86_CR4_VME) 1408 VM_FF_SET(pVM, VM_FF_SELM_SYNC_TSS); 1405 1409 pCtx->cr4 = env->cr[4]; 1406 1410 … … 1438 1442 pCtx->cr0 = env->cr[0]; 1439 1443 pCtx->cr3 = env->cr[3]; 1444 if ((env->cr[4] ^ pCtx->cr4) & X86_CR4_VME) 1445 VM_FF_SET(pVM, VM_FF_SELM_SYNC_TSS); 1440 1446 pCtx->cr4 = env->cr[4]; 1441 1447 … … 2137 2143 pCtx->cr2 = pVM->rem.s.Env.cr[2]; 2138 2144 pCtx->cr3 = pVM->rem.s.Env.cr[3]; 2145 if ((pVM->rem.s.Env.cr[4] ^ pCtx->cr4) & X86_CR4_VME) 2146 VM_FF_SET(pVM, VM_FF_SELM_SYNC_TSS); 2139 2147 pCtx->cr4 = pVM->rem.s.Env.cr[4]; 2140 2148 2141 for (i =0;i<8;i++)2149 for (i = 0; i < 8; i++) 2142 2150 pCtx->dr[i] = pVM->rem.s.Env.dr[i]; 2143 2151 … … 2349 2357 pCtx->cr2 = pVM->rem.s.Env.cr[2]; 2350 2358 pCtx->cr3 = pVM->rem.s.Env.cr[3]; 2359 if ((pVM->rem.s.Env.cr[4] ^ pCtx->cr4) & X86_CR4_VME) 2360 VM_FF_SET(pVM, VM_FF_SELM_SYNC_TSS); 2351 2361 pCtx->cr4 = pVM->rem.s.Env.cr[4]; 2352 2362 2353 for (i =0;i<8;i++)2363 for (i = 0; i < 8; i++) 2354 2364 pCtx->dr[i] = pVM->rem.s.Env.dr[i]; 2355 2365 … … 2370 2380 } 2371 2381 2372 if (pCtx->ldtr != pVM->rem.s.Env.ldt.selector) 2373 { 2374 pCtx->ldtr = pVM->rem.s.Env.ldt.selector; 2382 if ( pCtx->ldtr != pVM->rem.s.Env.ldt.selector 2383 || pCtx->ldtrHid.u64Base != pVM->rem.s.Env.ldt.base 2384 || pCtx->ldtrHid.u32Limit != pVM->rem.s.Env.ldt.limit 2385 || pCtx->ldtrHid.Attr.u != ((pVM->rem.s.Env.ldt.flags >> 8) & 0xF0FF)) 2386 { 2387 pCtx->ldtr = pVM->rem.s.Env.ldt.selector; 2388 pCtx->ldtrHid.u64Base = pVM->rem.s.Env.ldt.base; 2389 pCtx->ldtrHid.u32Limit = pVM->rem.s.Env.ldt.limit; 2390 pCtx->ldtrHid.Attr.u = (pVM->rem.s.Env.ldt.flags >> 8) & 0xFFFF; 2375 2391 STAM_COUNTER_INC(&gStatREMLDTRChange); 2376 2392 VM_FF_SET(pVM, VM_FF_SELM_SYNC_LDT); 2377 2393 } 2378 if (pCtx->tr != pVM->rem.s.Env.tr.selector) 2379 { 2380 pCtx->tr = pVM->rem.s.Env.tr.selector; 2394 2395 if ( pCtx->tr != pVM->rem.s.Env.tr.selector 2396 || pCtx->trHid.u64Base != pVM->rem.s.Env.tr.base 2397 || pCtx->trHid.u32Limit != pVM->rem.s.Env.tr.limit 2398 /* Qemu and AMD/Intel have different ideas about the busy flag ... */ 2399 || pCtx->trHid.Attr.u != ( (pVM->rem.s.Env.tr.flags >> 8) & 0xF0FF 2400 ? (pVM->rem.s.Env.tr.flags | DESC_TSS_BUSY_MASK) >> 8 2401 : 0) ) 2402 { 2403 Log(("REM: TR changed! %#x{%#llx,%#x,%#x} -> %#x{%llx,%#x,%#x}\n", 2404 pCtx->tr, pCtx->trHid.u64Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u, 2405 pVM->rem.s.Env.tr.selector, (uint64_t)pVM->rem.s.Env.tr.base, pVM->rem.s.Env.tr.limit, 2406 (pVM->rem.s.Env.tr.flags >> 8) & 0xF0FF ? (pVM->rem.s.Env.tr.flags | DESC_TSS_BUSY_MASK) >> 8 : 0)); 2407 pCtx->tr = pVM->rem.s.Env.tr.selector; 2408 pCtx->trHid.u64Base = pVM->rem.s.Env.tr.base; 2409 pCtx->trHid.u32Limit = pVM->rem.s.Env.tr.limit; 2410 pCtx->trHid.Attr.u = (pVM->rem.s.Env.tr.flags >> 8) & 0xF0FF; 2411 if (pCtx->trHid.Attr.u) 2412 pCtx->trHid.Attr.u |= DESC_TSS_BUSY_MASK >> 8; 2381 2413 STAM_COUNTER_INC(&gStatREMTRChange); 2382 2414 VM_FF_SET(pVM, VM_FF_SELM_SYNC_TSS); … … 2408 2440 pCtx->ssHid.u32Limit = pVM->rem.s.Env.segs[R_SS].limit; 2409 2441 pCtx->ssHid.Attr.u = (pVM->rem.s.Env.segs[R_SS].flags >> 8) & 0xFFFF; 2410 2411 pCtx->ldtrHid.u64Base = pVM->rem.s.Env.ldt.base;2412 pCtx->ldtrHid.u32Limit = pVM->rem.s.Env.ldt.limit;2413 pCtx->ldtrHid.Attr.u = (pVM->rem.s.Env.ldt.flags >> 8) & 0xFFFF;2414 2415 pCtx->trHid.u64Base = pVM->rem.s.Env.tr.base;2416 pCtx->trHid.u32Limit = pVM->rem.s.Env.tr.limit;2417 pCtx->trHid.Attr.u = (pVM->rem.s.Env.tr.flags >> 8) & 0xFFFF;2418 2442 2419 2443 /* Sysenter MSR */
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器