- Timestamp:
- Jun 5, 2008 11:56:28 AM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 31650
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/CSAM.cpp
r9350 r9412 2374 2374 fakeflags.u32 = 0; 2375 2375 2376 pHandler = (pGuestIdte->Gen.u16OffsetHigh << 16) | pGuestIdte->Gen.u16OffsetLow;2376 pHandler = VBOXIDTE_OFFSET(*pGuestIdte); 2377 2377 pHandler = SELMToFlat(pVM, fakeflags, pGuestIdte->Gen.u16SegSel, 0, pHandler); 2378 2378 … … 2391 2391 if (pGuestIdte->Gen.u5Type2 == VBOX_IDTE_TYPE2_TRAP_32) 2392 2392 { 2393 Log(("CSAMCheckGates: check trap gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, (pGuestIdte->Gen.u16OffsetHigh << 16) | pGuestIdte->Gen.u16OffsetLow, pHandler));2393 Log(("CSAMCheckGates: check trap gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, VBOXIDTE_OFFSET(*pGuestIdte), pHandler)); 2394 2394 } 2395 2395 else 2396 2396 { 2397 Log(("CSAMCheckGates: check interrupt gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, (pGuestIdte->Gen.u16OffsetHigh << 16) | pGuestIdte->Gen.u16OffsetLow, pHandler));2397 Log(("CSAMCheckGates: check interrupt gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, VBOXIDTE_OFFSET(*pGuestIdte), pHandler)); 2398 2398 } 2399 2399 -
trunk/src/VBox/VMM/SELM.cpp
r9395 r9412 1083 1083 */ 1084 1084 PVBOXDESC pDesc = &pVM->selm.s.paGdtHC[SelLdt >> X86_SEL_SHIFT]; 1085 RTGCPTR GCPtrLdt = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | ((RTGCPTR)pDesc->Gen.u8BaseHigh2 << 24);1086 unsigned cbLdt = pDesc->Gen.u16LimitLow | (pDesc->Gen.u4LimitHigh << 16);1085 RTGCPTR GCPtrLdt = X86DESC_BASE(*pDesc); 1086 unsigned cbLdt = X86DESC_LIMIT(*pDesc); 1087 1087 if (pDesc->Gen.u1Granularity) 1088 1088 cbLdt = (cbLdt << PAGE_SHIFT) | PAGE_OFFSET_MASK; … … 1420 1420 */ 1421 1421 PVBOXDESC pDesc = &pVM->selm.s.paGdtHC[SelTss >> X86_SEL_SHIFT]; 1422 RTGCPTR GCPtrTss = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | ((RTGCPTR)pDesc->Gen.u8BaseHigh2 << 24);1423 unsigned cbTss = pDesc->Gen.u16LimitLow | (pDesc->Gen.u4LimitHigh << 16);1422 RTGCPTR GCPtrTss = X86DESC_BASE(*pDesc); 1423 unsigned cbTss = X86DESC_LIMIT(*pDesc); 1424 1424 if (pDesc->Gen.u1Granularity) 1425 1425 cbTss = (cbTss << PAGE_SHIFT) | PAGE_OFFSET_MASK; … … 1625 1625 return rc; 1626 1626 } 1627 RTGCPTR GCPtrLDTEGuest = LDTDesc.Gen.u16BaseLow | (LDTDesc.Gen.u8BaseHigh1 << 16) | ((RTGCPTR)LDTDesc.Gen.u8BaseHigh2 << 24);1628 unsigned cbLdt = LDTDesc.Gen.u16LimitLow | (LDTDesc.Gen.u4LimitHigh << 16);1627 RTGCPTR GCPtrLDTEGuest = X86DESC_BASE(LDTDesc); 1628 unsigned cbLdt = X86DESC_LIMIT(LDTDesc); 1629 1629 if (LDTDesc.Gen.u1Granularity) 1630 1630 cbLdt = (cbLdt << PAGE_SHIFT) | PAGE_OFFSET_MASK; … … 1704 1704 */ 1705 1705 PVBOXDESC pDesc = &pVM->selm.s.paGdtHC[SelTss >> X86_SEL_SHIFT]; 1706 RTGCPTR GCPtrTss = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | ((RTGCPTR)pDesc->Gen.u8BaseHigh2 << 24);1707 unsigned cbTss = pDesc->Gen.u16LimitLow | (pDesc->Gen.u4LimitHigh << 16);1706 RTGCPTR GCPtrTss = X86DESC_BASE(*pDesc); 1707 unsigned cbTss = X86DESC_LIMIT(*pDesc); 1708 1708 if (pDesc->Gen.u1Granularity) 1709 1709 cbTss = (cbTss << PAGE_SHIFT) | PAGE_OFFSET_MASK; … … 1816 1816 if (ppvLdt) 1817 1817 { 1818 *ppvLdt = (RTGCPTR)( ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24) 1819 | (Desc.Gen.u8BaseHigh1 << 16) 1820 | Desc.Gen.u16BaseLow); 1821 *pcbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow; 1818 *ppvLdt = (RTGCPTR)X86DESC_BASE(Desc); 1819 *pcbLimit = X86DESC_LIMIT(Desc); 1822 1820 } 1823 1821 return VINF_SUCCESS; … … 1901 1899 return VERR_INVALID_SELECTOR; 1902 1900 1903 unsigned cbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;1901 unsigned cbLimit = X86DESC_LIMIT(Desc); 1904 1902 if (Desc.Gen.u1Granularity) 1905 1903 cbLimit = (cbLimit << PAGE_SHIFT) | PAGE_OFFSET_MASK; … … 1908 1906 1909 1907 /* calc the descriptor location. */ 1910 GCPtrDesc = ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24) 1911 | (Desc.Gen.u8BaseHigh1 << 16) 1912 | Desc.Gen.u16BaseLow; 1908 GCPtrDesc = X86DESC_BASE(Desc); 1913 1909 GCPtrDesc += (Sel & X86_SEL_MASK); 1914 1910 } … … 1938 1934 pSelInfo->Sel = Sel; 1939 1935 pSelInfo->Raw = Desc; 1940 pSelInfo->cbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;1936 pSelInfo->cbLimit = X86DESC_LIMIT(Desc); 1941 1937 if (Desc.Gen.u1Granularity) 1942 1938 pSelInfo->cbLimit = (pSelInfo->cbLimit << PAGE_SHIFT) | PAGE_OFFSET_MASK; 1943 pSelInfo->GCPtrBase = ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24) 1944 | (Desc.Gen.u8BaseHigh1 << 16) 1945 | Desc.Gen.u16BaseLow; 1939 pSelInfo->GCPtrBase = X86DESC_BASE(Desc); 1946 1940 pSelInfo->fRealMode = false; 1947 1941 … … 2005 1999 pSelInfo->Sel = Sel; 2006 2000 pSelInfo->Raw = Desc; 2007 pSelInfo->cbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;2001 pSelInfo->cbLimit = X86DESC_LIMIT(Desc); 2008 2002 if (Desc.Gen.u1Granularity) 2009 2003 pSelInfo->cbLimit = (pSelInfo->cbLimit << PAGE_SHIFT) | PAGE_OFFSET_MASK; 2010 pSelInfo->GCPtrBase = ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24) 2011 | (Desc.Gen.u8BaseHigh1 << 16) 2012 | Desc.Gen.u16BaseLow; 2004 pSelInfo->GCPtrBase = X86DESC_BASE(Desc); 2013 2005 pSelInfo->fRealMode = false; 2014 2006 … … 2096 2088 * Limit and Base and format the output. 2097 2089 */ 2098 uint32_t u32Limit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;2090 uint32_t u32Limit = X86DESC_LIMIT(Desc); 2099 2091 if (Desc.Gen.u1Granularity) 2100 2092 u32Limit = u32Limit << PAGE_SHIFT | PAGE_OFFSET_MASK; 2101 uint32_t u32Base = Desc.Gen.u8BaseHigh2 << 24 | Desc.Gen.u8BaseHigh1 << 16 | Desc.Gen.u16BaseLow;2093 uint32_t u32Base = X86DESC_BASE(Desc); 2102 2094 2103 2095 RTStrPrintf(pszOutput, cchOutput, "%04x - %08x %08x - base=%08x limit=%08x dpl=%d %s", -
trunk/src/VBox/VMM/TRPM.cpp
r9289 r9412 642 642 { 643 643 PVBOXIDTE pIdte = &pVM->trpm.s.aIdt[iTrap]; 644 RTGCPTR pHandler = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;644 RTGCPTR pHandler = VBOXIDTE_OFFSET(*pIdte); 645 645 646 646 Log(("TRPMR3Relocate: *iGate=%2X Handler %VGv -> %VGv\n", iTrap, pHandler, pHandler + offDelta)); … … 1118 1118 { 1119 1119 PVBOXIDTE pIdte = &pVM->trpm.s.aIdt[iTrap]; 1120 RTGCPTR pHandler = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;1120 RTGCPTR pHandler = VBOXIDTE_OFFSET(*pIdte); 1121 1121 1122 1122 if (pHandler == GCPtr) … … 1302 1302 if (pIDTE->Gen.u1Present) 1303 1303 { 1304 RTRCPTR GCPtrHandler = (pIDTE->Gen.u16OffsetHigh << 16) | pIDTE->Gen.u16OffsetLow;1304 RTRCPTR GCPtrHandler = VBOXIDTE_OFFSET(*pIDTE); 1305 1305 if (GCPtr == GCPtrHandler) 1306 1306 return true; -
trunk/src/VBox/VMM/VMMAll/SELMAll.cpp
r9395 r9412 69 69 } 70 70 71 return (RTGCPTR)( (RTGCUINTPTR)Addr 72 + ( ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24) 73 | (Desc.Gen.u8BaseHigh1 << 16) 74 | Desc.Gen.u16BaseLow)); 71 return (RTGCPTR)((RTGCUINTPTR)Addr + X86DESC_BASE(Desc)); 75 72 } 76 73 … … 197 194 198 195 /* calc limit. */ 199 u32Limit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;196 u32Limit = X86DESC_LIMIT(Desc); 200 197 if (Desc.Gen.u1Granularity) 201 198 u32Limit = (u32Limit << PAGE_SHIFT) | PAGE_OFFSET_MASK; 202 199 203 200 /* calc address assuming straight stuff. */ 204 pvFlat = (RTGCPTR)( (RTGCUINTPTR)Addr 205 + ( ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24) 206 | (Desc.Gen.u8BaseHigh1 << 16) 207 | Desc.Gen.u16BaseLow ) 208 ); 201 pvFlat = (RTGCPTR)((RTGCUINTPTR)Addr + X86DESC_BASE(Desc)); 209 202 210 203 u1Present = Desc.Gen.u1Present; … … 402 395 * Limit check. 403 396 */ 404 uint32_t u32Limit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;397 uint32_t u32Limit = X86DESC_LIMIT(Desc); 405 398 if (Desc.Gen.u1Granularity) 406 399 u32Limit = (u32Limit << PAGE_SHIFT) | PAGE_OFFSET_MASK; 407 400 if ((RTGCUINTPTR)Addr <= u32Limit) 408 401 { 409 *ppvFlat = (RTGCPTR)( (RTGCUINTPTR)Addr 410 + ( ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24) 411 | (Desc.Gen.u8BaseHigh1 << 16) 412 | Desc.Gen.u16BaseLow) 413 ); 402 *ppvFlat = (RTGCPTR)((RTGCUINTPTR)Addr + X86DESC_BASE(Desc)); 414 403 if (pcBits) 415 404 *pcBits = Desc.Gen.u1DefBig ? 32 : 16; /** @todo GUEST64 */ -
trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp
r9341 r9412 480 480 RTGCPTR pTrapStackGC; 481 481 482 pHandler = (RTGCPTR) ((GuestIdte.Gen.u16OffsetHigh << 16) | GuestIdte.Gen.u16OffsetLow);482 pHandler = (RTGCPTR)VBOXIDTE_OFFSET(GuestIdte); 483 483 484 484 /* Note: SELMValidateAndConvertCSAddr checks for code type, memory type, selector validity. */ -
trunk/src/VBox/VMM/VMMGC/SELMGC.cpp
r9288 r9412 129 129 Desc.Gen.u1Present = 0; 130 130 } 131 //Log(("O: base=%08X limit=%08X attr=%04X\n", pShadowDescr->Gen.u16BaseLow | (pShadowDescr->Gen.u8BaseHigh1 << 16) | (pShadowDescr->Gen.u8BaseHigh2 << 24), pShadowDescr->Gen.u16LimitLow | (pShadowDescr->Gen.u4LimitHigh << 16), (pShadowDescr->au32[1] >> 8) & 0xFFFF ));132 //Log(("N: base=%08X limit=%08X attr=%04X\n", Desc.Gen.u16BaseLow | (Desc.Gen.u8BaseHigh1 << 16) | (Desc.Gen.u8BaseHigh2 << 24), Desc.Gen.u16LimitLow | (Desc.Gen.u4LimitHigh << 16), (Desc.au32[1] >> 8) & 0xFFFF ));131 //Log(("O: base=%08X limit=%08X attr=%04X\n", X86DESC_BASE(*pShadowDescr)), X86DESC_LIMIT(*pShadowDescr), (pShadowDescr->au32[1] >> 8) & 0xFFFF )); 132 //Log(("N: base=%08X limit=%08X attr=%04X\n", X86DESC_BASE(Desc)), X86DESC_LIMIT(Desc), (Desc.au32[1] >> 8) & 0xFFFF )); 133 133 *pShadowDescr = Desc; 134 134 -
trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp
r9411 r9412 917 917 918 918 #if HC_ARCH_BITS == 64 919 uint64_t u32Base = ((uintptr_t)Desc->Gen.u32BaseHigh3 << 32ULL) | Desc->Gen.u8BaseHigh2 << 24ULL | Desc->Gen.u8BaseHigh1 << 16ULL | Desc->Gen.u16BaseLow;919 uint64_t u32Base = X86DESC64_BASE(Desc); 920 920 921 921 Log(("%s %04x - %VX64 %VX64 - base=%VX64 limit=%08x dpl=%d %s\n", pszMsg, 922 922 Sel, Desc->au64[0], Desc->au64[1], u32Base, u32Limit, Desc->Gen.u2Dpl, szMsg)); 923 923 #else 924 uint32_t u32Base = Desc->Gen.u8BaseHigh2 << 24 | Desc->Gen.u8BaseHigh1 << 16 | Desc->Gen.u16BaseLow;924 uint32_t u32Base = X86DESC_BASE(Desc); 925 925 926 926 Log(("%s %04x - %08x %08x - base=%08x limit=%08x dpl=%d %s\n", pszMsg, -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r9411 r9412 613 613 pDesc = &((PX86DESCHC)gdtr.pGdt)[SelTR >> X86_SEL_SHIFT_HC]; 614 614 #if HC_ARCH_BITS == 64 615 trBase = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16ULL) | (pDesc->Gen.u8BaseHigh2 << 24ULL) | ((uintptr_t)pDesc->Gen.u32BaseHigh3 << 32ULL);615 trBase = X86DESC64_BASE(*pDesc); 616 616 #else 617 trBase = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | (pDesc->Gen.u8BaseHigh2 << 24);617 trBase = X86DESC_BASE(*pDesc); 618 618 #endif 619 619 rc = VMXWriteVMCS(VMX_VMCS_HOST_TR_BASE, trBase); -
trunk/src/VBox/VMM/VMMR0/TRPMR0.cpp
r8155 r9412 75 75 #if HC_ARCH_BITS == 32 76 76 RTFAR32 pfnHandler; 77 pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;77 pfnHandler.off = VBOXIDTE_OFFSET(*pIdte); 78 78 pfnHandler.sel = pIdte->Gen.u16SegSel; 79 79 … … 82 82 #else /* 64-bit: */ 83 83 RTFAR64 pfnHandler; 84 pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;84 pfnHandler.off = VBOXIDTE_OFFSET(*pIdte); 85 85 pfnHandler.off |= (uint64_t)(*(uint32_t *)(pIdte + 1)) << 32; //cleanup! 86 86 pfnHandler.sel = pIdte->Gen.u16SegSel; … … 135 135 136 136 RTFAR32 pfnHandler; 137 pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;137 pfnHandler.off = VBOXIDTE_OFFSET(*pIdte); 138 138 pfnHandler.sel = pIdte->Gen.u16SegSel; 139 139 … … 178 178 179 179 RTFAR64 pfnHandler; 180 pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;180 pfnHandler.off = VBOXIDTE_OFFSET(*pIdte); 181 181 pfnHandler.off |= (uint64_t)(*(uint32_t *)(pIdte + 1)) << 32; //cleanup! 182 182 pfnHandler.sel = pIdte->Gen.u16SegSel;
Note:
See TracChangeset
for help on using the changeset viewer.