VirtualBox

Ignore:
Timestamp:
Jun 5, 2008 1:17:00 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
31661
Message:

64 bits hidden selector base.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/recompiler/VBoxRecompiler.c

    r9415 r9421  
    11091109
    11101110        Ctx.tr             = env->tr.selector;
    1111         Ctx.trHid.u32Base  = (uint32_t)env->tr.base;
     1111        Ctx.trHid.u64Base  = env->tr.base;
    11121112        Ctx.trHid.u32Limit = env->tr.limit;
    11131113        Ctx.trHid.Attr.u   = (env->tr.flags >> 8) & 0xF0FF;
    11141114
    11151115        Ctx.idtr.cbIdt     = env->idt.limit;
    1116         Ctx.idtr.pIdt      = (uint32_t)env->idt.base;
     1116        Ctx.idtr.pIdt      = env->idt.base;
    11171117
    11181118        Ctx.eflags.u32     = env->eflags;
    11191119
    11201120        Ctx.cs             = env->segs[R_CS].selector;
    1121         Ctx.csHid.u32Base  = (uint32_t)env->segs[R_CS].base;
     1121        Ctx.csHid.u64Base  = env->segs[R_CS].base;
    11221122        Ctx.csHid.u32Limit = env->segs[R_CS].limit;
    11231123        Ctx.csHid.Attr.u   = (env->segs[R_CS].flags >> 8) & 0xF0FF;
    11241124
    11251125        Ctx.ss             = env->segs[R_SS].selector;
    1126         Ctx.ssHid.u32Base  = (uint32_t)env->segs[R_SS].base;
     1126        Ctx.ssHid.u64Base  = env->segs[R_SS].base;
    11271127        Ctx.ssHid.u32Limit = env->segs[R_SS].limit;
    11281128        Ctx.ssHid.Attr.u   = (env->segs[R_SS].flags >> 8) & 0xF0FF;
     
    17531753            {
    17541754                pVM->rem.s.Env.ldt.selector = pCtx->ldtr;
    1755                 pVM->rem.s.Env.ldt.base     = pCtx->ldtrHid.u32Base;
     1755                pVM->rem.s.Env.ldt.base     = pCtx->ldtrHid.u64Base;
    17561756                pVM->rem.s.Env.ldt.limit    = pCtx->ldtrHid.u32Limit;
    17571757                pVM->rem.s.Env.ldt.flags    = (pCtx->ldtrHid.Attr.u << 8) & 0xFFFFFF;;
     
    17661766            {
    17671767                pVM->rem.s.Env.tr.selector = pCtx->tr;
    1768                 pVM->rem.s.Env.tr.base     = pCtx->trHid.u32Base;
     1768                pVM->rem.s.Env.tr.base     = pCtx->trHid.u64Base;
    17691769                pVM->rem.s.Env.tr.limit    = pCtx->trHid.u32Limit;
    17701770                pVM->rem.s.Env.tr.flags    = (pCtx->trHid.Attr.u << 8) & 0xFFFFFF;;
     
    18081808        cpu_x86_set_cpl(&pVM->rem.s.Env, CPUMGetGuestCPL(pVM, CPUMCTX2CORE(pCtx)));
    18091809
    1810         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_CS, pCtx->cs, pCtx->csHid.u32Base, pCtx->csHid.u32Limit, (pCtx->csHid.Attr.u << 8) & 0xFFFFFF);
    1811         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_SS, pCtx->ss, pCtx->ssHid.u32Base, pCtx->ssHid.u32Limit, (pCtx->ssHid.Attr.u << 8) & 0xFFFFFF);
    1812         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_DS, pCtx->ds, pCtx->dsHid.u32Base, pCtx->dsHid.u32Limit, (pCtx->dsHid.Attr.u << 8) & 0xFFFFFF);
    1813         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_ES, pCtx->es, pCtx->esHid.u32Base, pCtx->esHid.u32Limit, (pCtx->esHid.Attr.u << 8) & 0xFFFFFF);
    1814         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_FS, pCtx->fs, pCtx->fsHid.u32Base, pCtx->fsHid.u32Limit, (pCtx->fsHid.Attr.u << 8) & 0xFFFFFF);
    1815         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_GS, pCtx->gs, pCtx->gsHid.u32Base, pCtx->gsHid.u32Limit, (pCtx->gsHid.Attr.u << 8) & 0xFFFFFF);
     1810        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_CS, pCtx->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, (pCtx->csHid.Attr.u << 8) & 0xFFFFFF);
     1811        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_SS, pCtx->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, (pCtx->ssHid.Attr.u << 8) & 0xFFFFFF);
     1812        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_DS, pCtx->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, (pCtx->dsHid.Attr.u << 8) & 0xFFFFFF);
     1813        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_ES, pCtx->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, (pCtx->esHid.Attr.u << 8) & 0xFFFFFF);
     1814        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_FS, pCtx->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, (pCtx->fsHid.Attr.u << 8) & 0xFFFFFF);
     1815        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_GS, pCtx->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, (pCtx->gsHid.Attr.u << 8) & 0xFFFFFF);
    18161816    }
    18171817    else
     
    21652165
    21662166    /** @todo These values could still be out of sync! */
    2167     pCtx->csHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_CS].base;
     2167    pCtx->csHid.u64Base    = pVM->rem.s.Env.segs[R_CS].base;
    21682168    pCtx->csHid.u32Limit   = pVM->rem.s.Env.segs[R_CS].limit;
    21692169    /** @note QEmu saves the 2nd dword of the descriptor; we should store the attribute word only! */
    21702170    pCtx->csHid.Attr.u     = (pVM->rem.s.Env.segs[R_CS].flags >> 8) & 0xF0FF;
    21712171
    2172     pCtx->dsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_DS].base;
     2172    pCtx->dsHid.u64Base    = pVM->rem.s.Env.segs[R_DS].base;
    21732173    pCtx->dsHid.u32Limit   = pVM->rem.s.Env.segs[R_DS].limit;
    21742174    pCtx->dsHid.Attr.u     = (pVM->rem.s.Env.segs[R_DS].flags >> 8) & 0xF0FF;
    21752175
    2176     pCtx->esHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_ES].base;
     2176    pCtx->esHid.u64Base    = pVM->rem.s.Env.segs[R_ES].base;
    21772177    pCtx->esHid.u32Limit   = pVM->rem.s.Env.segs[R_ES].limit;
    21782178    pCtx->esHid.Attr.u     = (pVM->rem.s.Env.segs[R_ES].flags >> 8) & 0xF0FF;
    21792179
    2180     pCtx->fsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_FS].base;
     2180    pCtx->fsHid.u64Base    = pVM->rem.s.Env.segs[R_FS].base;
    21812181    pCtx->fsHid.u32Limit   = pVM->rem.s.Env.segs[R_FS].limit;
    21822182    pCtx->fsHid.Attr.u     = (pVM->rem.s.Env.segs[R_FS].flags >> 8) & 0xF0FF;
    21832183
    2184     pCtx->gsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_GS].base;
     2184    pCtx->gsHid.u64Base    = pVM->rem.s.Env.segs[R_GS].base;
    21852185    pCtx->gsHid.u32Limit   = pVM->rem.s.Env.segs[R_GS].limit;
    21862186    pCtx->gsHid.Attr.u     = (pVM->rem.s.Env.segs[R_GS].flags >> 8) & 0xF0FF;
    21872187
    2188     pCtx->ssHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_SS].base;
     2188    pCtx->ssHid.u64Base    = pVM->rem.s.Env.segs[R_SS].base;
    21892189    pCtx->ssHid.u32Limit   = pVM->rem.s.Env.segs[R_SS].limit;
    21902190    pCtx->ssHid.Attr.u     = (pVM->rem.s.Env.segs[R_SS].flags >> 8) & 0xF0FF;
    21912191
    2192     pCtx->ldtrHid.u32Base  = (uint32_t)pVM->rem.s.Env.ldt.base;
     2192    pCtx->ldtrHid.u64Base  = pVM->rem.s.Env.ldt.base;
    21932193    pCtx->ldtrHid.u32Limit = pVM->rem.s.Env.ldt.limit;
    21942194    pCtx->ldtrHid.Attr.u   = (pVM->rem.s.Env.ldt.flags >> 8) & 0xF0FF;
    21952195
    2196     pCtx->trHid.u32Base    = (uint32_t)pVM->rem.s.Env.tr.base;
     2196    pCtx->trHid.u64Base    = pVM->rem.s.Env.tr.base;
    21972197    pCtx->trHid.u32Limit   = pVM->rem.s.Env.tr.limit;
    21982198    pCtx->trHid.Attr.u     = (pVM->rem.s.Env.tr.flags >> 8) & 0xF0FF;
     
    23672367
    23682368    /** @todo These values could still be out of sync! */
    2369     pCtx->csHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_CS].base;
     2369    pCtx->csHid.u64Base    = pVM->rem.s.Env.segs[R_CS].base;
    23702370    pCtx->csHid.u32Limit   = pVM->rem.s.Env.segs[R_CS].limit;
    23712371    /** @note QEmu saves the 2nd dword of the descriptor; we should store the attribute word only! */
    23722372    pCtx->csHid.Attr.u     = (pVM->rem.s.Env.segs[R_CS].flags >> 8) & 0xFFFF;
    23732373
    2374     pCtx->dsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_DS].base;
     2374    pCtx->dsHid.u64Base    = pVM->rem.s.Env.segs[R_DS].base;
    23752375    pCtx->dsHid.u32Limit   = pVM->rem.s.Env.segs[R_DS].limit;
    23762376    pCtx->dsHid.Attr.u     = (pVM->rem.s.Env.segs[R_DS].flags >> 8) & 0xFFFF;
    23772377
    2378     pCtx->esHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_ES].base;
     2378    pCtx->esHid.u64Base    = pVM->rem.s.Env.segs[R_ES].base;
    23792379    pCtx->esHid.u32Limit   = pVM->rem.s.Env.segs[R_ES].limit;
    23802380    pCtx->esHid.Attr.u     = (pVM->rem.s.Env.segs[R_ES].flags >> 8) & 0xFFFF;
    23812381
    2382     pCtx->fsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_FS].base;
     2382    pCtx->fsHid.u64Base    = pVM->rem.s.Env.segs[R_FS].base;
    23832383    pCtx->fsHid.u32Limit   = pVM->rem.s.Env.segs[R_FS].limit;
    23842384    pCtx->fsHid.Attr.u     = (pVM->rem.s.Env.segs[R_FS].flags >> 8) & 0xFFFF;
    23852385
    2386     pCtx->gsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_GS].base;
     2386    pCtx->gsHid.u64Base    = pVM->rem.s.Env.segs[R_GS].base;
    23872387    pCtx->gsHid.u32Limit   = pVM->rem.s.Env.segs[R_GS].limit;
    23882388    pCtx->gsHid.Attr.u     = (pVM->rem.s.Env.segs[R_GS].flags >> 8) & 0xFFFF;
    23892389
    2390     pCtx->ssHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_SS].base;
     2390    pCtx->ssHid.u64Base    = pVM->rem.s.Env.segs[R_SS].base;
    23912391    pCtx->ssHid.u32Limit   = pVM->rem.s.Env.segs[R_SS].limit;
    23922392    pCtx->ssHid.Attr.u     = (pVM->rem.s.Env.segs[R_SS].flags >> 8) & 0xFFFF;
    23932393
    2394     pCtx->ldtrHid.u32Base  = (uint32_t)pVM->rem.s.Env.ldt.base;
     2394    pCtx->ldtrHid.u64Base  = pVM->rem.s.Env.ldt.base;
    23952395    pCtx->ldtrHid.u32Limit = pVM->rem.s.Env.ldt.limit;
    23962396    pCtx->ldtrHid.Attr.u   = (pVM->rem.s.Env.ldt.flags >> 8) & 0xFFFF;
    23972397
    2398     pCtx->trHid.u32Base    = (uint32_t)pVM->rem.s.Env.tr.base;
     2398    pCtx->trHid.u64Base    = pVM->rem.s.Env.tr.base;
    23992399    pCtx->trHid.u32Limit   = pVM->rem.s.Env.tr.limit;
    24002400    pCtx->trHid.Attr.u     = (pVM->rem.s.Env.tr.flags >> 8) & 0xFFFF;
Note: See TracChangeset for help on using the changeset viewer.

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