Changeset 19463 in vbox for trunk/src/VBox
- Timestamp:
- May 6, 2009 8:30:57 PM (16 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/CPUM.cpp
r19403 r19463 2353 2353 State.GCPtrSegEnd = SelInfo.cbLimit + 1 + (RTGCUINTPTR)SelInfo.GCPtrBase; 2354 2354 State.cbSegLimit = SelInfo.cbLimit; 2355 pCpu->mode = SelInfo. Raw.Gen.u1DefBig ? CPUMODE_32BIT : CPUMODE_16BIT;2355 pCpu->mode = SelInfo.u.Raw.Gen.u1DefBig ? CPUMODE_32BIT : CPUMODE_16BIT; 2356 2356 } 2357 2357 } -
trunk/src/VBox/VMM/DBGFAddr.cpp
r19334 r19463 81 81 if (DBGFSelInfoIsExpandDown(&SelInfo)) 82 82 { 83 if ( !SelInfo. Raw.Gen.u1Granularity83 if ( !SelInfo.u.Raw.Gen.u1Granularity 84 84 && off > UINT32_C(0xffff)) 85 85 return VERR_OUT_OF_SELECTOR_BOUNDS; … … 94 94 /** @todo fix all these selector tests! */ 95 95 if ( !SelInfo.GCPtrBase 96 && SelInfo. Raw.Gen.u1Granularity97 && SelInfo. Raw.Gen.u1DefBig)96 && SelInfo.u.Raw.Gen.u1Granularity 97 && SelInfo.u.Raw.Gen.u1DefBig) 98 98 pAddress->fFlags = DBGFADDRESS_FLAGS_FLAT; 99 99 else if (SelInfo.cbLimit <= UINT32_C(0xffff)) -
trunk/src/VBox/VMM/DBGFDisas.cpp
r19334 r19463 109 109 pState->pVCpu = pVCpu; 110 110 pState->fLocked = false; 111 pState->f64Bits = enmMode >= PGMMODE_AMD64 && pSelInfo-> Raw.Gen.u1Long;111 pState->f64Bits = enmMode >= PGMMODE_AMD64 && pSelInfo->u.Raw.Gen.u1Long; 112 112 uint32_t cbInstr; 113 113 int rc = DISCoreOneEx(GCPtr, 114 114 pState->f64Bits 115 115 ? CPUMODE_64BIT 116 : pSelInfo-> Raw.Gen.u1DefBig116 : pSelInfo->u.Raw.Gen.u1DefBig 117 117 ? CPUMODE_32BIT 118 118 : CPUMODE_16BIT, … … 344 344 && CPUMAreHiddenSelRegsValid(pVM)) 345 345 { 346 SelInfo.Sel = Sel;347 SelInfo.SelGate = 0;348 SelInfo.GCPtrBase = pHiddenSel->u64Base;349 SelInfo.cbLimit = pHiddenSel->u32Limit;350 SelInfo.fFlags = PGMMODE_IS_LONG_MODE(enmMode)351 ? DBGFSELINFO_FLAGS_LONG_MODE352 : enmMode != PGMMODE_REAL && (!pCtxCore || !pCtxCore->eflags.Bits.u1VM)353 ? DBGFSELINFO_FLAGS_PROT_MODE354 : DBGFSELINFO_FLAGS_REAL_MODE;355 356 SelInfo. Raw.au32[0]= 0;357 SelInfo. Raw.au32[1] =0;358 SelInfo. Raw.Gen.u16LimitLow= 0xffff;359 SelInfo. Raw.Gen.u4LimitHigh= 0xf;360 SelInfo. Raw.Gen.u1Present= pHiddenSel->Attr.n.u1Present;361 SelInfo. Raw.Gen.u1Granularity = pHiddenSel->Attr.n.u1Granularity;;362 SelInfo. Raw.Gen.u1DefBig= pHiddenSel->Attr.n.u1DefBig;363 SelInfo. Raw.Gen.u1Long= pHiddenSel->Attr.n.u1Long;364 SelInfo. Raw.Gen.u1DescType= pHiddenSel->Attr.n.u1DescType;365 SelInfo. Raw.Gen.u4Type= pHiddenSel->Attr.n.u4Type;366 fRealModeAddress = !!(SelInfo.fFlags & DBGFSELINFO_FLAGS_REAL_MODE);346 SelInfo.Sel = Sel; 347 SelInfo.SelGate = 0; 348 SelInfo.GCPtrBase = pHiddenSel->u64Base; 349 SelInfo.cbLimit = pHiddenSel->u32Limit; 350 SelInfo.fFlags = PGMMODE_IS_LONG_MODE(enmMode) 351 ? DBGFSELINFO_FLAGS_LONG_MODE 352 : enmMode != PGMMODE_REAL && (!pCtxCore || !pCtxCore->eflags.Bits.u1VM) 353 ? DBGFSELINFO_FLAGS_PROT_MODE 354 : DBGFSELINFO_FLAGS_REAL_MODE; 355 356 SelInfo.u.Raw.au32[0] = 0; 357 SelInfo.u.Raw.au32[1] = 0; 358 SelInfo.u.Raw.Gen.u16LimitLow = 0xffff; 359 SelInfo.u.Raw.Gen.u4LimitHigh = 0xf; 360 SelInfo.u.Raw.Gen.u1Present = pHiddenSel->Attr.n.u1Present; 361 SelInfo.u.Raw.Gen.u1Granularity = pHiddenSel->Attr.n.u1Granularity;; 362 SelInfo.u.Raw.Gen.u1DefBig = pHiddenSel->Attr.n.u1DefBig; 363 SelInfo.u.Raw.Gen.u1Long = pHiddenSel->Attr.n.u1Long; 364 SelInfo.u.Raw.Gen.u1DescType = pHiddenSel->Attr.n.u1DescType; 365 SelInfo.u.Raw.Gen.u4Type = pHiddenSel->Attr.n.u4Type; 366 fRealModeAddress = !!(SelInfo.fFlags & DBGFSELINFO_FLAGS_REAL_MODE); 367 367 } 368 368 else if (Sel == DBGF_SEL_FLAT) 369 369 { 370 SelInfo.Sel = Sel;371 SelInfo.SelGate = 0;372 SelInfo.GCPtrBase = 0;373 SelInfo.cbLimit = ~0;374 SelInfo.fFlags = PGMMODE_IS_LONG_MODE(enmMode)375 ? DBGFSELINFO_FLAGS_LONG_MODE376 : enmMode != PGMMODE_REAL377 ? DBGFSELINFO_FLAGS_PROT_MODE378 : DBGFSELINFO_FLAGS_REAL_MODE;379 SelInfo. Raw.au32[0]= 0;380 SelInfo. Raw.au32[1]= 0;381 SelInfo. Raw.Gen.u16LimitLow= 0xffff;382 SelInfo. Raw.Gen.u4LimitHigh= 0xf;370 SelInfo.Sel = Sel; 371 SelInfo.SelGate = 0; 372 SelInfo.GCPtrBase = 0; 373 SelInfo.cbLimit = ~0; 374 SelInfo.fFlags = PGMMODE_IS_LONG_MODE(enmMode) 375 ? DBGFSELINFO_FLAGS_LONG_MODE 376 : enmMode != PGMMODE_REAL 377 ? DBGFSELINFO_FLAGS_PROT_MODE 378 : DBGFSELINFO_FLAGS_REAL_MODE; 379 SelInfo.u.Raw.au32[0] = 0; 380 SelInfo.u.Raw.au32[1] = 0; 381 SelInfo.u.Raw.Gen.u16LimitLow = 0xffff; 382 SelInfo.u.Raw.Gen.u4LimitHigh = 0xf; 383 383 384 384 if (CPUMAreHiddenSelRegsValid(pVM)) … … 387 387 pHiddenSel = (CPUMSELREGHID *)&pCtxCore->csHid; 388 388 389 SelInfo. Raw.Gen.u1Present= pHiddenSel->Attr.n.u1Present;390 SelInfo. Raw.Gen.u1Granularity= pHiddenSel->Attr.n.u1Granularity;;391 SelInfo. Raw.Gen.u1DefBig= pHiddenSel->Attr.n.u1DefBig;392 SelInfo. Raw.Gen.u1Long= pHiddenSel->Attr.n.u1Long;393 SelInfo. Raw.Gen.u1DescType= pHiddenSel->Attr.n.u1DescType;394 SelInfo. Raw.Gen.u4Type= pHiddenSel->Attr.n.u4Type;389 SelInfo.u.Raw.Gen.u1Present = pHiddenSel->Attr.n.u1Present; 390 SelInfo.u.Raw.Gen.u1Granularity = pHiddenSel->Attr.n.u1Granularity;; 391 SelInfo.u.Raw.Gen.u1DefBig = pHiddenSel->Attr.n.u1DefBig; 392 SelInfo.u.Raw.Gen.u1Long = pHiddenSel->Attr.n.u1Long; 393 SelInfo.u.Raw.Gen.u1DescType = pHiddenSel->Attr.n.u1DescType; 394 SelInfo.u.Raw.Gen.u4Type = pHiddenSel->Attr.n.u4Type; 395 395 } 396 396 else 397 397 { 398 SelInfo. Raw.Gen.u1Present= 1;399 SelInfo. Raw.Gen.u1Granularity = 1;400 SelInfo. Raw.Gen.u1DefBig= 1;401 SelInfo. Raw.Gen.u1DescType= 1;402 SelInfo. Raw.Gen.u4Type= X86_SEL_TYPE_EO;398 SelInfo.u.Raw.Gen.u1Present = 1; 399 SelInfo.u.Raw.Gen.u1Granularity = 1; 400 SelInfo.u.Raw.Gen.u1DefBig = 1; 401 SelInfo.u.Raw.Gen.u1DescType = 1; 402 SelInfo.u.Raw.Gen.u4Type = X86_SEL_TYPE_EO; 403 403 } 404 404 } … … 407 407 || enmMode == PGMMODE_REAL) ) 408 408 { /* V86 mode or real mode - real mode addressing */ 409 SelInfo.Sel = Sel;410 SelInfo.SelGate = 0;411 SelInfo.GCPtrBase = Sel * 16;412 SelInfo.cbLimit = ~0;413 SelInfo.fFlags = DBGFSELINFO_FLAGS_REAL_MODE;414 SelInfo. Raw.au32[0]= 0;415 SelInfo. Raw.au32[1]= 0;416 SelInfo. Raw.Gen.u16LimitLow= 0xffff;417 SelInfo. Raw.Gen.u4LimitHigh= 0xf;418 SelInfo. Raw.Gen.u1Present= 1;419 SelInfo. Raw.Gen.u1Granularity = 1;420 SelInfo. Raw.Gen.u1DefBig= 0; /* 16 bits */421 SelInfo. Raw.Gen.u1DescType= 1;422 SelInfo. Raw.Gen.u4Type= X86_SEL_TYPE_EO;423 fRealModeAddress = true;409 SelInfo.Sel = Sel; 410 SelInfo.SelGate = 0; 411 SelInfo.GCPtrBase = Sel * 16; 412 SelInfo.cbLimit = ~0; 413 SelInfo.fFlags = DBGFSELINFO_FLAGS_REAL_MODE; 414 SelInfo.u.Raw.au32[0] = 0; 415 SelInfo.u.Raw.au32[1] = 0; 416 SelInfo.u.Raw.Gen.u16LimitLow = 0xffff; 417 SelInfo.u.Raw.Gen.u4LimitHigh = 0xf; 418 SelInfo.u.Raw.Gen.u1Present = 1; 419 SelInfo.u.Raw.Gen.u1Granularity = 1; 420 SelInfo.u.Raw.Gen.u1DefBig = 0; /* 16 bits */ 421 SelInfo.u.Raw.Gen.u1DescType = 1; 422 SelInfo.u.Raw.Gen.u4Type = X86_SEL_TYPE_EO; 423 fRealModeAddress = true; 424 424 } 425 425 else -
trunk/src/VBox/VMM/DBGFMem.cpp
r19336 r19463 471 471 * Check if present. 472 472 */ 473 if (pSelInfo-> Raw.Gen.u1Present)473 if (pSelInfo->u.Raw.Gen.u1Present) 474 474 { 475 475 /* 476 476 * Type check. 477 477 */ 478 if ( pSelInfo-> Raw.Gen.u1DescType == 1479 && (pSelInfo-> Raw.Gen.u4Type & X86_SEL_TYPE_CODE))478 if ( pSelInfo->u.Raw.Gen.u1DescType == 1 479 && (pSelInfo->u.Raw.Gen.u4Type & X86_SEL_TYPE_CODE)) 480 480 { 481 481 /* … … 483 483 */ 484 484 unsigned uLevel = RT_MAX(SelCPL & X86_SEL_RPL, pSelInfo->Sel & X86_SEL_RPL); 485 if ( !(pSelInfo-> Raw.Gen.u4Type & X86_SEL_TYPE_CONF)486 ? uLevel <= pSelInfo-> Raw.Gen.u2Dpl487 : uLevel >= pSelInfo-> Raw.Gen.u2Dpl /* hope I got this right now... */485 if ( !(pSelInfo->u.Raw.Gen.u4Type & X86_SEL_TYPE_CONF) 486 ? uLevel <= pSelInfo->u.Raw.Gen.u2Dpl 487 : uLevel >= pSelInfo->u.Raw.Gen.u2Dpl /* hope I got this right now... */ 488 488 ) 489 489 return VINF_SUCCESS; -
trunk/src/VBox/VMM/SELM.cpp
r19336 r19463 2050 2050 * (We ignore the present bit here, which is probably a bit silly...) 2051 2051 */ 2052 pSelInfo->Sel = Sel;2053 pSelInfo->fFlags = DBGFSELINFO_FLAGS_LONG_MODE;2054 pSelInfo-> Raw64= Desc;2052 pSelInfo->Sel = Sel; 2053 pSelInfo->fFlags = DBGFSELINFO_FLAGS_LONG_MODE; 2054 pSelInfo->u.Raw64 = Desc; 2055 2055 if (Desc.Gen.u1DescType) 2056 2056 { … … 2124 2124 DECLINLINE(void) selmR3SelInfoFromDesc32(PDBGFSELINFO pSelInfo, PCX86DESC pDesc) 2125 2125 { 2126 pSelInfo-> Raw64.au64[1] = 0;2127 pSelInfo-> Raw = *pDesc;2126 pSelInfo->u.Raw64.au64[1] = 0; 2127 pSelInfo->u.Raw = *pDesc; 2128 2128 if ( pDesc->Gen.u1DescType 2129 2129 || !(pDesc->Gen.u4Type & 4)) … … 2259 2259 pSelInfo->cbLimit = 0xffff; 2260 2260 pSelInfo->fFlags = DBGFSELINFO_FLAGS_REAL_MODE; 2261 pSelInfo-> Raw64.au64[0] = 0;2262 pSelInfo-> Raw64.au64[1] = 0;2261 pSelInfo->u.Raw64.au64[0] = 0; 2262 pSelInfo->u.Raw64.au64[1] = 0; 2263 2263 pSelInfo->SelGate = 0; 2264 2264 return VINF_SUCCESS; -
trunk/src/VBox/VMM/VMMTests.cpp
r19462 r19463 458 458 pHyperCtx->reg##Hid.u64Base = selInfo.GCPtrBase; \ 459 459 pHyperCtx->reg##Hid.u32Limit = selInfo.cbLimit; \ 460 pHyperCtx->reg##Hid.Attr.n.u1Present = selInfo. Raw.Gen.u1Present;\461 pHyperCtx->reg##Hid.Attr.n.u1DefBig = selInfo. Raw.Gen.u1DefBig;\462 pHyperCtx->reg##Hid.Attr.n.u1Granularity = selInfo. Raw.Gen.u1Granularity;\463 pHyperCtx->reg##Hid.Attr.n.u4Type = selInfo. Raw.Gen.u4Type;\464 pHyperCtx->reg##Hid.Attr.n.u2Dpl = selInfo. Raw.Gen.u2Dpl;\465 pHyperCtx->reg##Hid.Attr.n.u1DescType = selInfo. Raw.Gen.u1DescType;\466 pHyperCtx->reg##Hid.Attr.n.u1Long = selInfo. Raw.Gen.u1Long;\460 pHyperCtx->reg##Hid.Attr.n.u1Present = selInfo.u.Raw.Gen.u1Present; \ 461 pHyperCtx->reg##Hid.Attr.n.u1DefBig = selInfo.u.Raw.Gen.u1DefBig; \ 462 pHyperCtx->reg##Hid.Attr.n.u1Granularity = selInfo.u.Raw.Gen.u1Granularity; \ 463 pHyperCtx->reg##Hid.Attr.n.u4Type = selInfo.u.Raw.Gen.u4Type; \ 464 pHyperCtx->reg##Hid.Attr.n.u2Dpl = selInfo.u.Raw.Gen.u2Dpl; \ 465 pHyperCtx->reg##Hid.Attr.n.u1DescType = selInfo.u.Raw.Gen.u1DescType; \ 466 pHyperCtx->reg##Hid.Attr.n.u1Long = selInfo.u.Raw.Gen.u1Long; \ 467 467 } 468 468
Note:
See TracChangeset
for help on using the changeset viewer.