Changeset 106362 in vbox
- Timestamp:
- Oct 16, 2024 1:08:09 PM (7 months ago)
- svn:sync-xref-src-repo-rev:
- 165175
- Location:
- trunk
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/dbgf.h
r106061 r106362 829 829 /** Debug register. */ 830 830 DBGFBPTYPE_REG, 831 /** INT 3 instruction. */832 DBGFBPTYPE_ INT3,831 /** Software breakpoint (INT 3 on x86, bkpt on AArch64). */ 832 DBGFBPTYPE_SOFTWARE, 833 833 /** Port I/O breakpoint. */ 834 834 DBGFBPTYPE_PORT_IO, … … 920 920 } Reg; 921 921 922 /** INT3breakpoint data. */923 struct DBGFBP INT3922 /** Software breakpoint data. */ 923 struct DBGFBPSW 924 924 { 925 925 /** The flat GC address of the breakpoint. */ … … 927 927 /** The physical address of the breakpoint. */ 928 928 RTGCPHYS PhysAddr; 929 /** The byte value we replaced by the INT 3 instruction. */ 930 uint8_t bOrg; 931 } Int3; 929 930 /** Architecture specific breakpoint data. */ 931 union 932 { 933 /** BKPT breakpoint data. */ 934 struct 935 { 936 /** The original instruction being replaced by the breakpoint. */ 937 uint32_t u32Org; 938 } armv8; 939 /** Int 3 data. */ 940 struct 941 { 942 /** The byte value we replaced by the INT 3 instruction. */ 943 uint8_t bOrg; 944 } x86; 945 } Arch; 946 } Sw; 932 947 933 948 /** I/O port breakpoint data. */ … … 959 974 AssertCompileSize(DBGFBPPUB, 64 - 8); 960 975 AssertCompileMembersAtSameOffset(DBGFBPPUB, u.GCPtr, DBGFBPPUB, u.Reg.GCPtr); 961 AssertCompileMembersAtSameOffset(DBGFBPPUB, u.GCPtr, DBGFBPPUB, u. Int3.GCPtr);976 AssertCompileMembersAtSameOffset(DBGFBPPUB, u.GCPtr, DBGFBPPUB, u.Sw.GCPtr); 962 977 963 978 /** Pointer to the visible breakpoint state. */ … … 2047 2062 DBGFREG_ARMV8_FIRST, 2048 2063 /** General purpose registers. */ 2049 DBGFREG_ARMV8_GREG_X0 ,2064 DBGFREG_ARMV8_GREG_X0 = DBGFREG_ARMV8_FIRST, 2050 2065 DBGFREG_ARMV8_GREG_W0 = DBGFREG_ARMV8_GREG_X0, 2051 2066 DBGFREG_ARMV8_GREG_X1, -
trunk/include/VBox/vmm/vm.h
r106061 r106362 1480 1480 uint8_t cEnabledHwIoBreakpoints; 1481 1481 uint8_t au8Alignment1[2]; /**< Alignment padding. */ 1482 /** The number of enabled INT3breakpoints. */1483 uint32_t volatile cEnabled Int3Breakpoints;1482 /** The number of enabled software breakpoints. */ 1483 uint32_t volatile cEnabledSwBreakpoints; 1484 1484 } const ro; 1485 1485 #endif -
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r106061 r106362 1019 1019 switch (DBGF_BP_PUB_GET_TYPE(pBp)) 1020 1020 { 1021 case DBGFBPTYPE_ INT3:1022 DBGCCmdHlpPrintf(&pDbgc->CmdHlp, " p %RGv", pBp->u. Int3.GCPtr);1021 case DBGFBPTYPE_SOFTWARE: 1022 DBGCCmdHlpPrintf(&pDbgc->CmdHlp, " p %RGv", pBp->u.Sw.GCPtr); 1023 1023 fHasAddress = true; 1024 1024 break; … … 1485 1485 if (cTries-- > 0) 1486 1486 return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "Too many disassembly failures. Giving up"); 1487 #if defined(VBOX_VMM_TARGET_ARMV8) 1488 cbInstr = sizeof(uint32_t); 1489 #else 1487 1490 cbInstr = 1; 1491 #endif 1488 1492 } 1489 1493 -
trunk/src/VBox/VMM/VMMAll/DBGFAll.cpp
r106061 r106362 168 168 /** @todo There was a todo here and returning false when I (bird) removed 169 169 * VBOX_WITH_LOTS_OF_DBGF_BPS, so this might not be correct. */ 170 return pVM->dbgf.s.cEnabled Int3Breakpoints > 0;170 return pVM->dbgf.s.cEnabledSwBreakpoints > 0; 171 171 } 172 172 -
trunk/src/VBox/VMM/VMMAll/DBGFAllBp.cpp
r106061 r106362 168 168 169 169 RT_NOREF(pCtx); 170 #ifdef VBOX_VMM_TARGET_ARMV8 171 LogFlow(("dbgfBpHit: hit breakpoint %u at %RGv cHits=0x%RX64\n", hBp, pCtx->Pc.u64, cHits)); 172 #else 170 173 LogFlow(("dbgfBpHit: hit breakpoint %u at %04x:%RGv cHits=0x%RX64\n", hBp, pCtx->cs.Sel, pCtx->rip, cHits)); 174 #endif 171 175 172 176 int rc = VINF_EM_DBG_BREAKPOINT; … … 186 190 if (rcStrict == VINF_SUCCESS) 187 191 { 192 # ifdef VBOX_VMM_TARGET_ARMV8 193 /** @todo Requires instruction interpreter. */ 194 AssertFailed(); 195 # else 188 196 uint8_t abInstr[DBGF_BP_INSN_MAX]; 189 197 RTGCPTR const GCPtrInstr = pVCpu->cpum.GstCtx.rip + pVCpu->cpum.GstCtx.cs.u64Base; … … 215 223 else 216 224 rc = VBOXSTRICTRC_VAL(rcStrict); 225 #endif 217 226 } 218 227 } … … 365 374 #endif 366 375 if ( pBp 367 && DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_ INT3)376 && DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_SOFTWARE) 368 377 #ifdef IN_RING3 369 378 return dbgfBpHit(pVM, pVCpu, pCtx, hBp, pBp); … … 472 481 473 482 483 #ifndef VBOX_VMM_TARGET_ARMV8 /** @todo for hardware break-/watchpoints */ 474 484 /** 475 485 * \#DB (Debug event) handler. … … 525 535 return VINF_EM_RAW_GUEST_TRAP; 526 536 } 537 #endif 527 538 528 539 … … 551 562 { 552 563 RTGCPTR GCPtrBp; 564 #ifdef VBOX_VMM_TARGET_ARMV8 565 int rc = VINF_SUCCESS; 566 GCPtrBp = pCtx->Pc.u64; 567 #else 553 568 int rc = SELMValidateAndConvertCSAddr(pVCpu, pCtx->eflags.u, pCtx->ss.Sel, pCtx->cs.Sel, &pCtx->cs, 554 569 pCtx->rip /* no -1 outside non-rawmode */, &GCPtrBp); 555 570 AssertRCReturn(rc, rc); 571 #endif 556 572 557 573 const uint16_t idxL1 = DBGF_BP_INT3_L1_IDX_EXTRACT_FROM_ADDR(GCPtrBp); … … 574 590 #endif 575 591 if ( pBp 576 && DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_ INT3)592 && DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_SOFTWARE) 577 593 { 578 if (pBp->Pub.u. Int3.GCPtr == (RTGCUINTPTR)GCPtrBp)594 if (pBp->Pub.u.Sw.GCPtr == (RTGCUINTPTR)GCPtrBp) 579 595 #ifdef IN_RING3 580 596 rc = dbgfBpHit(pVM, pVCpu, pCtx, hBp, pBp); -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp
r106061 r106362 2777 2777 { 2778 2778 PVMCC pVM = pVCpu->CTX_SUFF(pVM); 2779 if (pVM->dbgf.ro.cEnabled Int3Breakpoints == 0)2779 if (pVM->dbgf.ro.cEnabledSwBreakpoints == 0) 2780 2780 { /* likely: No vbox debugger breakpoints */ } 2781 2781 else -
trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h
r106061 r106362 11375 11375 * INT3 breakpoints - triggered by #BP exceptions. 11376 11376 */ 11377 if (pVM->dbgf.ro.cEnabled Int3Breakpoints > 0)11377 if (pVM->dbgf.ro.cEnabledSwBreakpoints > 0) 11378 11378 pDbgState->bmXcptExtra |= RT_BIT_32(X86_XCPT_BP); 11379 11379 -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r106061 r106362 2180 2180 2181 2181 /* Trap #BP for INT3 debug breakpoints set by the VM debugger. */ 2182 if (pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabled Int3Breakpoints)2182 if (pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabledSwBreakpoints) 2183 2183 hmR0SvmSetXcptIntercept(pVmcb, X86_XCPT_BP); 2184 2184 else … … 4756 4756 && (!VBOXVMM_ANY_PROBES_ENABLED() || !hmR0SvmAnyExpensiveProbesEnabled()) 4757 4757 && !DBGFIsStepping(pVCpu) 4758 && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabled Int3Breakpoints)4758 && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabledSwBreakpoints) 4759 4759 rc = hmR0SvmRunGuestCodeNormal(pVCpu, &cLoops); 4760 4760 else … … 5673 5673 * INT3 breakpoints - triggered by #BP exceptions. 5674 5674 */ 5675 if (pVM->dbgf.ro.cEnabled Int3Breakpoints > 0)5675 if (pVM->dbgf.ro.cEnabledSwBreakpoints > 0) 5676 5676 pDbgState->bmXcptExtra |= RT_BIT_32(X86_XCPT_BP); 5677 5677 -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r106061 r106362 6996 6996 && (!VBOXVMM_ANY_PROBES_ENABLED() || !hmR0VmxAnyExpensiveProbesEnabled()) 6997 6997 && !DBGFIsStepping(pVCpu) 6998 && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabled Int3Breakpoints)6998 && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabledSwBreakpoints) 6999 6999 rcStrict = hmR0VmxRunGuestCodeNormal(pVCpu, &cLoops); 7000 7000 else -
trunk/src/VBox/VMM/VMMR3/DBGFR3Bp.cpp
r106061 r106362 177 177 #include <iprt/assert.h> 178 178 #include <iprt/mem.h> 179 #if defined(VBOX_VMM_TARGET_ARMV8) 180 # include <iprt/armv8.h> 181 #endif 179 182 180 183 #include "DBGFInline.h" … … 1235 1238 AssertStmt(RT_VALID_PTR(pBp2), rc = VERR_DBGF_BP_IPE_7); 1236 1239 if (RT_SUCCESS(rc)) 1237 rc = dbgfR3BpInt3L2BstCreate(pUVM, idxL1, u32Entry, hBp, GCPtr, hBp2, pBp2->Pub.u. Int3.GCPtr);1240 rc = dbgfR3BpInt3L2BstCreate(pUVM, idxL1, u32Entry, hBp, GCPtr, hBp2, pBp2->Pub.u.Sw.GCPtr); 1238 1241 } 1239 1242 else if (u8Type == DBGF_BP_INT3_L1_ENTRY_TYPE_L2_IDX) … … 1446 1449 static int dbgfR3BpInt3Add(PUVM pUVM, DBGFBP hBp, PDBGFBPINT pBp) 1447 1450 { 1448 AssertReturn(DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_ INT3, VERR_DBGF_BP_IPE_3);1451 AssertReturn(DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_SOFTWARE, VERR_DBGF_BP_IPE_3); 1449 1452 1450 1453 int rc = VINF_SUCCESS; 1451 uint16_t idxL1 = DBGF_BP_INT3_L1_IDX_EXTRACT_FROM_ADDR(pBp->Pub.u. Int3.GCPtr);1454 uint16_t idxL1 = DBGF_BP_INT3_L1_IDX_EXTRACT_FROM_ADDR(pBp->Pub.u.Sw.GCPtr); 1452 1455 uint8_t cTries = 16; 1453 1456 … … 1467 1470 else 1468 1471 { 1469 rc = dbgfR3BpInt3L2BstNodeAdd(pUVM, idxL1, hBp, pBp->Pub.u. Int3.GCPtr);1472 rc = dbgfR3BpInt3L2BstNodeAdd(pUVM, idxL1, hBp, pBp->Pub.u.Sw.GCPtr); 1470 1473 if (rc != VINF_TRY_AGAIN) 1471 1474 break; … … 1551 1554 } 1552 1555 1553 case DBGFBPTYPE_ INT3:1556 case DBGFBPTYPE_SOFTWARE: 1554 1557 { 1555 1558 const uint16_t idxL1 = DBGF_BP_INT3_L1_IDX_EXTRACT_FROM_ADDR(GCPtr); … … 1651 1654 if (pVCpu->idCpu == 0) 1652 1655 { 1653 uint16_t idxL1 = DBGF_BP_INT3_L1_IDX_EXTRACT_FROM_ADDR(pBp->Pub.u. Int3.GCPtr);1656 uint16_t idxL1 = DBGF_BP_INT3_L1_IDX_EXTRACT_FROM_ADDR(pBp->Pub.u.Sw.GCPtr); 1654 1657 uint32_t u32Entry = ASMAtomicReadU32(&pUVM->dbgf.s.paBpLocL1R3[idxL1]); 1655 1658 AssertReturn(u32Entry != DBGF_BP_INT3_L1_ENTRY_TYPE_NULL, VERR_DBGF_BP_IPE_6); … … 1675 1678 1676 1679 rc = dbgfR3BpInt3L2BstRemove(pUVM, idxL1, DBGF_BP_INT3_L1_ENTRY_GET_L2_IDX(u32Entry), 1677 hBp, pBp->Pub.u. Int3.GCPtr);1680 hBp, pBp->Pub.u.Sw.GCPtr); 1678 1681 } 1679 1682 } 1680 1683 else if (u8Type == DBGF_BP_INT3_L1_ENTRY_TYPE_L2_IDX) 1681 1684 rc = dbgfR3BpInt3L2BstRemove(pUVM, idxL1, DBGF_BP_INT3_L1_ENTRY_GET_L2_IDX(u32Entry), 1682 hBp, pBp->Pub.u. Int3.GCPtr);1685 hBp, pBp->Pub.u.Sw.GCPtr); 1683 1686 } 1684 1687 … … 1697 1700 static int dbgfR3BpInt3Remove(PUVM pUVM, DBGFBP hBp, PDBGFBPINT pBp) 1698 1701 { 1699 AssertReturn(DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_ INT3, VERR_DBGF_BP_IPE_3);1702 AssertReturn(DBGF_BP_PUB_GET_TYPE(&pBp->Pub) == DBGFBPTYPE_SOFTWARE, VERR_DBGF_BP_IPE_3); 1700 1703 1701 1704 /* … … 1835 1838 break; 1836 1839 } 1837 case DBGFBPTYPE_ INT3:1840 case DBGFBPTYPE_SOFTWARE: 1838 1841 { 1839 1842 dbgfR3BpSetEnabled(pBp, true /*fEnabled*/); 1840 1843 1841 /** @todo When we enable the first int3breakpoint we should do this in an EMT rendezvous1844 /** @todo When we enable the first software breakpoint we should do this in an EMT rendezvous 1842 1845 * as the VMX code intercepts #BP only when at least one int3 breakpoint is enabled. 1843 1846 * A racing vCPU might trigger it and forward it to the guest causing panics/crashes/havoc. */ 1847 #ifdef VBOX_VMM_TARGET_ARMV8 1848 /* 1849 * Save original instruction and replace with brk 1850 */ 1851 rc = PGMPhysSimpleReadGCPhys(pVM, &pBp->Pub.u.Sw.Arch.armv8.u32Org, pBp->Pub.u.Sw.PhysAddr, sizeof(pBp->Pub.u.Sw.Arch.armv8.u32Org)); 1852 if (RT_SUCCESS(rc)) 1853 { 1854 static const uint32_t s_u32Brk = Armv8A64MkInstrBrk(0xc0de); 1855 rc = PGMPhysSimpleWriteGCPhys(pVM, pBp->Pub.u.Sw.PhysAddr, &s_u32Brk, sizeof(s_u32Brk)); 1856 } 1857 #else 1844 1858 /* 1845 1859 * Save current byte and write the int3 instruction byte. 1846 1860 */ 1847 rc = PGMPhysSimpleReadGCPhys(pVM, &pBp->Pub.u. Int3.bOrg, pBp->Pub.u.Int3.PhysAddr, sizeof(pBp->Pub.u.Int3.bOrg));1861 rc = PGMPhysSimpleReadGCPhys(pVM, &pBp->Pub.u.Sw.Arch.x86.bOrg, pBp->Pub.u.Sw.PhysAddr, sizeof(pBp->Pub.u.Sw.Arch.x86.bOrg)); 1848 1862 if (RT_SUCCESS(rc)) 1849 1863 { 1850 1864 static const uint8_t s_bInt3 = 0xcc; 1851 rc = PGMPhysSimpleWriteGCPhys(pVM, pBp->Pub.u.Int3.PhysAddr, &s_bInt3, sizeof(s_bInt3)); 1852 if (RT_SUCCESS(rc)) 1853 { 1854 ASMAtomicIncU32(&pVM->dbgf.s.cEnabledInt3Breakpoints); 1855 Log(("DBGF: Set breakpoint at %RGv (Phys %RGp)\n", pBp->Pub.u.Int3.GCPtr, pBp->Pub.u.Int3.PhysAddr)); 1856 } 1865 rc = PGMPhysSimpleWriteGCPhys(pVM, pBp->Pub.u.Sw.PhysAddr, &s_bInt3, sizeof(s_bInt3)); 1866 } 1867 #endif 1868 if (RT_SUCCESS(rc)) 1869 { 1870 ASMAtomicIncU32(&pVM->dbgf.s.cEnabledSwBreakpoints); 1871 Log(("DBGF: Set breakpoint at %RGv (Phys %RGp)\n", pBp->Pub.u.Sw.GCPtr, pBp->Pub.u.Sw.PhysAddr)); 1857 1872 } 1858 1873 … … 1916 1931 break; 1917 1932 } 1918 case DBGFBPTYPE_ INT3:1933 case DBGFBPTYPE_SOFTWARE: 1919 1934 { 1920 1935 /* … … 1922 1937 * We currently ignore invalid bytes. 1923 1938 */ 1939 #ifdef VBOX_VMM_TARGET_ARMV8 1940 uint32_t u32Current = 0; 1941 rc = PGMPhysSimpleReadGCPhys(pVM, &u32Current, pBp->Pub.u.Sw.PhysAddr, sizeof(u32Current)); 1942 if ( RT_SUCCESS(rc) 1943 && u32Current == Armv8A64MkInstrBrk(0xc0de)) 1944 rc = PGMPhysSimpleWriteGCPhys(pVM, pBp->Pub.u.Sw.PhysAddr, &pBp->Pub.u.Sw.Arch.armv8.u32Org, sizeof(pBp->Pub.u.Sw.Arch.armv8.u32Org)); 1945 #else 1924 1946 uint8_t bCurrent = 0; 1925 rc = PGMPhysSimpleReadGCPhys(pVM, &bCurrent, pBp->Pub.u. Int3.PhysAddr, sizeof(bCurrent));1947 rc = PGMPhysSimpleReadGCPhys(pVM, &bCurrent, pBp->Pub.u.Sw.PhysAddr, sizeof(bCurrent)); 1926 1948 if ( RT_SUCCESS(rc) 1927 1949 && bCurrent == 0xcc) 1928 {1929 rc = PGMPhysSimpleWriteGCPhys(pVM, pBp->Pub.u.Int3.PhysAddr, &pBp->Pub.u.Int3.bOrg, sizeof(pBp->Pub.u.Int3.bOrg)); 1930 if (RT_SUCCESS(rc)) 1931 {1932 ASMAtomicDecU32(&pVM->dbgf.s.cEnabledInt3Breakpoints);1933 dbgfR3BpSetEnabled(pBp, false /*fEnabled*/);1934 Log(("DBGF: Removed breakpoint at %RGv (Phys %RGp)\n", pBp->Pub.u.Int3.GCPtr, pBp->Pub.u.Int3.PhysAddr));1935 }1950 rc = PGMPhysSimpleWriteGCPhys(pVM, pBp->Pub.u.Sw.PhysAddr, &pBp->Pub.u.Sw.Arch.x86.bOrg, sizeof(pBp->Pub.u.Sw.Arch.x86.bOrg)); 1951 #endif 1952 1953 if (RT_SUCCESS(rc)) 1954 { 1955 ASMAtomicDecU32(&pVM->dbgf.s.cEnabledSwBreakpoints); 1956 dbgfR3BpSetEnabled(pBp, false /*fEnabled*/); 1957 Log(("DBGF: Removed breakpoint at %RGv (Phys %RGp)\n", pBp->Pub.u.Sw.GCPtr, pBp->Pub.u.Sw.PhysAddr)); 1936 1958 } 1937 1959 break; … … 1977 1999 { 1978 2000 case DBGFBPTYPE_REG: 1979 case DBGFBPTYPE_ INT3:2001 case DBGFBPTYPE_SOFTWARE: 1980 2002 { 1981 2003 if (DBGF_BP_PUB_IS_EXEC_BEFORE(&pBp->Pub)) … … 1989 2011 if (RT_SUCCESS(rc)) 1990 2012 { 2013 #ifdef VBOX_VMM_TARGET_ARMV8 2014 AssertFailed(); 2015 rc = VERR_NOT_IMPLEMENTED; 2016 #else 1991 2017 /* Replace the int3 with the original instruction byte. */ 1992 abInstr[0] = pBp->Pub.u. Int3.bOrg;2018 abInstr[0] = pBp->Pub.u.Sw.Arch.x86.bOrg; 1993 2019 rcStrict = IEMExecOneWithPrefetchedByPC(pVCpu, GCPtrInstr, &abInstr[0], sizeof(abInstr)); 2020 #endif 1994 2021 if ( rcStrict == VINF_SUCCESS 1995 2022 && DBGF_BP_PUB_IS_EXEC_AFTER(&pBp->Pub)) … … 2197 2224 2198 2225 PDBGFBPINT pBp = NULL; 2199 DBGFBP hBp = dbgfR3BpGetByAddr(pUVM, DBGFBPTYPE_ INT3, pAddress->FlatPtr, &pBp);2226 DBGFBP hBp = dbgfR3BpGetByAddr(pUVM, DBGFBPTYPE_SOFTWARE, pAddress->FlatPtr, &pBp); 2200 2227 if ( hBp != NIL_DBGFBP 2201 && pBp->Pub.u. Int3.PhysAddr == GCPhysBpAddr)2228 && pBp->Pub.u.Sw.PhysAddr == GCPhysBpAddr) 2202 2229 { 2203 2230 rc = VINF_SUCCESS; … … 2213 2240 } 2214 2241 2215 rc = dbgfR3BpAlloc(pUVM, hOwner, pvUser, DBGFBPTYPE_ INT3, fFlags, iHitTrigger, iHitDisable, &hBp, &pBp);2242 rc = dbgfR3BpAlloc(pUVM, hOwner, pvUser, DBGFBPTYPE_SOFTWARE, fFlags, iHitTrigger, iHitDisable, &hBp, &pBp); 2216 2243 if (RT_SUCCESS(rc)) 2217 2244 { 2218 pBp->Pub.u. Int3.PhysAddr = GCPhysBpAddr;2219 pBp->Pub.u. Int3.GCPtr = pAddress->FlatPtr;2245 pBp->Pub.u.Sw.PhysAddr = GCPhysBpAddr; 2246 pBp->Pub.u.Sw.GCPtr = pAddress->FlatPtr; 2220 2247 2221 2248 /* Add the breakpoint to the lookup tables. */ … … 2595 2622 break; 2596 2623 } 2597 case DBGFBPTYPE_ INT3:2624 case DBGFBPTYPE_SOFTWARE: 2598 2625 { 2599 2626 int rc = dbgfR3BpInt3Remove(pUVM, hBp, pBp); -
trunk/src/VBox/VMM/VMMR3/NEMR3Native-darwin.cpp
r106061 r106362 4117 4117 && !nemR3DarwinAnyExpensiveProbesEnabled() 4118 4118 && !DBGFIsStepping(pVCpu) 4119 && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabled Int3Breakpoints)4119 && !pVCpu->CTX_SUFF(pVM)->dbgf.ro.cEnabledSwBreakpoints) 4120 4120 rcStrict = nemR3DarwinRunGuestNormal(pVM, pVCpu); 4121 4121 else -
trunk/src/VBox/VMM/include/DBGFInternal.h
r106061 r106362 1116 1116 uint8_t cEnabledHwIoBreakpoints; 1117 1117 uint8_t au8Alignment1[2]; /**< Alignment padding. */ 1118 /** The number of enabled INT3breakpoints. */1119 uint32_t volatile cEnabled Int3Breakpoints;1118 /** The number of enabled software breakpoints. */ 1119 uint32_t volatile cEnabledSwBreakpoints; 1120 1120 1121 1121 /** Debugger Attached flag.
Note:
See TracChangeset
for help on using the changeset viewer.