Changeset 22106 in vbox
- Timestamp:
- Aug 8, 2009 4:15:40 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 50855
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/dbgf.h
r22105 r22106 728 728 { 729 729 /** Frame number. */ 730 RTUINTiFrame;730 uint32_t iFrame; 731 731 /** Frame flags. */ 732 RTUINTfFlags;732 uint32_t fFlags; 733 733 /** The frame address. 734 734 * The off member is [e|r]bp and the Sel member is ss. */ … … 795 795 /** This is the last record because we reached the maximum depth. */ 796 796 #define DBGFSTACKFRAME_FLAGS_MAX_DEPTH RT_BIT(3) 797 /** 16-bit frame. */ 798 #define DBGFSTACKFRAME_FLAGS_16BIT RT_BIT(4) 799 /** 32-bit frame. */ 800 #define DBGFSTACKFRAME_FLAGS_32BIT RT_BIT(5) 801 /** 64-bit frame. */ 802 #define DBGFSTACKFRAME_FLAGS_64BIT RT_BIT(6) 797 803 /** @} */ 798 804 -
trunk/src/VBox/VMM/DBGFStack.cpp
r19710 r22106 101 101 case DBGFADDRESS_FLAGS_FAR64: cbStackItem = 8; break; 102 102 case DBGFADDRESS_FLAGS_RING0: cbStackItem = sizeof(RTHCUINTPTR); break; 103 default: cbStackItem = 4; break; /// @todo 64-bit guests. 103 default: 104 switch (pFrame->enmReturnType) 105 { 106 case DBGFRETURNTYPE_FAR16: 107 case DBGFRETURNTYPE_IRET16: 108 case DBGFRETURNTYPE_IRET32_V86: 109 case DBGFRETURNTYPE_NEAR16: cbStackItem = 2; break; 110 111 case DBGFRETURNTYPE_FAR32: 112 case DBGFRETURNTYPE_IRET32: 113 case DBGFRETURNTYPE_IRET32_PRIV: 114 case DBGFRETURNTYPE_NEAR32: cbStackItem = 4; break; 115 116 case DBGFRETURNTYPE_FAR64: 117 case DBGFRETURNTYPE_IRET64: 118 case DBGFRETURNTYPE_NEAR64: cbStackItem = 8; break; 119 120 default: 121 AssertMsgFailed(("%d\n", pFrame->enmReturnType)); 122 cbStackItem = 4; 123 break; 124 } 104 125 } 105 126 … … 239 260 240 261 /* 262 * Frame bitness flag. 263 */ 264 switch (cbStackItem) 265 { 266 case 2: pFrame->fFlags |= DBGFSTACKFRAME_FLAGS_16BIT; break; 267 case 4: pFrame->fFlags |= DBGFSTACKFRAME_FLAGS_32BIT; break; 268 case 8: pFrame->fFlags |= DBGFSTACKFRAME_FLAGS_64BIT; break; 269 default: AssertMsgFailed(("cbStackItem=%d\n", cbStackItem)); return VERR_INTERNAL_ERROR; 270 } 271 272 /* 241 273 * The arguments. 242 274 */ … … 282 314 case DBGFADDRESS_FLAGS_FAR32: pCur->enmReturnType = DBGFRETURNTYPE_NEAR32; break; 283 315 case DBGFADDRESS_FLAGS_FAR64: pCur->enmReturnType = DBGFRETURNTYPE_NEAR64; break; 284 case DBGFADDRESS_FLAGS_RING0: pCur->enmReturnType = (HC_ARCH_BITS == 64)? DBGFRETURNTYPE_NEAR64 : DBGFRETURNTYPE_NEAR32; break;316 case DBGFADDRESS_FLAGS_RING0: pCur->enmReturnType = HC_ARCH_BITS == 64 ? DBGFRETURNTYPE_NEAR64 : DBGFRETURNTYPE_NEAR32; break; 285 317 default: pCur->enmReturnType = DBGFRETURNTYPE_NEAR32; break; /// @todo 64-bit guests 286 318 } 287 319 288 uint64_t fAddrMask = UINT64_MAX;320 uint64_t fAddrMask; 289 321 if (enmCodeType == DBGFCODETYPE_RING0) 290 fAddrMask = (HC_ARCH_BITS == 64) ? UINT64_MAX : UINT32_MAX; 291 else 292 if (enmCodeType == DBGFCODETYPE_HYPER) 322 fAddrMask = HC_ARCH_BITS == 64 ? UINT64_MAX : UINT32_MAX; 323 else if (enmCodeType == DBGFCODETYPE_HYPER) 293 324 fAddrMask = UINT32_MAX; 294 325 else if (DBGFADDRESS_IS_FAR16(&pCur->AddrPC)) … … 296 327 else if (DBGFADDRESS_IS_FAR32(&pCur->AddrPC)) 297 328 fAddrMask = UINT32_MAX; 298 else if (DBGFADDRESS_IS_FLAT(&pCur->AddrPC)) 329 else if (DBGFADDRESS_IS_FAR64(&pCur->AddrPC)) 330 fAddrMask = UINT64_MAX; 331 else 299 332 { 300 CPUMMODE CpuMode = CPUMGetGuestMode(VMMGetCpuById(pVM, idCpu)); 333 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu); 334 CPUMMODE CpuMode = CPUMGetGuestMode(pVCpu); 301 335 if (CpuMode == CPUMMODE_REAL) 302 336 fAddrMask = UINT16_MAX; 303 else if (CpuMode == CPUMMODE_PROTECTED) 337 else if ( CpuMode == CPUMMODE_PROTECTED 338 || !CPUMIsGuestIn64BitCode(pVCpu, pCtxCore)) 304 339 fAddrMask = UINT32_MAX; 340 else 341 fAddrMask = UINT64_MAX; 305 342 } 306 343
Note:
See TracChangeset
for help on using the changeset viewer.