Changeset 86730 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Oct 28, 2020 10:44:37 AM (4 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/DBGFAllBp.cpp
r86729 r86730 1 1 /* $Id$ */ 2 2 /** @file 3 * DBGF - Debugger Facility, RZpart.3 * DBGF - Debugger Facility, All Context breakpoint management part. 4 4 */ 5 5 … … 65 65 return &pBpChunk->paBpBaseSharedR0[idxEntry]; 66 66 } 67 # endif68 67 69 68 … … 79 78 * @param pBpR0 The ring-0 only breakpoint state. 80 79 */ 81 DECLINLINE(int) dbgfR ZBpHit(PVMCC pVM, PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame,80 DECLINLINE(int) dbgfR0BpHit(PVMCC pVM, PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame, 82 81 DBGFBP hBp, PDBGFBPINT pBp, PDBGFBPINTR0 pBpR0) 83 82 { … … 103 102 * @note The content of the resolved L2 table entry is not validated!. 104 103 */ 105 DECLINLINE(PCDBGFBPL2ENTRY) dbgfR ZBpL2GetByIdx(PVMCC pVM, uint32_t idxL2)104 DECLINLINE(PCDBGFBPL2ENTRY) dbgfR0BpL2GetByIdx(PVMCC pVM, uint32_t idxL2) 106 105 { 107 106 uint32_t idChunk = DBGF_BP_L2_IDX_GET_CHUNK_ID(idxL2); … … 128 127 * @param GCPtrKey The key to search for. 129 128 */ 130 static int dbgf RZBpL2Walk(PVMCC pVM, PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame,131 129 static int dbgfBpL2Walk(PVMCC pVM, PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame, 130 uint32_t idxL2Root, RTGCUINTPTR GCPtrKey) 132 131 { 133 132 /** @todo We don't use the depth right now but abort the walking after a fixed amount of levels. */ 134 133 uint8_t iDepth = 32; 135 PCDBGFBPL2ENTRY pL2Entry = dbgfR ZBpL2GetByIdx(pVM, idxL2Root);134 PCDBGFBPL2ENTRY pL2Entry = dbgfR0BpL2GetByIdx(pVM, idxL2Root); 136 135 137 136 while (RT_LIKELY( iDepth-- > 0 … … 153 152 if ( pBp 154 153 && DBGF_BP_PUB_GET_TYPE(pBp->Pub.fFlagsAndType) == DBGFBPTYPE_INT3) 155 return dbgfR ZBpHit(pVM, pVCpu, pRegFrame, hBp, pBp, pBpR0);154 return dbgfR0BpHit(pVM, pVCpu, pRegFrame, hBp, pBp, pBpR0); 156 155 157 156 /* The entry got corrupted, just abort. */ … … 167 166 return VINF_EM_RAW_GUEST_TRAP; 168 167 169 pL2Entry = dbgfR ZBpL2GetByIdx(pVM, idxL2Next);168 pL2Entry = dbgfR0BpL2GetByIdx(pVM, idxL2Next); 170 169 } 171 170 172 171 return VERR_DBGF_BP_L2_LOOKUP_FAILED; 173 172 } 173 # endif /* !IN_RING0 */ 174 174 #endif /* !VBOX_WITH_LOTS_OF_DBGF_BPS */ 175 175 … … 188 188 * @param fAltStepping Alternative stepping indicator. 189 189 */ 190 VMM RZ_INT_DECL(int) DBGFRZTrap01Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6, bool fAltStepping)190 VMM_INT_DECL(int) DBGFTrap01Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6, bool fAltStepping) 191 191 { 192 192 /** @todo Intel docs say that X86_DR6_BS has the highest priority... */ … … 256 256 * @param pRegFrame Pointer to the register frame for the trap. 257 257 */ 258 VMM RZ_INT_DECL(int) DBGFRZTrap03Handler(PVMCC pVM, PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame)258 VMM_INT_DECL(int) DBGFTrap03Handler(PVMCC pVM, PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame) 259 259 { 260 260 #ifndef VBOX_WITH_LOTS_OF_DBGF_BPS … … 290 290 } 291 291 #else 292 #ifndef IN_RING0 293 # error "Todo" 294 #endif 292 295 if (pVM->dbgfr0.s.CTX_SUFF(paBpLocL1)) 293 296 { … … 317 320 { 318 321 if (pBp->Pub.u.Int3.GCPtr == (RTGCUINTPTR)GCPtrBp) 319 rc = dbgfR ZBpHit(pVM, pVCpu, pRegFrame, hBp, pBp, pBpR0);322 rc = dbgfR0BpHit(pVM, pVCpu, pRegFrame, hBp, pBp, pBpR0); 320 323 /* else: Genuine guest trap. */ 321 324 } … … 324 327 } 325 328 else if (u8Type == DBGF_BP_INT3_L1_ENTRY_TYPE_L2_IDX) 326 rc = dbgf RZBpL2Walk(pVM, pVCpu, pRegFrame, DBGF_BP_INT3_L1_ENTRY_GET_L2_IDX(u32L1Entry),327 329 rc = dbgfBpL2Walk(pVM, pVCpu, pRegFrame, DBGF_BP_INT3_L1_ENTRY_GET_L2_IDX(u32L1Entry), 330 DBGF_BP_INT3_L2_KEY_EXTRACT_FROM_ADDR((RTGCUINTPTR)GCPtrBp)); 328 331 else /* Some invalid type. */ 329 332 rc = VERR_DBGF_BP_L1_LOOKUP_FAILED;
Note:
See TracChangeset
for help on using the changeset viewer.