Changeset 42165 in vbox
- Timestamp:
- Jul 16, 2012 1:36:01 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/cpum.h
r42025 r42165 170 170 VMMDECL(bool) CPUMGetGuestCpuIdFeature(PVM pVM, CPUMCPUIDFEATURE enmFeature); 171 171 VMMDECL(void) CPUMSetGuestCtx(PVMCPU pVCpu, const PCPUMCTX pCtx); 172 VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenCsAndSs(PVMCPU pVCpu); 173 VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenSelectorReg(PVMCPU pVCpu, PCPUMSELREG pSReg); 172 174 /** @} */ 173 175 … … 178 180 VMMDECL(bool) CPUMIsGuestIn16BitCode(PVMCPU pVCpu); 179 181 VMMDECL(bool) CPUMIsGuestIn32BitCode(PVMCPU pVCpu); 182 VMMDECL(bool) CPUMIsGuestIn64BitCode(PVMCPU pVCpu); 180 183 VMMDECL(bool) CPUMIsGuestNXEnabled(PVMCPU pVCpu); 181 184 VMMDECL(bool) CPUMIsGuestPageSizeExtEnabled(PVMCPU pVCpu); … … 236 239 } 237 240 241 VMM_INT_DECL(bool) CPUMIsGuestIn64BitCodeSlow(PCPUMCTX pCtx); 242 238 243 /** 239 244 * Tests if the guest is running in 64 bits mode or not. 240 245 * 241 246 * @returns true if in 64 bits protected mode, otherwise false. 242 * @param pV M The VM handle.247 * @param pVCpu The current virtual CPU. 243 248 * @param pCtx Current CPU context 244 249 */ 245 DECLINLINE(bool) CPUMIsGuestIn64BitCode(PVMCPU pVCpu, PCCPUMCTXCORE pCtx) 246 { 247 if (!CPUMIsGuestInLongMode(pVCpu)) 248 return false; 249 250 return pCtx->cs.Attr.n.u1Long; 251 } 252 253 /** 254 * Tests if the guest is running in 64 bits mode or not. 255 * 256 * @returns true if in 64 bits protected mode, otherwise false. 257 * @param pVM The VM handle. 258 * @param pCtx Current CPU context 259 */ 260 DECLINLINE(bool) CPUMIsGuestIn64BitCodeEx(PCCPUMCTX pCtx) 250 DECLINLINE(bool) CPUMIsGuestIn64BitCodeEx(PCPUMCTX pCtx) 261 251 { 262 252 if (!(pCtx->msrEFER & MSR_K6_EFER_LMA)) 263 253 return false; 264 254 if (!CPUMSELREG_ARE_HIDDEN_PARTS_VALID(&pCtx->cs)) 255 return CPUMIsGuestIn64BitCodeSlow(pCtx); 265 256 return pCtx->cs.Attr.n.u1Long; 266 257 } -
trunk/include/VBox/vmm/cpumctx.h
r41908 r42165 78 78 #define CPUMSELREG_FLAGS_STALE UINT16_C(0x0002) 79 79 /** @} */ 80 81 /** Checks if the hidden parts of the selector register are valid. */ 82 #define CPUMSELREG_ARE_HIDDEN_PARTS_VALID(a_pSelReg) ( ((a_pSelReg)->fFlags & CPUMSELREG_FLAGS_VALID) \ 83 && (a_pSelReg)->ValidSel == (a_pSelReg)->Sel ) 80 84 81 85 /** Old type used for the hidden register part. -
trunk/include/VBox/vmm/selm.h
r41727 r42165 83 83 VMMDECL(DISCPUMODE) SELMGetCpuModeFromSelector(PVMCPU pVCpu, X86EFLAGS eflags, RTSEL Sel, PCCPUMSELREGHID pHiddenSel); 84 84 VMMDECL(int) SELMGetLDTFromSel(PVM pVM, RTSEL SelLdt, PRTGCPTR ppvLdt, unsigned *pcbLimit); 85 #ifdef VBOX_WITH_RAW_MODE 86 VMM_INT_DECL(void) SELMLoadHiddenSelectorReg(PVMCPU pVCpu, PCCPUMCTX pCtx, PCPUMSELREG pSReg); 87 #endif 85 88 86 89 -
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r41565 r42165 958 958 PVMCPU pVCpu = VMMGetCpuById(pVM, pDbgc->idCpu); 959 959 if ( pDbgc->fRegCtxGuest 960 && CPUMIsGuestIn64BitCode Ex(CPUMQueryGuestCtxPtr(pVCpu)))960 && CPUMIsGuestIn64BitCode(pVCpu)) 961 961 { 962 962 pDbgc->DisasmPos.enmType = DBGCVAR_TYPE_GC_FLAT; … … 1428 1428 bool const f64BitMode = !strcmp(pCmd->pszCmd, "rg64") 1429 1429 || ( !strcmp(pCmd->pszCmd, "rg32") 1430 && CPUMIsGuestIn64BitCode Ex(CPUMQueryGuestCtxPtr(VMMGetCpuById(pVM, pDbgc->idCpu))));1430 && CPUMIsGuestIn64BitCode(VMMGetCpuById(pVM, pDbgc->idCpu))); 1431 1431 char szDisAndRegs[8192]; 1432 1432 int rc; -
trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
r41931 r42165 376 376 } 377 377 378 VMMDECL(bool) CPUMIsGuestIn64BitCode(PVMCPU pVCpu) 379 { 380 return false; 381 } 378 382 379 383 -
trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
r42034 r42165 27 27 #include <VBox/vmm/pgm.h> 28 28 #include <VBox/vmm/mm.h> 29 #if defined(VBOX_WITH_RAW_MODE) && !defined(IN_RING0) 30 # include <VBox/vmm/selm.h> 31 #endif 29 32 #include "CPUMInternal.h" 30 33 #include <VBox/vmm/vm.h> … … 44 47 #if defined(_MSC_VER) && !defined(DEBUG) 45 48 # pragma optimize("y", off) 49 #endif 50 51 52 /******************************************************************************* 53 * Defined Constants And Macros * 54 *******************************************************************************/ 55 /** 56 * Converts a CPUMCPU::Guest pointer into a VMCPU pointer. 57 * 58 * @returns Pointer to the Virtual CPU. 59 * @param a_pGuestCtx Pointer to the guest context. 60 */ 61 #define CPUM_GUEST_CTX_TO_VMCPU(a_pGuestCtx) RT_FROM_MEMBER(a_pGuestCtx, VMCPU, cpum.s.Guest) 62 63 /** 64 * Lazily loads the hidden parts of a selector register when using raw-mode. 65 */ 66 #if defined(VBOX_WITH_RAW_MODE) && !defined(IN_RING0) 67 # define CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(a_pVCpu, a_pSReg, a_fIsCS) \ 68 do \ 69 { \ 70 if (!CPUMSELREG_ARE_HIDDEN_PARTS_VALID(a_pSReg)) \ 71 cpumGuestLazyLoadHiddenSelectorReg(a_pVCpu, a_pSReg, a_fIsCS); \ 72 } while (0) 73 #else 74 # define CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(a_pVCpu, a_pSReg, a_fIsCS) \ 75 Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(a_pSReg)); 76 #endif 77 78 79 80 #if defined(VBOX_WITH_RAW_MODE) && !defined(IN_RING0) 81 82 83 /** 84 * Does the lazy hidden selector register loading. 85 * 86 * @param pVCpu The current Virtual CPU. 87 * @param pSReg The selector register to lazily load hidden parts of. 88 * @param fIsCS 89 */ 90 static void cpumGuestLazyLoadHiddenSelectorReg(PVMCPU pVCpu, PCPUMSELREG pSReg, bool fIsCS) 91 { 92 Assert(!CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pSReg)); 93 Assert(!HWACCMIsEnabled(pVCpu->CTX_SUFF(pVM))); 94 95 if (pVCpu->cpum.s.Guest.eflags.Bits.u1VM) 96 { 97 /* V8086 mode - Tightly controlled environment, no question about the limit or flags. */ 98 pSReg->Attr.u = 0; 99 pSReg->Attr.n.u1DescType = 1; /* code/data segment */ 100 pSReg->Attr.n.u1Present = 1; 101 pSReg->Attr.n.u4Type = fIsCS ? X86_SEL_TYPE_ER_ACC : X86_SEL_TYPE_RW_ACC; 102 pSReg->u32Limit = 0x0000ffff; 103 pSReg->u64Base = (uint32_t)pSReg->Sel << 4; 104 pSReg->ValidSel = pSReg->Sel; 105 pSReg->fFlags = CPUMSELREG_FLAGS_VALID; 106 /** @todo Check what the accessed bit should be (VT-x and AMD-V). */ 107 } 108 else if (!(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE)) 109 { 110 /* Real mode - leave the limit and flags alone here, at least for now. */ 111 pSReg->u64Base = (uint32_t)pSReg->Sel << 4; 112 pSReg->ValidSel = pSReg->Sel; 113 pSReg->fFlags = CPUMSELREG_FLAGS_VALID; 114 } 115 else 116 { 117 /* Protected mode - get it from the selector descriptor tables. */ 118 if (!(pSReg->Sel & X86_SEL_MASK)) 119 { 120 Assert(!CPUMIsGuestInLongMode(pVCpu)); 121 pSReg->Sel = 0; 122 pSReg->u64Base = 0; 123 pSReg->u32Limit = 0; 124 pSReg->Attr.u = 0; 125 pSReg->ValidSel = 0; 126 pSReg->fFlags = CPUMSELREG_FLAGS_VALID; 127 /** @todo see todo in iemHlpLoadNullDataSelectorProt. */ 128 } 129 else 130 SELMLoadHiddenSelectorReg(pVCpu, &pVCpu->cpum.s.Guest, pSReg); 131 } 132 } 133 134 135 /** 136 * Makes sure the hidden CS and SS selector registers are valid, loading them if 137 * necessary. 138 * 139 * @param pVCpu The current virtual CPU. 140 */ 141 VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenCsAndSs(PVMCPU pVCpu) 142 { 143 CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(pVCpu, &pVCpu->cpum.s.Guest.cs, true); 144 CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(pVCpu, &pVCpu->cpum.s.Guest.ss, false); 145 } 146 147 148 /** 149 * Loads a the hidden parts of a selector register. 150 * 151 * @param pVCpu The current virtual CPU. 152 */ 153 VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenSelectorReg(PVMCPU pVCpu, PCPUMSELREG pSReg) 154 { 155 CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(pVCpu, pSReg, pSReg == &pVCpu->cpum.s.Guest.cs); 156 } 157 46 158 #endif 47 159 … … 2211 2323 2212 2324 2325 /** 2326 * Tests if the guest is running in 64 bits mode or not. 2327 * 2328 * @returns true if in 64 bits protected mode, otherwise false. 2329 * @param pVCpu The current virtual CPU. 2330 */ 2331 VMMDECL(bool) CPUMIsGuestIn64BitCode(PVMCPU pVCpu) 2332 { 2333 if (!CPUMIsGuestInLongMode(pVCpu)) 2334 return false; 2335 CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(pVCpu, &pVCpu->cpum.s.Guest.cs, true); 2336 return pVCpu->cpum.s.Guest.cs.Attr.n.u1Long; 2337 } 2338 2339 2340 /** 2341 * Helper for CPUMIsGuestIn64BitCodeEx that handles lazy resolving of hidden CS 2342 * registers. 2343 * 2344 * @returns true if in 64 bits protected mode, otherwise false. 2345 * @param pCtx Pointer to the current guest CPU context. 2346 */ 2347 VMM_INT_DECL(bool) CPUMIsGuestIn64BitCodeSlow(PCPUMCTX pCtx) 2348 { 2349 return CPUMIsGuestIn64BitCode(CPUM_GUEST_CTX_TO_VMCPU(pCtx)); 2350 } 2351 2352 2213 2353 #ifndef IN_RING0 2214 2354 /** … … 2403 2543 uint32_t uCpl; 2404 2544 2545 #if 1 2405 2546 if (CPUMAreHiddenSelRegsValid(pVCpu)) 2547 #else 2548 if (CPUMSELREG_ARE_HIDDEN_PARTS_VALID(&pVCpu->cpum.s.Guest.ss)) 2549 #endif 2406 2550 { 2407 2551 /* … … 2427 2571 uCpl = 0; /* CPL set to 3 for VT-x real-mode emulation. */ 2428 2572 } 2429 else if ( RT_LIKELY(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE))2573 else if (pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE) 2430 2574 { 2431 if ( RT_LIKELY(!pVCpu->cpum.s.Guest.eflags.Bits.u1VM))2575 if (!pVCpu->cpum.s.Guest.eflags.Bits.u1VM) 2432 2576 { 2433 2577 /* -
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r41965 r42165 610 610 611 611 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu)); 612 Assert(!CPUMIsGuestIn64BitCode(pVCpu , pRegFrame));612 Assert(!CPUMIsGuestIn64BitCode(pVCpu)); 613 613 /** @todo Rainy day: Test what happens when VERR_EM_INTERPRETER is returned by 614 614 * this function. Fear that it may guru on us, thus not converted to … … 1046 1046 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu)); 1047 1047 1048 if (CPUMIsGuestIn64BitCode(pVCpu, pRegFrame)) 1049 { 1048 if (CPUMIsGuestIn64BitCode(pVCpu)) 1050 1049 rc = DISFetchReg64(pRegFrame, SrcRegGen, &val); 1051 }1052 1050 else 1053 1051 { … … 1125 1123 NOREF(pVM); 1126 1124 1127 if (CPUMIsGuestIn64BitCode(pVCpu , pRegFrame))1125 if (CPUMIsGuestIn64BitCode(pVCpu)) 1128 1126 rc = DISWriteReg64(pRegFrame, DestRegGen, val64); 1129 1127 else … … 1157 1155 NOREF(pVM); 1158 1156 1159 if (CPUMIsGuestIn64BitCode(pVCpu, pRegFrame)) 1160 { 1157 if (CPUMIsGuestIn64BitCode(pVCpu)) 1161 1158 rc = DISFetchReg64(pRegFrame, SrcRegGen, &val); 1162 }1163 1159 else 1164 1160 { … … 1199 1195 int rc = CPUMGetGuestDRx(pVCpu, SrcRegDrx, &val64); 1200 1196 AssertMsgRCReturn(rc, ("CPUMGetGuestDRx %d failed\n", SrcRegDrx), VERR_EM_INTERPRETER); 1201 if (CPUMIsGuestIn64BitCode(pVCpu, pRegFrame)) 1202 { 1197 if (CPUMIsGuestIn64BitCode(pVCpu)) 1203 1198 rc = DISWriteReg64(pRegFrame, DestRegGen, val64); 1204 }1205 1199 else 1206 1200 rc = DISWriteReg32(pRegFrame, DestRegGen, (uint32_t)val64); … … 3081 3075 RTGCPTR pvFault, EMCODETYPE enmCodeType, uint32_t *pcbSize) 3082 3076 { 3077 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu)); 3083 3078 Assert(enmCodeType == EMCODETYPE_SUPERVISOR || enmCodeType == EMCODETYPE_ALL); 3084 3079 Assert(pcbSize); … … 3143 3138 */ 3144 3139 if ( pDis->Param1.cb > 4 3145 && CPUMIsGuestIn64BitCode(pVCpu , pRegFrame))3140 && CPUMIsGuestIn64BitCode(pVCpu)) 3146 3141 { 3147 3142 uint32_t uOpCode = pDis->pCurInstr->uOpcode; -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r41939 r42165 629 629 PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx); 630 630 631 CPUMGuestLazyLoadHiddenCsAndSs(IEMCPU_TO_VMCPU(pIemCpu)); 631 632 pIemCpu->uCpl = CPUMGetGuestCPL(IEMCPU_TO_VMCPU(pIemCpu)); 632 633 IEMMODE enmMode = CPUMIsGuestIn64BitCodeEx(pCtx) -
trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
r41965 r42165 939 939 { 940 940 #ifndef IN_RC 941 if ( CPUMIsGuestIn64BitCode(VMMGetCpu(pVM) , pRegFrame)941 if ( CPUMIsGuestIn64BitCode(VMMGetCpu(pVM)) 942 942 && pRegFrame->rcx >= _4G) 943 943 return VINF_EM_RAW_EMULATE_INSTR; … … 2044 2044 { 2045 2045 #ifndef IN_RC 2046 if ( CPUMIsGuestIn64BitCode(pVCpu , pRegFrame)2046 if ( CPUMIsGuestIn64BitCode(pVCpu) 2047 2047 && pRegFrame->rcx >= _4G) 2048 2048 return VINF_EM_RAW_EMULATE_INSTR; … … 2206 2206 { 2207 2207 #ifndef IN_RC 2208 if ( CPUMIsGuestIn64BitCode(pVCpu , pRegFrame)2208 if ( CPUMIsGuestIn64BitCode(pVCpu) 2209 2209 && pRegFrame->rcx >= _4G) 2210 2210 return VINF_EM_RAW_EMULATE_INSTR; -
trunk/src/VBox/VMM/VMMAll/SELMAll.cpp
r41965 r42165 659 659 660 660 661 #ifdef VBOX_WITH_RAW_MODE 662 /** 663 * CPUM helper that loads the hidden selector register from the descriptor table 664 * when executing with raw-mode. 665 * 666 * @remarks This is only used when in legacy protected mode! 667 * 668 * @param pVCpu Pointer to the current virtual CPU. 669 * @param pCtx The guest CPU context. 670 * @param pSReg The selector register. 671 * 672 * @todo Deal 100% correctly with stale selectors. What's more evil is 673 * invalid page table entries, which isn't impossible to imagine for 674 * LDT entries for instance, though unlikely. Currently, we turn a 675 * blind eye to these issues and return the old hidden registers, 676 * though we don't set the valid flag, so that we'll try loading them 677 * over and over again till we succeed loading something. 678 */ 679 VMM_INT_DECL(void) SELMLoadHiddenSelectorReg(PVMCPU pVCpu, PCCPUMCTX pCtx, PCPUMSELREG pSReg) 680 { 681 Assert(pCtx->cr0 & X86_CR0_PE); 682 Assert(!(pCtx->msrEFER & MSR_K6_EFER_LMA)); 683 684 PVM pVM = pVCpu->CTX_SUFF(pVM); 685 Assert(pVM->cCpus == 1); 686 687 RTSEL const Sel = pSReg->Sel; 688 689 /* 690 * Calculate descriptor table entry address. 691 */ 692 RTGCPTR GCPtrDesc; 693 if (!(Sel & X86_SEL_LDT)) 694 { 695 if ((Sel & X86_SEL_MASK) >= pCtx->gdtr.cbGdt) 696 { 697 AssertFailed(); /** @todo count these. */ 698 return; 699 } 700 GCPtrDesc = pCtx->gdtr.pGdt + (Sel & X86_SEL_MASK); 701 /** @todo Desc = pVM->selm.s.CTX_SUFF(paGdt)[Sel >> X86_SEL_SHIFT]; for cases 702 * where we don't change it too much. */ 703 } 704 else 705 { 706 if ((Sel & X86_SEL_MASK) >= pCtx->ldtr.u32Limit) 707 { 708 AssertFailed(); /** @todo count these. */ 709 return; 710 } 711 GCPtrDesc = pCtx->ldtr.u64Base + (Sel & X86_SEL_MASK); 712 } 713 714 /* 715 * Try read the entry. 716 */ 717 X86DESC Desc; 718 int rc = PGMPhysReadGCPtr(pVCpu, &Desc, GCPtrDesc, sizeof(Desc)); 719 if (RT_FAILURE(rc)) 720 { 721 //RT_ZERO(Desc); 722 //if (!(Sel & X86_SEL_LDT)) 723 // Desc = pVM->selm.s.CTX_SUFF(paGdt)[Sel >> X86_SEL_SHIFT]; 724 //if (!Desc.Gen.u1Present) 725 { 726 AssertFailed(); /** @todo count these. */ 727 return; 728 } 729 } 730 731 /* 732 * Digest it and store the result. 733 */ 734 if ( !Desc.Gen.u1Present 735 || !Desc.Gen.u1DescType) 736 { 737 AssertFailed(); /** @todo count these. */ 738 return; 739 } 740 741 uint32_t u32Limit = X86DESC_LIMIT(Desc); 742 if (Desc.Gen.u1Granularity) 743 u32Limit = (u32Limit << PAGE_SHIFT) | PAGE_OFFSET_MASK; 744 pSReg->u32Limit = u32Limit; 745 746 pSReg->u64Base = X86DESC_BASE(Desc); 747 pSReg->Attr.u = X86DESC_GET_HID_ATTR(Desc); 748 pSReg->fFlags = CPUMSELREG_FLAGS_VALID; 749 pSReg->ValidSel = Sel; 750 } 751 #endif /* VBOX_WITH_RAW_MODE */ 752 753 661 754 /** 662 755 * Validates and converts a GC selector based code address to a flat -
trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp
r42024 r42165 554 554 || !ss_r0 555 555 || (ss_r0 & X86_SEL_RPL) != ((dpl == 0) ? 1 : dpl) 556 || SELMToFlatBySelEx(pVCpu, fakeflags, ss_r0, (RTGCPTR)esp_r0, NULL, SELMTOFLAT_FLAGS_CPL1, (PRTGCPTR)&pTrapStackGC, NULL) != VINF_SUCCESS 556 || SELMToFlatBySelEx(pVCpu, fakeflags, ss_r0, (RTGCPTR)esp_r0, NULL, SELMTOFLAT_FLAGS_CPL1, 557 (PRTGCPTR)&pTrapStackGC, NULL) != VINF_SUCCESS 557 558 ) 558 559 { … … 568 569 569 570 if ( eflags.Bits.u1VM /* illegal */ 570 || SELMToFlatBySelEx(pVCpu, fakeflags, ss_r0, (RTGCPTR)esp_r0, NULL, SELMTOFLAT_FLAGS_CPL1, (PRTGCPTR)&pTrapStackGC, NULL) != VINF_SUCCESS) 571 || SELMToFlatBySelEx(pVCpu, fakeflags, ss_r0, (RTGCPTR)esp_r0, NULL, SELMTOFLAT_FLAGS_CPL1, 572 (PRTGCPTR)&pTrapStackGC, NULL) != VINF_SUCCESS) 571 573 { 572 574 AssertMsgFailed(("Invalid stack %04X:%08RX32??? (VM=%d)\n", ss_r0, esp_r0, eflags.Bits.u1VM)); -
trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp
r42157 r42165 1933 1933 * Format the registers. 1934 1934 */ 1935 if (CPUMIsGuestIn64BitCode(pVCpu , CPUMCTX2CORE(pCtx)))1935 if (CPUMIsGuestIn64BitCode(pVCpu)) 1936 1936 { 1937 1937 Log(("rax=%016RX64 rbx=%016RX64 rcx=%016RX64 rdx=%016RX64\n" -
trunk/src/VBox/VMM/VMMR3/DBGFMem.cpp
r41800 r42165 399 399 == DBGFSELINFO_FLAGS_LONG_MODE 400 400 && pSelInfo->cbLimit != ~(RTGCPTR)0 401 && CPUMIsGuestIn64BitCode(pVCpu , CPUMGetGuestCtxCore(pVCpu)) )401 && CPUMIsGuestIn64BitCode(pVCpu) ) 402 402 { 403 403 pSelInfo->GCPtrBase = 0; … … 405 405 } 406 406 else if ( Sel == 0 407 && CPUMIsGuestIn64BitCode(pVCpu , CPUMGetGuestCtxCore(pVCpu)))407 && CPUMIsGuestIn64BitCode(pVCpu)) 408 408 { 409 409 pSelInfo->GCPtrBase = 0; -
trunk/src/VBox/VMM/VMMR3/DBGFStack.cpp
r41965 r42165 332 332 fAddrMask = UINT16_MAX; 333 333 else if ( CpuMode == CPUMMODE_PROTECTED 334 || !CPUMIsGuestIn64BitCode(pVCpu , pCtxCore))334 || !CPUMIsGuestIn64BitCode(pVCpu)) 335 335 fAddrMask = UINT32_MAX; 336 336 else
Note:
See TracChangeset
for help on using the changeset viewer.