Changeset 35673 in vbox for trunk/src/VBox/Debugger/DBGCCmdHlp.cpp
- Timestamp:
- Jan 24, 2011 10:15:44 AM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 69597
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCCmdHlp.cpp
r35637 r35673 699 699 700 700 /** 701 * Converts a DBGC variable to a DBGF address structure. 702 * 703 * @returns VBox status code. 704 * @param pCmdHlp Pointer to the command callback structure. 705 * @param pVar The variable to convert. 706 * @param pAddress The target address. 701 * @interface_method_impl{DBGCCMDHLP,pfnVarToDbgfAddr} 707 702 */ 708 703 static DECLCALLBACK(int) dbgcHlpVarToDbgfAddr(PDBGCCMDHLP pCmdHlp, PCDBGCVAR pVar, PDBGFADDRESS pAddress) 709 704 { 710 705 PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); 711 return dbgcVarToDbgfAddr(pDbgc, pVar, pAddress); 706 AssertPtr(pVar); 707 AssertPtr(pAddress); 708 709 switch (pVar->enmType) 710 { 711 case DBGCVAR_TYPE_GC_FLAT: 712 DBGFR3AddrFromFlat(pDbgc->pVM, pAddress, pVar->u.GCFlat); 713 return VINF_SUCCESS; 714 715 case DBGCVAR_TYPE_NUMBER: 716 DBGFR3AddrFromFlat(pDbgc->pVM, pAddress, (RTGCUINTPTR)pVar->u.u64Number); 717 return VINF_SUCCESS; 718 719 case DBGCVAR_TYPE_GC_FAR: 720 return DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, pAddress, pVar->u.GCFar.sel, pVar->u.GCFar.off); 721 722 case DBGCVAR_TYPE_GC_PHYS: 723 DBGFR3AddrFromPhys(pDbgc->pVM, pAddress, pVar->u.GCPhys); 724 return VINF_SUCCESS; 725 726 case DBGCVAR_TYPE_STRING: 727 case DBGCVAR_TYPE_SYMBOL: 728 { 729 DBGCVAR Var; 730 int rc = DBGCCmdHlpEval(&pDbgc->CmdHlp, &Var, "%%(%DV)", pVar); 731 if (RT_FAILURE(rc)) 732 return rc; 733 return dbgcHlpVarToDbgfAddr(pCmdHlp, &Var, pAddress); 734 } 735 736 case DBGCVAR_TYPE_HC_FLAT: 737 case DBGCVAR_TYPE_HC_PHYS: 738 default: 739 return VERR_PARSE_CONVERSION_FAILED; 740 } 741 } 742 743 744 /** 745 * @interface_method_impl{DBGCCMDHLP,pfnVarFromDbgfAddr} 746 */ 747 static DECLCALLBACK(int) dbgcHlpVarFromDbgfAddr(PDBGCCMDHLP pCmdHlp, PCDBGFADDRESS pAddress, PDBGCVAR pResult) 748 { 749 AssertPtrReturn(pAddress, VERR_INVALID_POINTER); 750 AssertReturn(DBGFADDRESS_IS_VALID(pAddress), VERR_INVALID_PARAMETER); 751 AssertPtrReturn(pResult, VERR_INVALID_POINTER); 752 753 switch (pAddress->fFlags & DBGFADDRESS_FLAGS_TYPE_MASK) 754 { 755 case DBGFADDRESS_FLAGS_FAR16: 756 case DBGFADDRESS_FLAGS_FAR32: 757 case DBGFADDRESS_FLAGS_FAR64: 758 DBGCVAR_INIT_GC_FAR(pResult, pAddress->Sel, pAddress->off); 759 break; 760 761 case DBGFADDRESS_FLAGS_FLAT: 762 DBGCVAR_INIT_GC_FLAT(pResult, pAddress->FlatPtr); 763 break; 764 765 case DBGFADDRESS_FLAGS_PHYS: 766 DBGCVAR_INIT_GC_PHYS(pResult, pAddress->FlatPtr); 767 break; 768 769 default: 770 DBGCVAR_INIT(pResult); 771 AssertMsgFailedReturn(("%#x\n", pAddress->fFlags), VERR_INVALID_PARAMETER); 772 break; 773 } 774 775 return VINF_SUCCESS; 712 776 } 713 777 … … 1257 1321 pDbgc->CmdHlp.pfnFailV = dbgcHlpFailV; 1258 1322 pDbgc->CmdHlp.pfnVarToDbgfAddr = dbgcHlpVarToDbgfAddr; 1323 pDbgc->CmdHlp.pfnVarFromDbgfAddr = dbgcHlpVarFromDbgfAddr; 1259 1324 pDbgc->CmdHlp.pfnVarToNumber = dbgcHlpVarToNumber; 1260 1325 pDbgc->CmdHlp.pfnVarToBool = dbgcHlpVarToBool;
Note:
See TracChangeset
for help on using the changeset viewer.