VirtualBox

vbox的更動 17106 路徑 trunk/src/recompiler_new


忽略:
時間撮記:
2009-2-25 上午12:35:15 (16 年 以前)
作者:
vboxsync
訊息:

VMM,REM: Removed the single page limitation on the TSS monitoring and going over the interrupt redirection bitmap monitoring.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/recompiler_new/VBoxRecompiler.c

    r17041 r17106  
    12831283    pCtx->cr0 = env->cr[0];
    12841284    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);
    12851287    pCtx->cr4 = env->cr[4];
    12861288
     
    14031405    pCtx->cr0 = env->cr[0];
    14041406    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);
    14051409    pCtx->cr4 = env->cr[4];
    14061410
     
    14381442    pCtx->cr0 = env->cr[0];
    14391443    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);
    14401446    pCtx->cr4 = env->cr[4];
    14411447
     
    21372143    pCtx->cr2           = pVM->rem.s.Env.cr[2];
    21382144    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);
    21392147    pCtx->cr4           = pVM->rem.s.Env.cr[4];
    21402148
    2141     for (i=0;i<8;i++)
     2149    for (i = 0; i < 8; i++)
    21422150        pCtx->dr[i] = pVM->rem.s.Env.dr[i];
    21432151
     
    23492357    pCtx->cr2           = pVM->rem.s.Env.cr[2];
    23502358    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);
    23512361    pCtx->cr4           = pVM->rem.s.Env.cr[4];
    23522362
    2353     for (i=0;i<8;i++)
     2363    for (i = 0; i < 8; i++)
    23542364        pCtx->dr[i] = pVM->rem.s.Env.dr[i];
    23552365
     
    23702380    }
    23712381
    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;
    23752391        STAM_COUNTER_INC(&gStatREMLDTRChange);
    23762392        VM_FF_SET(pVM, VM_FF_SELM_SYNC_LDT);
    23772393    }
    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;
    23812413        STAM_COUNTER_INC(&gStatREMTRChange);
    23822414        VM_FF_SET(pVM, VM_FF_SELM_SYNC_TSS);
     
    24082440    pCtx->ssHid.u32Limit   = pVM->rem.s.Env.segs[R_SS].limit;
    24092441    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;
    24182442
    24192443    /* Sysenter MSR */
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette