Changeset 41546 in vbox for trunk/src/VBox/Debugger
- Timestamp:
- Jun 1, 2012 2:34:33 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 78309
- Location:
- trunk/src/VBox/Debugger
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCCmdHlp.cpp
r40097 r41546 370 370 { 371 371 DBGCVAR Var2; 372 rc = dbgcOpAddrFlat(pDbgc, &Var, &Var2);372 rc = dbgcOpAddrFlat(pDbgc, &Var, DBGCVAR_CAT_ANY, &Var2); 373 373 if (RT_SUCCESS(rc)) 374 374 { … … 519 519 /* convert to flat address */ 520 520 DBGCVAR Var2; 521 rc = dbgcOpAddrFlat(pDbgc, &Var, &Var2);521 rc = dbgcOpAddrFlat(pDbgc, &Var, DBGCVAR_CAT_ANY, &Var2); 522 522 if (RT_FAILURE(rc)) 523 523 { -
trunk/src/VBox/Debugger/DBGCEval.cpp
r35696 r41546 26 26 #include <iprt/asm.h> 27 27 #include <iprt/assert.h> 28 #include <iprt/mem.h> 28 29 #include <iprt/string.h> 29 30 #include <iprt/ctype.h> … … 490 491 rc = dbgcEvalSubUnary(pDbgc, pszExpr2, cchExpr - (pszExpr2 - pszExpr), pOp->enmCatArg1, &Arg); 491 492 if (RT_SUCCESS(rc)) 492 rc = pOp->pfnHandlerUnary(pDbgc, &Arg, pResult);493 rc = pOp->pfnHandlerUnary(pDbgc, &Arg, enmCategory, pResult); 493 494 } 494 495 } … … 609 610 { 610 611 Log2(("dbgcEvalSub: cchExpr=%d pszExpr=%s\n", cchExpr, pszExpr)); 612 611 613 /* 612 614 * First we need to remove blanks in both ends. … … 786 788 if (RT_SUCCESS(rc)) 787 789 /* apply the operator. */ 788 rc = pOpSplit->pfnHandlerUnary(pDbgc, &Arg, pResult);790 rc = pOpSplit->pfnHandlerUnary(pDbgc, &Arg, enmCategory, pResult); 789 791 } 790 792 else … … 851 853 * The parse loop. 852 854 */ 853 PDBGCVAR pArg0 = &paArgs[0]; 854 PDBGCVAR pArg = pArg0; 855 PDBGCVAR pArg0 = &paArgs[0]; 856 PDBGCVAR pArg = pArg0; 857 PCDBGCVARDESC pPrevDesc = NULL; 858 PCDBGCVARDESC paVarDescs = pCmd->paArgDescs; 859 unsigned const cVarDescs = pCmd->cArgDescs; 860 unsigned cCurDesc = 0; 861 unsigned iVar = 0; 862 unsigned iVarDesc = 0; 855 863 *pcArgs = 0; 856 864 do … … 863 871 if (pArg >= &paArgs[cArgs]) 864 872 return VERR_PARSE_ARGUMENT_OVERFLOW; 873 #ifdef DEBUG_bird /* work in progress. */ 874 if (iVarDesc >= cVarDescs) 875 return VERR_PARSE_TOO_MANY_ARGUMENTS; 876 877 /* Walk argument descriptors. */ 878 if ( ( paVarDescs[iVarDesc].fFlags & DBGCVD_FLAGS_DEP_PREV 879 && &paVarDescs[iVarDesc - 1] != pPrevDesc) 880 || cCurDesc >= paVarDescs[iVarDesc].cTimesMax) 881 { 882 iVarDesc++; 883 if (iVarDesc >= cVarDescs) 884 return VERR_PARSE_TOO_MANY_ARGUMENTS; 885 cCurDesc = 0; 886 } 887 #endif 865 888 866 889 /* … … 972 995 *pszEnd = '\0'; 973 996 /* (psz = next char to process) */ 974 997 size_t cchArgs = strlen(pszArgs); 998 999 1000 #ifdef DEBUG_bird /* work in progress. */ 1001 /* 1002 * Try optional arguments until we find something which matches 1003 * or can easily be promoted to what the descriptor want. 1004 */ 1005 for (;;) 1006 { 1007 char *pszArgsCopy = (char *)RTMemDup(pszArgs, cchArgs + 1); 1008 if (!pszArgsCopy) 1009 return VERR_NO_MEMORY; 1010 1011 int rc = dbgcEvalSub(pDbgc, pszArgs, strlen(pszArgs), paVarDescs[iVarDesc].enmCategory, pArg); 1012 if (RT_SUCCESS(rc)) 1013 { 1014 pArg->pDesc = pPrevDesc = &paVarDescs[iVarDesc]; 1015 cCurDesc++; 1016 RTMemFree(pszArgsCopy); 1017 break; 1018 } 1019 1020 memcpy(pszArgs, pszArgsCopy, cchArgs + 1); 1021 RTMemFree(pszArgsCopy); 1022 1023 /* can we advance? */ 1024 if (paVarDescs[iVarDesc].cTimesMin > cCurDesc) 1025 return VERR_PARSE_ARGUMENT_TYPE_MISMATCH; 1026 if (++iVarDesc >= cVarDescs) 1027 return VERR_PARSE_ARGUMENT_TYPE_MISMATCH; 1028 cCurDesc = 0; 1029 } 1030 1031 #else 975 1032 /* 976 1033 * Parse and evaluate the argument. 977 1034 */ 978 int rc = dbgcEvalSub(pDbgc, pszArgs, strlen(pszArgs), DBGCVAR_CAT_ANY, pArg);1035 int rc = dbgcEvalSub(pDbgc, pszArgs, cchArgs, DBGCVAR_CAT_ANY, pArg); 979 1036 if (RT_FAILURE(rc)) 980 1037 return rc; 1038 #endif 981 1039 982 1040 /* 983 1041 * Next. 984 1042 */ 1043 iVar++; 985 1044 pArg++; 986 1045 (*pcArgs)++; … … 1050 1109 */ 1051 1110 unsigned cArgs; 1052 int rc = dbgcProcessArguments(pDbgc, pCmd, pszArgs, &pDbgc->aArgs[pDbgc->iArg], RT_ELEMENTS(pDbgc->aArgs) - pDbgc->iArg, &cArgs); 1111 int rc = dbgcProcessArguments(pDbgc, pCmd, pszArgs, &pDbgc->aArgs[pDbgc->iArg], 1112 RT_ELEMENTS(pDbgc->aArgs) - pDbgc->iArg, &cArgs); 1053 1113 if (RT_SUCCESS(rc)) 1054 1114 { … … 1152 1212 1153 1213 default: 1154 rc = DBGCCmdHlpPrintf(&pDbgc->CmdHlp, "Error: Unknown error % d!\n", rc);1214 rc = DBGCCmdHlpPrintf(&pDbgc->CmdHlp, "Error: Unknown error %Rrc (%d)!\n", rc, rc); 1155 1215 break; 1156 1216 } -
trunk/src/VBox/Debugger/DBGCInternal.h
r35694 r41546 278 278 * @param pDbgc Debugger console instance data. 279 279 * @param pArg The argument. 280 * @param enmCat The desired result category. Can be ignored. 280 281 * @param pResult Where to store the result. 281 282 */ 282 typedef DECLCALLBACK(int) FNDBGCOPUNARY(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);283 typedef DECLCALLBACK(int) FNDBGCOPUNARY(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 283 284 /** Pointer to a unary operator handler function. */ 284 285 typedef FNDBGCOPUNARY *PFNDBGCOPUNARY; … … 404 405 PCDBGCCMD dbgcRoutineLookup(PDBGC pDbgc, const char *pachName, size_t cchName, bool fExternal); 405 406 406 DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);407 DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);408 DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);409 DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);410 DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);407 DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 408 DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 409 DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 410 DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 411 DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 411 412 412 413 void dbgcInitCmdHlp(PDBGC pDbgc); -
trunk/src/VBox/Debugger/DBGCOps.cpp
r40076 r41546 37 37 * Internal Functions * 38 38 *******************************************************************************/ 39 static DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);40 static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);41 static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);42 static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);43 static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult);39 static DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 40 static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 41 static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 42 static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 43 static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult); 44 44 45 45 static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult); … … 244 244 * @param pResult Where to store the result. 245 245 */ 246 static DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)246 static DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 247 247 { 248 248 LogFlow(("dbgcOpMinus\n")); … … 289 289 * @param pResult Where to store the result. 290 290 */ 291 static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)291 static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 292 292 { 293 293 LogFlow(("dbgcOpPluss\n")); … … 323 323 * @param pResult Where to store the result. 324 324 */ 325 static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)325 static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 326 326 { 327 327 LogFlow(("dbgcOpBooleanNot\n")); … … 371 371 * @param pResult Where to store the result. 372 372 */ 373 static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)373 static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 374 374 { 375 375 LogFlow(("dbgcOpBitwiseNot\n")); … … 416 416 * @param pResult Where to store the result. 417 417 */ 418 static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)418 static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 419 419 { 420 420 LogFlow(("dbgcOpVar: %s\n", pArg->u.pszString)); … … 453 453 * @param pResult Where to store the result. 454 454 */ 455 DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)455 DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 456 456 { 457 457 LogFlow(("dbgcOpRegister: %s\n", pArg->u.pszString)); … … 463 463 && pArg->enmType != DBGCVAR_TYPE_SYMBOL) 464 464 return VERR_PARSE_INCORRECT_ARG_TYPE; 465 466 /* 467 * If the desired result is a symbol, pass the argument along unmodified. 468 * This is a great help for "r @eax" and such, since it will be translated to "r eax". 469 */ 470 if (enmCat == DBGCVAR_CAT_SYMBOL) 471 { 472 int rc = DBGFR3RegNmValidate(pDbgc->pVM, pDbgc->idCpu, pArg->u.pszString); 473 if (RT_SUCCESS(rc)) 474 DBGCVAR_INIT_STRING(pResult, pArg->u.pszString); 475 return rc; 476 } 465 477 466 478 /* … … 527 539 * @param pResult Where to store the result. 528 540 */ 529 DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)541 DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 530 542 { 531 543 LogFlow(("dbgcOpAddrFlat\n")); … … 545 557 * @param pResult Where to store the result. 546 558 */ 547 DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)559 DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 548 560 { 549 561 LogFlow(("dbgcOpAddrPhys\n")); … … 563 575 * @param pResult Where to store the result. 564 576 */ 565 DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)577 DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 566 578 { 567 579 LogFlow(("dbgcOpAddrPhys\n")); … … 580 592 * @param pResult Where to store the result. 581 593 */ 582 DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult)594 DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult) 583 595 { 584 596 LogFlow(("dbgcOpAddrHost\n")); … … 778 790 default: 779 791 *pResult = *pArg1; 780 rc = dbgcOpAddrFlat(pDbgc, pArg2, &Var);792 rc = dbgcOpAddrFlat(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 781 793 if (RT_FAILURE(rc)) 782 794 return rc; … … 800 812 break; 801 813 default: 802 rc = dbgcOpAddrFlat(pDbgc, pArg1, pResult);814 rc = dbgcOpAddrFlat(pDbgc, pArg1, DBGCVAR_CAT_ANY, pResult); 803 815 if (RT_FAILURE(rc)) 804 816 return rc; 805 rc = dbgcOpAddrFlat(pDbgc, pArg2, &Var);817 rc = dbgcOpAddrFlat(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 806 818 if (RT_FAILURE(rc)) 807 819 return rc; … … 822 834 default: 823 835 *pResult = *pArg1; 824 rc = dbgcOpAddrPhys(pDbgc, pArg2, &Var);836 rc = dbgcOpAddrPhys(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 825 837 if (RT_FAILURE(rc)) 826 838 return rc; … … 837 849 case DBGCVAR_TYPE_HC_FLAT: 838 850 *pResult = *pArg1; 839 rc = dbgcOpAddrHost(pDbgc, pArg2, &Var2);851 rc = dbgcOpAddrHost(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var2); 840 852 if (RT_FAILURE(rc)) 841 853 return rc; 842 rc = dbgcOpAddrFlat(pDbgc, &Var2, &Var);854 rc = dbgcOpAddrFlat(pDbgc, &Var2, DBGCVAR_CAT_ANY, &Var); 843 855 if (RT_FAILURE(rc)) 844 856 return rc; … … 851 863 case DBGCVAR_TYPE_HC_PHYS: 852 864 *pResult = *pArg1; 853 rc = dbgcOpAddrHostPhys(pDbgc, pArg2, &Var);865 rc = dbgcOpAddrHostPhys(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 854 866 if (RT_FAILURE(rc)) 855 867 return rc; … … 976 988 if (pOp) 977 989 { 978 int rc = pOp(pDbgc, pArg1, &Sym1);990 int rc = pOp(pDbgc, pArg1, DBGCVAR_CAT_ANY, &Sym1); 979 991 if (RT_FAILURE(rc)) 980 992 return rc; … … 1003 1015 default: 1004 1016 *pResult = *pArg1; 1005 rc = dbgcOpAddrFlat(pDbgc, pArg2, &Var);1017 rc = dbgcOpAddrFlat(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 1006 1018 if (RT_FAILURE(rc)) 1007 1019 return rc; … … 1025 1037 break; 1026 1038 default: 1027 rc = dbgcOpAddrFlat(pDbgc, pArg1, pResult);1039 rc = dbgcOpAddrFlat(pDbgc, pArg1, DBGCVAR_CAT_ANY, pResult); 1028 1040 if (RT_FAILURE(rc)) 1029 1041 return rc; 1030 rc = dbgcOpAddrFlat(pDbgc, pArg2, &Var);1042 rc = dbgcOpAddrFlat(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 1031 1043 if (RT_FAILURE(rc)) 1032 1044 return rc; … … 1047 1059 default: 1048 1060 *pResult = *pArg1; 1049 rc = dbgcOpAddrPhys(pDbgc, pArg2, &Var);1061 rc = dbgcOpAddrPhys(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 1050 1062 if (RT_FAILURE(rc)) 1051 1063 return rc; … … 1062 1074 case DBGCVAR_TYPE_HC_FLAT: 1063 1075 *pResult = *pArg1; 1064 rc = dbgcOpAddrHost(pDbgc, pArg2, &Var2);1076 rc = dbgcOpAddrHost(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var2); 1065 1077 if (RT_FAILURE(rc)) 1066 1078 return rc; 1067 rc = dbgcOpAddrFlat(pDbgc, &Var2, &Var);1079 rc = dbgcOpAddrFlat(pDbgc, &Var2, DBGCVAR_CAT_ANY, &Var); 1068 1080 if (RT_FAILURE(rc)) 1069 1081 return rc; … … 1076 1088 case DBGCVAR_TYPE_HC_PHYS: 1077 1089 *pResult = *pArg1; 1078 rc = dbgcOpAddrHostPhys(pDbgc, pArg2, &Var);1090 rc = dbgcOpAddrHostPhys(pDbgc, pArg2, DBGCVAR_CAT_ANY, &Var); 1079 1091 if (RT_FAILURE(rc)) 1080 1092 return rc; -
trunk/src/VBox/Debugger/DBGConsole.cpp
r35829 r41546 216 216 DBGCVAR Var; 217 217 DBGCVAR_INIT_STRING(&Var, pszSymbol); 218 rc = dbgcOpRegister(pDbgc, &Var, pResult);218 rc = dbgcOpRegister(pDbgc, &Var, DBGCVAR_CAT_ANY, pResult); 219 219 if (RT_SUCCESS(rc)) 220 220 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, &Var, enmType, false /*fConvSyms*/, pResult); -
trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
r38838 r41546 194 194 { 195 195 return VERR_INTERNAL_ERROR; 196 } 197 VMMR3DECL(int) DBGFR3RegNmValidate(PVM pVM, VMCPUID idDefCpu, const char *pszReg) 198 { 199 return VINF_SUCCESS; 196 200 } 197 201 VMMR3DECL(int) DBGFR3RegCpuQueryU8( PVM pVM, VMCPUID idCpu, DBGFREG enmReg, uint8_t *pu8)
Note:
See TracChangeset
for help on using the changeset viewer.