Changeset 64559 in vbox for trunk/src/VBox/Debugger
- Timestamp:
- Nov 4, 2016 11:27:37 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 111745
- Location:
- trunk/src/VBox/Debugger
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r64555 r64559 1421 1421 * 1422 1422 * @returns nothing. 1423 * @param h CfgBb The basic block handle.1423 * @param hFlowBb The basic block handle. 1424 1424 * @param pDumpBb The dumper state to fill in for the basic block. 1425 1425 */ 1426 static void dbgcCmdUnassembleCfgDumpCalcBbSize(DBGF CFGBB hCfgBb, PDBGCCFGBBDUMP pDumpBb)1427 { 1428 uint32_t fFlags = DBGFR3 CfgBbGetFlags(hCfgBb);1429 uint32_t cInstr = DBGFR3 CfgBbGetInstrCount(hCfgBb);1430 1431 pDumpBb->h CfgBb = hCfgBb;1426 static void dbgcCmdUnassembleCfgDumpCalcBbSize(DBGFFLOWBB hFlowBb, PDBGCFLOWBBDUMP pDumpBb) 1427 { 1428 uint32_t fFlags = DBGFR3FlowBbGetFlags(hFlowBb); 1429 uint32_t cInstr = DBGFR3FlowBbGetInstrCount(hFlowBb); 1430 1431 pDumpBb->hFlowBb = hFlowBb; 1432 1432 pDumpBb->cchHeight = cInstr + 4; /* Include spacing and border top and bottom. */ 1433 pDumpBb->cchWidth = 0;1434 DBGFR3 CfgBbGetStartAddress(hCfgBb, &pDumpBb->AddrStart);1435 1436 DBGF CFGBBENDTYPE enmType = DBGFR3CfgBbGetType(hCfgBb);1437 if ( enmType == DBGF CFGBBENDTYPE_COND1438 || enmType == DBGF CFGBBENDTYPE_UNCOND_JMP)1439 DBGFR3 CfgBbGetBranchAddress(hCfgBb, &pDumpBb->AddrTarget);1440 1441 if (fFlags & DBGF_ CFG_BB_F_INCOMPLETE_ERR)1433 pDumpBb->cchWidth = 0; 1434 DBGFR3FlowBbGetStartAddress(hFlowBb, &pDumpBb->AddrStart); 1435 1436 DBGFFLOWBBENDTYPE enmType = DBGFR3FlowBbGetType(hFlowBb); 1437 if ( enmType == DBGFFLOWBBENDTYPE_COND 1438 || enmType == DBGFFLOWBBENDTYPE_UNCOND_JMP) 1439 DBGFR3FlowBbGetBranchAddress(hFlowBb, &pDumpBb->AddrTarget); 1440 1441 if (fFlags & DBGF_FLOW_BB_F_INCOMPLETE_ERR) 1442 1442 { 1443 1443 const char *pszErr = NULL; 1444 DBGFR3 CfgBbQueryError(hCfgBb, &pszErr);1444 DBGFR3FlowBbQueryError(hFlowBb, &pszErr); 1445 1445 if (pszErr) 1446 1446 { … … 1452 1452 { 1453 1453 const char *pszInstr = NULL; 1454 int rc = DBGFR3 CfgBbQueryInstr(hCfgBb, i, NULL, NULL, &pszInstr);1454 int rc = DBGFR3FlowBbQueryInstr(hFlowBb, i, NULL, NULL, &pszInstr); 1455 1455 AssertRC(rc); 1456 1456 pDumpBb->cchWidth = RT_MAX(pDumpBb->cchWidth, (uint32_t)strlen(pszInstr)); … … 1528 1528 * @param hScreen The screen to draw to. 1529 1529 */ 1530 static void dbgcCmdUnassembleCfgDumpBb(PDBGC CFGBBDUMP pDumpBb, DBGCSCREEN hScreen)1530 static void dbgcCmdUnassembleCfgDumpBb(PDBGCFLOWBBDUMP pDumpBb, DBGCSCREEN hScreen) 1531 1531 { 1532 1532 uint32_t uStartY = pDumpBb->uStartY; 1533 bool fError = RT_BOOL(DBGFR3 CfgBbGetFlags(pDumpBb->hCfgBb) & DBGF_CFG_BB_F_INCOMPLETE_ERR);1533 bool fError = RT_BOOL(DBGFR3FlowBbGetFlags(pDumpBb->hFlowBb) & DBGF_FLOW_BB_F_INCOMPLETE_ERR); 1534 1534 DBGCSCREENCOLOR enmColor = fError ? DBGCSCREENCOLOR_RED_BRIGHT : DBGCSCREENCOLOR_DEFAULT; 1535 1535 … … 1539 1539 uStartY++; 1540 1540 1541 uint32_t cInstr = DBGFR3 CfgBbGetInstrCount(pDumpBb->hCfgBb);1541 uint32_t cInstr = DBGFR3FlowBbGetInstrCount(pDumpBb->hFlowBb); 1542 1542 for (unsigned i = 0; i < cInstr; i++) 1543 1543 { 1544 1544 const char *pszInstr = NULL; 1545 DBGFR3 CfgBbQueryInstr(pDumpBb->hCfgBb, i, NULL, NULL, &pszInstr);1545 DBGFR3FlowBbQueryInstr(pDumpBb->hFlowBb, i, NULL, NULL, &pszInstr); 1546 1546 dbgcCmdUnassembleCfgDumpBbText(hScreen, pDumpBb->uStartX, uStartY + i, 1547 1547 pDumpBb->cchWidth, pszInstr, DBGCSCREENCOLOR_DEFAULT); … … 1552 1552 { 1553 1553 const char *pszErr = NULL; 1554 DBGFR3 CfgBbQueryError(pDumpBb->hCfgBb, &pszErr);1554 DBGFR3FlowBbQueryError(pDumpBb->hFlowBb, &pszErr); 1555 1555 if (pszErr) 1556 1556 dbgcCmdUnassembleCfgDumpBbText(hScreen, pDumpBb->uStartX, uStartY, … … 1574 1574 * @param pCmdHlp The command helper callback table. 1575 1575 */ 1576 static int dbgcCmdUnassembleCfgDump(DBGF CFGhCfg, bool fUseColor, PDBGCCMDHLP pCmdHlp)1577 { 1578 DBGF CFGIT hCfgIt;1579 int rc = DBGFR3 CfgItCreate(hCfg, DBGFCFGITORDER_BY_ADDR_LOWEST_FIRST, &hCfgIt);1576 static int dbgcCmdUnassembleCfgDump(DBGFFLOW hCfg, bool fUseColor, PDBGCCMDHLP pCmdHlp) 1577 { 1578 DBGFFLOWIT hCfgIt; 1579 int rc = DBGFR3FlowItCreate(hCfg, DBGFFLOWITORDER_BY_ADDR_LOWEST_FIRST, &hCfgIt); 1580 1580 if (RT_SUCCESS(rc)) 1581 1581 { 1582 uint32_t cBbs = DBGFR3 CfgGetBbCount(hCfg);1583 PDBGC CFGBBDUMP paDumpBb = (PDBGCCFGBBDUMP)RTMemTmpAllocZ(cBbs * sizeof(DBGCCFGBBDUMP));1582 uint32_t cBbs = DBGFR3FlowGetBbCount(hCfg); 1583 PDBGCFLOWBBDUMP paDumpBb = (PDBGCFLOWBBDUMP)RTMemTmpAllocZ(cBbs * sizeof(DBGCFLOWBBDUMP)); 1584 1584 if (paDumpBb) 1585 1585 { 1586 1586 /* Calculate the sizes of each basic block first. */ 1587 DBGF CFGBB hCfgBb = DBGFR3CfgItNext(hCfgIt);1587 DBGFFLOWBB hFlowBb = DBGFR3FlowItNext(hCfgIt); 1588 1588 uint32_t idxDumpBb = 0; 1589 while (h CfgBb)1589 while (hFlowBb) 1590 1590 { 1591 dbgcCmdUnassembleCfgDumpCalcBbSize(h CfgBb, &paDumpBb[idxDumpBb]);1591 dbgcCmdUnassembleCfgDumpCalcBbSize(hFlowBb, &paDumpBb[idxDumpBb]); 1592 1592 idxDumpBb++; 1593 h CfgBb = DBGFR3CfgItNext(hCfgIt);1593 hFlowBb = DBGFR3FlowItNext(hCfgIt); 1594 1594 } 1595 1595 … … 1601 1601 for (unsigned i = 0; i < cBbs; i++) 1602 1602 { 1603 PDBGC CFGBBDUMP pDumpBb = &paDumpBb[i];1603 PDBGCFLOWBBDUMP pDumpBb = &paDumpBb[i]; 1604 1604 cchWidth = RT_MAX(cchWidth, pDumpBb->cchWidth); 1605 1605 cchHeight += pDumpBb->cchHeight; 1606 1606 1607 1607 /* Incomplete blocks don't have a successor. */ 1608 if (DBGFR3 CfgBbGetFlags(pDumpBb->hCfgBb) & DBGF_CFG_BB_F_INCOMPLETE_ERR)1608 if (DBGFR3FlowBbGetFlags(pDumpBb->hFlowBb) & DBGF_FLOW_BB_F_INCOMPLETE_ERR) 1609 1609 continue; 1610 1610 1611 switch (DBGFR3 CfgBbGetType(pDumpBb->hCfgBb))1611 switch (DBGFR3FlowBbGetType(pDumpBb->hFlowBb)) 1612 1612 { 1613 case DBGF CFGBBENDTYPE_EXIT:1614 case DBGF CFGBBENDTYPE_LAST_DISASSEMBLED:1613 case DBGFFLOWBBENDTYPE_EXIT: 1614 case DBGFFLOWBBENDTYPE_LAST_DISASSEMBLED: 1615 1615 break; 1616 case DBGF CFGBBENDTYPE_UNCOND_JMP:1616 case DBGFFLOWBBENDTYPE_UNCOND_JMP: 1617 1617 if ( dbgcCmdUnassembleCfgAddrLower(&pDumpBb->AddrTarget, &pDumpBb->AddrStart) 1618 1618 || dbgcCmdUnassembleCfgAddrEqual(&pDumpBb->AddrTarget, &pDumpBb->AddrStart)) … … 1621 1621 cchRightExtra++; 1622 1622 break; 1623 case DBGF CFGBBENDTYPE_UNCOND:1623 case DBGFFLOWBBENDTYPE_UNCOND: 1624 1624 cchHeight += 2; /* For the arrow down to the next basic block. */ 1625 1625 break; 1626 case DBGF CFGBBENDTYPE_COND:1626 case DBGFFLOWBBENDTYPE_COND: 1627 1627 cchHeight += 2; /* For the arrow down to the next basic block. */ 1628 1628 if ( dbgcCmdUnassembleCfgAddrLower(&pDumpBb->AddrTarget, &pDumpBb->AddrStart) … … 1654 1654 1655 1655 /* Incomplete blocks don't have a successor. */ 1656 if (DBGFR3 CfgBbGetFlags(paDumpBb[i].hCfgBb) & DBGF_CFG_BB_F_INCOMPLETE_ERR)1656 if (DBGFR3FlowBbGetFlags(paDumpBb[i].hFlowBb) & DBGF_FLOW_BB_F_INCOMPLETE_ERR) 1657 1657 continue; 1658 1658 1659 switch (DBGFR3 CfgBbGetType(paDumpBb[i].hCfgBb))1659 switch (DBGFR3FlowBbGetType(paDumpBb[i].hFlowBb)) 1660 1660 { 1661 case DBGF CFGBBENDTYPE_EXIT:1662 case DBGF CFGBBENDTYPE_LAST_DISASSEMBLED:1663 case DBGF CFGBBENDTYPE_UNCOND_JMP:1661 case DBGFFLOWBBENDTYPE_EXIT: 1662 case DBGFFLOWBBENDTYPE_LAST_DISASSEMBLED: 1663 case DBGFFLOWBBENDTYPE_UNCOND_JMP: 1664 1664 break; 1665 case DBGF CFGBBENDTYPE_UNCOND:1665 case DBGFFLOWBBENDTYPE_UNCOND: 1666 1666 /* Draw the arrow down to the next block. */ 1667 1667 dbgcScreenAsciiDrawCharacter(hScreen, cchLeftExtra + cchWidth / 2, uY, … … 1672 1672 uY++; 1673 1673 break; 1674 case DBGF CFGBBENDTYPE_COND:1674 case DBGFFLOWBBENDTYPE_COND: 1675 1675 /* Draw the arrow down to the next block. */ 1676 1676 dbgcScreenAsciiDrawCharacter(hScreen, cchLeftExtra + cchWidth / 2, uY, … … 1691 1691 for (unsigned i = 0; i < cBbs; i++) 1692 1692 { 1693 PDBGC CFGBBDUMP pDumpBb = &paDumpBb[i];1693 PDBGCFLOWBBDUMP pDumpBb = &paDumpBb[i]; 1694 1694 1695 1695 /* Incomplete blocks don't have a successor. */ 1696 if (DBGFR3 CfgBbGetFlags(pDumpBb->hCfgBb) & DBGF_CFG_BB_F_INCOMPLETE_ERR)1696 if (DBGFR3FlowBbGetFlags(pDumpBb->hFlowBb) & DBGF_FLOW_BB_F_INCOMPLETE_ERR) 1697 1697 continue; 1698 1698 1699 switch (DBGFR3 CfgBbGetType(pDumpBb->hCfgBb))1699 switch (DBGFR3FlowBbGetType(pDumpBb->hFlowBb)) 1700 1700 { 1701 case DBGF CFGBBENDTYPE_EXIT:1702 case DBGF CFGBBENDTYPE_LAST_DISASSEMBLED:1703 case DBGF CFGBBENDTYPE_UNCOND:1701 case DBGFFLOWBBENDTYPE_EXIT: 1702 case DBGFFLOWBBENDTYPE_LAST_DISASSEMBLED: 1703 case DBGFFLOWBBENDTYPE_UNCOND: 1704 1704 break; 1705 case DBGF CFGBBENDTYPE_COND:1706 case DBGF CFGBBENDTYPE_UNCOND_JMP:1705 case DBGFFLOWBBENDTYPE_COND: 1706 case DBGFFLOWBBENDTYPE_UNCOND_JMP: 1707 1707 { 1708 1708 /* Find the target first to get the coordinates. */ 1709 PDBGC CFGBBDUMP pDumpBbTgt = NULL;1709 PDBGCFLOWBBDUMP pDumpBbTgt = NULL; 1710 1710 for (idxDumpBb = 0; idxDumpBb < cBbs; idxDumpBb++) 1711 1711 { … … 1779 1779 1780 1780 for (unsigned i = 0; i < cBbs; i++) 1781 DBGFR3 CfgBbRelease(paDumpBb[i].hCfgBb);1781 DBGFR3FlowBbRelease(paDumpBb[i].hFlowBb); 1782 1782 RTMemTmpFree(paDumpBb); 1783 1783 } … … 1785 1785 rc = VERR_NO_MEMORY; 1786 1786 1787 DBGFR3 CfgItDestroy(hCfgIt);1787 DBGFR3FlowItDestroy(hCfgIt); 1788 1788 } 1789 1789 … … 1932 1932 } 1933 1933 1934 DBGF CFGhCfg;1935 rc = DBGFR3 CfgCreate(pUVM, pDbgc->idCpu, &CurAddr, 0 /*cbDisasmMax*/, fFlags, &hCfg);1934 DBGFFLOW hCfg; 1935 rc = DBGFR3FlowCreate(pUVM, pDbgc->idCpu, &CurAddr, 0 /*cbDisasmMax*/, fFlags, &hCfg); 1936 1936 if (RT_SUCCESS(rc)) 1937 1937 { 1938 1938 /* Dump the graph. */ 1939 1939 rc = dbgcCmdUnassembleCfgDump(hCfg, fUseColor, pCmdHlp); 1940 DBGFR3 CfgRelease(hCfg);1940 DBGFR3FlowRelease(hCfg); 1941 1941 } 1942 1942 else 1943 rc = DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "DBGFR3 CfgCreate failed on '%Dv'", &pDbgc->DisasmPos);1943 rc = DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "DBGFR3FlowCreate failed on '%Dv'", &pDbgc->DisasmPos); 1944 1944 1945 1945 NOREF(pCmd); -
trunk/src/VBox/Debugger/DBGCInternal.h
r64554 r64559 428 428 * Control flow graph basic block dumper state 429 429 */ 430 typedef struct DBGC CFGBBDUMP430 typedef struct DBGCFLOWBBDUMP 431 431 { 432 432 /** The basic block referenced. */ 433 DBGF CFGBB hCfgBb;433 DBGFFLOWBB hFlowBb; 434 434 /** Cached start address. */ 435 435 DBGFADDRESS AddrStart; … … 444 444 /** Y coordinate of the start. */ 445 445 uint32_t uStartY; 446 } DBGC CFGBBDUMP;446 } DBGCFLOWBBDUMP; 447 447 /** Pointer to the CFG basic block dump state. */ 448 typedef DBGC CFGBBDUMP *PDBGCCFGBBDUMP;448 typedef DBGCFLOWBBDUMP *PDBGCFLOWBBDUMP; 449 449 450 450 /******************************************************************************* -
trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
r64556 r64559 381 381 } 382 382 383 VMMR3DECL(int) DBGFR3CfgCreate(PUVM pUVM, VMCPUID idCpu, PDBGFADDRESS pAddressStart, uint32_t cbDisasmMax, 384 uint32_t fFlags, PDBGFCFG phCfg) 385 { 386 return VERR_INTERNAL_ERROR; 387 } 388 VMMR3DECL(uint32_t) DBGFR3CfgRetain(DBGFCFG hCfg) 389 { 390 return 0; 391 } 392 VMMR3DECL(uint32_t) DBGFR3CfgRelease(DBGFCFG hCfg) 393 { 394 return 0; 395 } 396 VMMR3DECL(int) DBGFR3CfgQueryStartBb(DBGFCFG hCfg, PDBGFCFGBB phCfgBb) 397 { 398 return VERR_INTERNAL_ERROR; 399 } 400 VMMR3DECL(int) DBGFR3CfgQueryBbByAddress(DBGFCFG hCfg, PDBGFADDRESS pAddr, PDBGFCFGBB phCfgBb) 401 { 402 return VERR_INTERNAL_ERROR; 403 } 404 VMMR3DECL(uint32_t) DBGFR3CfgGetBbCount(DBGFCFG hCfg) 405 { 406 return 0; 407 } 408 VMMR3DECL(int) DBGFR3CfgDump(DBGFCFG hCfg, PFNDBGFR3CFGDUMP pfnDump, void *pvUser) 409 { 410 return VERR_INTERNAL_ERROR; 411 } 412 VMMR3DECL(uint32_t) DBGFR3CfgBbRetain(DBGFCFGBB hCfgBb) 413 { 414 return 0; 415 } 416 VMMR3DECL(uint32_t) DBGFR3CfgBbRelease(DBGFCFGBB hCfgBb) 417 { 418 return 0; 419 } 420 VMMR3DECL(PDBGFADDRESS) DBGFR3CfgBbGetStartAddress(DBGFCFGBB hCfgBb, PDBGFADDRESS pAddrStart) 421 { 422 return NULL; 423 } 424 VMMR3DECL(PDBGFADDRESS) DBGFR3CfgBbGetEndAddress(DBGFCFGBB hCfgBb, PDBGFADDRESS pAddrEnd) 425 { 426 return NULL; 427 } 428 VMMR3DECL(PDBGFADDRESS) DBGFR3CfgBbGetBranchAddress(DBGFCFGBB hCfgBb, PDBGFADDRESS pAddrTarget) 429 { 430 return NULL; 431 } 432 VMMR3DECL(PDBGFADDRESS) DBGFR3CfgBbGetFollowingAddress(DBGFCFGBB hCfgBb, PDBGFADDRESS pAddrFollow) 433 { 434 return NULL; 435 } 436 VMMR3DECL(DBGFCFGBBENDTYPE) DBGFR3CfgBbGetType(DBGFCFGBB hCfgBb) 437 { 438 return DBGFCFGBBENDTYPE_INVALID; 439 } 440 VMMR3DECL(uint32_t) DBGFR3CfgBbGetInstrCount(DBGFCFGBB hCfgBb) 441 { 442 return 0; 443 } 444 VMMR3DECL(uint32_t) DBGFR3CfgBbGetFlags(DBGFCFGBB hCfgBb) 445 { 446 return 0; 447 } 448 VMMR3DECL(int) DBGFR3CfgBbQueryError(DBGFCFGBB hCfgBb, const char **ppszErr) 449 { 450 return VERR_INTERNAL_ERROR; 451 } 452 VMMR3DECL(int) DBGFR3CfgBbQueryInstr(DBGFCFGBB hCfgBb, uint32_t idxInstr, PDBGFADDRESS pAddrInstr, 453 uint32_t *pcbInstr, const char **ppszInstr) 454 { 455 return VERR_INTERNAL_ERROR; 456 } 457 VMMR3DECL(int) DBGFR3CfgBbQuerySuccessors(DBGFCFGBB hCfgBb, PDBGFCFGBB phCfgBbFollow, 458 PDBGFCFGBB phCfgBbTarget) 459 { 460 return VERR_INTERNAL_ERROR; 461 } 462 VMMR3DECL(uint32_t) DBGFR3CfgBbGetRefBbCount(DBGFCFGBB hCfgBb) 463 { 464 return 0; 465 } 466 VMMR3DECL(int) DBGFR3CfgBbGetRefBb(DBGFCFGBB hCfgBb, PDBGFCFGBB pahCfgBbRef, uint32_t cRef) 467 { 468 return VERR_INTERNAL_ERROR; 469 } 470 VMMR3DECL(int) DBGFR3CfgItCreate(DBGFCFG hCfg, DBGFCFGITORDER enmOrder, PDBGFCFGIT phCfgIt) 471 { 472 return VERR_INTERNAL_ERROR; 473 } 474 VMMR3DECL(void) DBGFR3CfgItDestroy(DBGFCFGIT hCfgIt) 475 { 476 } 477 VMMR3DECL(DBGFCFGBB) DBGFR3CfgItNext(DBGFCFGIT hCfgIt) 478 { 479 return NULL; 480 } 481 VMMR3DECL(int) DBGFR3CfgItReset(DBGFCFGIT hCfgIt) 383 VMMR3DECL(int) DBGFR3FlowCreate(PUVM pUVM, VMCPUID idCpu, PDBGFADDRESS pAddressStart, uint32_t cbDisasmMax, 384 uint32_t fFlags, PDBGFFLOW phFlow) 385 { 386 return VERR_INTERNAL_ERROR; 387 } 388 VMMR3DECL(uint32_t) DBGFR3FlowRetain(DBGFFLOW hFlow) 389 { 390 return 0; 391 } 392 VMMR3DECL(uint32_t) DBGFR3FlowRelease(DBGFFLOW hFlow) 393 { 394 return 0; 395 } 396 VMMR3DECL(int) DBGFR3FlowQueryStartBb(DBGFFLOW hFlow, PDBGFFLOWBB phFlowBb) 397 { 398 return VERR_INTERNAL_ERROR; 399 } 400 VMMR3DECL(int) DBGFR3FlowQueryBbByAddress(DBGFFLOW hFlow, PDBGFADDRESS pAddr, PDBGFFLOWBB phFlowBb) 401 { 402 return VERR_INTERNAL_ERROR; 403 } 404 VMMR3DECL(uint32_t) DBGFR3FlowGetBbCount(DBGFFLOW hFlow) 405 { 406 return 0; 407 } 408 VMMR3DECL(uint32_t) DBGFR3FlowBbRetain(DBGFFLOWBB hFlowBb) 409 { 410 return 0; 411 } 412 VMMR3DECL(uint32_t) DBGFR3FlowBbRelease(DBGFFLOWBB hFlowBb) 413 { 414 return 0; 415 } 416 VMMR3DECL(PDBGFADDRESS) DBGFR3FlowBbGetStartAddress(DBGFFLOWBB hFlowBb, PDBGFADDRESS pAddrStart) 417 { 418 return NULL; 419 } 420 VMMR3DECL(PDBGFADDRESS) DBGFR3FlowBbGetEndAddress(DBGFFLOWBB hFlowBb, PDBGFADDRESS pAddrEnd) 421 { 422 return NULL; 423 } 424 VMMR3DECL(PDBGFADDRESS) DBGFR3FlowBbGetBranchAddress(DBGFFLOWBB hFlowBb, PDBGFADDRESS pAddrTarget) 425 { 426 return NULL; 427 } 428 VMMR3DECL(PDBGFADDRESS) DBGFR3FlowBbGetFollowingAddress(DBGFFLOWBB hFlowBb, PDBGFADDRESS pAddrFollow) 429 { 430 return NULL; 431 } 432 VMMR3DECL(DBGFFLOWBBENDTYPE) DBGFR3FlowBbGetType(DBGFFLOWBB hFlowBb) 433 { 434 return DBGFFLOWBBENDTYPE_INVALID; 435 } 436 VMMR3DECL(uint32_t) DBGFR3FlowBbGetInstrCount(DBGFFLOWBB hFlowBb) 437 { 438 return 0; 439 } 440 VMMR3DECL(uint32_t) DBGFR3FlowBbGetFlags(DBGFFLOWBB hFlowBb) 441 { 442 return 0; 443 } 444 VMMR3DECL(int) DBGFR3FlowBbQueryError(DBGFFLOWBB hFlowBb, const char **ppszErr) 445 { 446 return VERR_INTERNAL_ERROR; 447 } 448 VMMR3DECL(int) DBGFR3FlowBbQueryInstr(DBGFFLOWBB hFlowBb, uint32_t idxInstr, PDBGFADDRESS pAddrInstr, 449 uint32_t *pcbInstr, const char **ppszInstr) 450 { 451 return VERR_INTERNAL_ERROR; 452 } 453 VMMR3DECL(int) DBGFR3FlowBbQuerySuccessors(DBGFFLOWBB hFlowBb, PDBGFFLOWBB phFlowBbFollow, 454 PDBGFFLOWBB phFlowBbTarget) 455 { 456 return VERR_INTERNAL_ERROR; 457 } 458 VMMR3DECL(uint32_t) DBGFR3FlowBbGetRefBbCount(DBGFFLOWBB hFlowBb) 459 { 460 return 0; 461 } 462 VMMR3DECL(int) DBGFR3FlowBbGetRefBb(DBGFFLOWBB hFlowBb, PDBGFFLOWBB pahFlowBbRef, uint32_t cRef) 463 { 464 return VERR_INTERNAL_ERROR; 465 } 466 VMMR3DECL(int) DBGFR3FlowItCreate(DBGFFLOW hFlow, DBGFFLOWITORDER enmOrder, PDBGFFLOWIT phFlowIt) 467 { 468 return VERR_INTERNAL_ERROR; 469 } 470 VMMR3DECL(void) DBGFR3FlowItDestroy(DBGFFLOWIT hFlowIt) 471 { 472 } 473 VMMR3DECL(DBGFFLOWBB) DBGFR3FlowItNext(DBGFFLOWIT hFlowIt) 474 { 475 return NULL; 476 } 477 VMMR3DECL(int) DBGFR3FlowItReset(DBGFFLOWIT hFlowIt) 482 478 { 483 479 return VERR_INTERNAL_ERROR;
Note:
See TracChangeset
for help on using the changeset viewer.