Changeset 35627 in vbox
- Timestamp:
- Jan 19, 2011 1:22:02 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 69531
- Location:
- trunk/src/VBox/Debugger
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCCmdHlp.cpp
r35626 r35627 1163 1163 case DBGCVAR_TYPE_NUMBER: 1164 1164 if (fConvSyms) 1165 return dbgcSymbolGet(pDbgc, InVar.u.pszString, enmToType, pResult); 1165 { 1166 rc = dbgcSymbolGet(pDbgc, InVar.u.pszString, enmToType, pResult); 1167 if (RT_SUCCESS(rc)) 1168 { 1169 if (InVar.enmRangeType != DBGCVAR_RANGE_NONE) 1170 { 1171 pResult->enmRangeType = InVar.enmRangeType; 1172 pResult->u64Range = InVar.u64Range; 1173 } 1174 return VINF_SUCCESS; 1175 } 1176 } 1166 1177 return VERR_PARSE_INCORRECT_ARG_TYPE; 1167 1178 -
trunk/src/VBox/Debugger/DBGCOps.cpp
r35626 r35627 471 471 * Parse sanity. 472 472 */ 473 if (pArg->enmType != DBGCVAR_TYPE_STRING) 473 if ( pArg->enmType != DBGCVAR_TYPE_STRING 474 && pArg->enmType != DBGCVAR_TYPE_SYMBOL) 474 475 return VERR_PARSE_INCORRECT_ARG_TYPE; 475 476 … … 482 483 if (RT_SUCCESS(rc)) 483 484 { 484 rc = VERR_INTERNAL_ERROR_5;485 485 switch (enmType) 486 486 { … … 522 522 break; 523 523 } 524 rc = VERR_INTERNAL_ERROR_5; 524 525 } 525 526 return rc; … … 540 541 { 541 542 LogFlow(("dbgcOpAddrFlat\n")); 542 int rc; 543 *pResult = *pArg; 544 545 switch (pArg->enmType) 546 { 547 case DBGCVAR_TYPE_GC_FLAT: 548 return VINF_SUCCESS; 549 550 case DBGCVAR_TYPE_GC_FAR: 551 { 552 Assert(pDbgc->pVM); 553 DBGFADDRESS Address; 554 rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); 555 if (RT_SUCCESS(rc)) 556 { 557 pResult->enmType = DBGCVAR_TYPE_GC_FLAT; 558 pResult->u.GCFlat = Address.FlatPtr; 559 return VINF_SUCCESS; 560 } 561 return VERR_PARSE_CONVERSION_FAILED; 562 } 563 564 case DBGCVAR_TYPE_GC_PHYS: 565 //rc = MMR3PhysGCPhys2GCVirtEx(pDbgc->pVM, pResult->u.GCPhys, ..., &pResult->u.GCFlat); - yea, sure. 566 return VERR_PARSE_INCORRECT_ARG_TYPE; 567 568 case DBGCVAR_TYPE_HC_FLAT: 569 return VINF_SUCCESS; 570 571 case DBGCVAR_TYPE_HC_PHYS: 572 Assert(pDbgc->pVM); 573 pResult->enmType = DBGCVAR_TYPE_HC_FLAT; 574 rc = MMR3HCPhys2HCVirt(pDbgc->pVM, pResult->u.HCPhys, &pResult->u.pvHCFlat); 575 if (RT_SUCCESS(rc)) 576 return VINF_SUCCESS; 577 return VERR_PARSE_CONVERSION_FAILED; 578 579 case DBGCVAR_TYPE_NUMBER: 580 pResult->enmType = DBGCVAR_TYPE_GC_FLAT; 581 pResult->u.GCFlat = (RTGCPTR)pResult->u.u64Number; 582 return VINF_SUCCESS; 583 584 case DBGCVAR_TYPE_STRING: 585 return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_GC_FLAT, pResult); 586 587 case DBGCVAR_TYPE_UNKNOWN: 588 default: 589 return VERR_PARSE_INCORRECT_ARG_TYPE; 590 } 543 DBGCVARTYPE enmType = DBGCVAR_ISHCPOINTER(pArg->enmType) ? DBGCVAR_TYPE_HC_FLAT : DBGCVAR_TYPE_GC_FLAT; 544 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, enmType, true /*fConvSyms*/, pResult); 591 545 } 592 546 … … 605 559 { 606 560 LogFlow(("dbgcOpAddrPhys\n")); 607 int rc; 608 DBGFADDRESS Address; 609 610 *pResult = *pArg; 611 switch (pArg->enmType) 612 { 613 case DBGCVAR_TYPE_GC_FLAT: 614 Assert(pDbgc->pVM); 615 pResult->enmType = DBGCVAR_TYPE_GC_PHYS; 616 rc = DBGFR3AddrToPhys(pDbgc->pVM, pDbgc->idCpu, 617 DBGFR3AddrFromFlat(pDbgc->pVM, &Address, pArg->u.GCFlat), 618 &pResult->u.GCPhys); 619 if (RT_SUCCESS(rc)) 620 return VINF_SUCCESS; 621 return VERR_PARSE_CONVERSION_FAILED; 622 623 case DBGCVAR_TYPE_GC_FAR: 624 Assert(pDbgc->pVM); 625 rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); 626 if (RT_SUCCESS(rc)) 627 { 628 pResult->enmType = DBGCVAR_TYPE_GC_PHYS; 629 rc = DBGFR3AddrToPhys(pDbgc->pVM, pDbgc->idCpu, &Address, &pResult->u.GCPhys); 630 if (RT_SUCCESS(rc)) 631 return VINF_SUCCESS; 632 } 633 return VERR_PARSE_CONVERSION_FAILED; 634 635 case DBGCVAR_TYPE_GC_PHYS: 636 return VINF_SUCCESS; 637 638 case DBGCVAR_TYPE_HC_FLAT: 639 Assert(pDbgc->pVM); 640 pResult->enmType = DBGCVAR_TYPE_GC_PHYS; 641 rc = PGMR3DbgR3Ptr2GCPhys(pDbgc->pVM, pArg->u.pvHCFlat, &pResult->u.GCPhys); 642 if (RT_SUCCESS(rc)) 643 return VINF_SUCCESS; 644 /** @todo more memory types! */ 645 return VERR_PARSE_CONVERSION_FAILED; 646 647 case DBGCVAR_TYPE_HC_PHYS: 648 return VINF_SUCCESS; 649 650 case DBGCVAR_TYPE_NUMBER: 651 pResult->enmType = DBGCVAR_TYPE_GC_PHYS; 652 pResult->u.GCPhys = (RTGCPHYS)pResult->u.u64Number; 653 return VINF_SUCCESS; 654 655 case DBGCVAR_TYPE_STRING: 656 return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_GC_PHYS, pResult); 657 658 case DBGCVAR_TYPE_UNKNOWN: 659 default: 660 return VERR_PARSE_INCORRECT_ARG_TYPE; 661 } 662 return VINF_SUCCESS; 561 DBGCVARTYPE enmType = DBGCVAR_ISHCPOINTER(pArg->enmType) ? DBGCVAR_TYPE_HC_PHYS : DBGCVAR_TYPE_GC_PHYS; 562 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, enmType, true /*fConvSyms*/, pResult); 663 563 } 664 564 … … 677 577 { 678 578 LogFlow(("dbgcOpAddrPhys\n")); 679 DBGFADDRESS Address; 680 int rc; 681 682 *pResult = *pArg; 683 switch (pArg->enmType) 684 { 685 case DBGCVAR_TYPE_GC_FLAT: 686 Assert(pDbgc->pVM); 687 pResult->enmType = DBGCVAR_TYPE_HC_PHYS; 688 rc = DBGFR3AddrToHostPhys(pDbgc->pVM, pDbgc->idCpu, 689 DBGFR3AddrFromFlat(pDbgc->pVM, &Address, pArg->u.GCFlat), 690 &pResult->u.GCPhys); 691 if (RT_SUCCESS(rc)) 692 return VINF_SUCCESS; 693 return VERR_PARSE_CONVERSION_FAILED; 694 695 case DBGCVAR_TYPE_GC_FAR: 696 { 697 Assert(pDbgc->pVM); 698 rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); 699 if (RT_SUCCESS(rc)) 700 { 701 pResult->enmType = DBGCVAR_TYPE_HC_PHYS; 702 rc = DBGFR3AddrToHostPhys(pDbgc->pVM, pDbgc->idCpu, &Address, &pResult->u.GCPhys); 703 if (RT_SUCCESS(rc)) 704 return VINF_SUCCESS; 705 } 706 return VERR_PARSE_CONVERSION_FAILED; 707 } 708 709 case DBGCVAR_TYPE_GC_PHYS: 710 Assert(pDbgc->pVM); 711 pResult->enmType = DBGCVAR_TYPE_HC_PHYS; 712 rc = DBGFR3AddrToHostPhys(pDbgc->pVM, pDbgc->idCpu, 713 DBGFR3AddrFromPhys(pDbgc->pVM, &Address, pArg->u.GCPhys), 714 &pResult->u.GCPhys); 715 if (RT_SUCCESS(rc)) 716 return VINF_SUCCESS; 717 return VERR_PARSE_CONVERSION_FAILED; 718 719 case DBGCVAR_TYPE_HC_FLAT: 720 Assert(pDbgc->pVM); 721 pResult->enmType = DBGCVAR_TYPE_HC_PHYS; 722 rc = PGMR3DbgR3Ptr2HCPhys(pDbgc->pVM, pArg->u.pvHCFlat, &pResult->u.HCPhys); 723 if (RT_SUCCESS(rc)) 724 return VINF_SUCCESS; 725 /** @todo more memory types! */ 726 return VERR_PARSE_CONVERSION_FAILED; 727 728 case DBGCVAR_TYPE_HC_PHYS: 729 return VINF_SUCCESS; 730 731 case DBGCVAR_TYPE_NUMBER: 732 pResult->enmType = DBGCVAR_TYPE_HC_PHYS; 733 pResult->u.HCPhys = (RTGCPHYS)pResult->u.u64Number; 734 return VINF_SUCCESS; 735 736 case DBGCVAR_TYPE_STRING: 737 return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_HC_PHYS, pResult); 738 739 case DBGCVAR_TYPE_UNKNOWN: 740 default: 741 return VERR_PARSE_INCORRECT_ARG_TYPE; 742 } 743 return VINF_SUCCESS; 579 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, DBGCVAR_TYPE_HC_PHYS, true /*fConvSyms*/, pResult); 744 580 } 745 581 … … 758 594 { 759 595 LogFlow(("dbgcOpAddrHost\n")); 760 int rc; 761 DBGFADDRESS Address; 762 763 *pResult = *pArg; 764 switch (pArg->enmType) 765 { 766 case DBGCVAR_TYPE_GC_FLAT: 767 Assert(pDbgc->pVM); 768 pResult->enmType = DBGCVAR_TYPE_HC_FLAT; 769 rc = DBGFR3AddrToVolatileR3Ptr(pDbgc->pVM, pDbgc->idCpu, 770 DBGFR3AddrFromFlat(pDbgc->pVM, &Address, pArg->u.GCFlat), 771 false /*fReadOnly */, 772 &pResult->u.pvHCFlat); 773 if (RT_SUCCESS(rc)) 774 return VINF_SUCCESS; 775 return VERR_PARSE_CONVERSION_FAILED; 776 777 case DBGCVAR_TYPE_GC_FAR: 778 Assert(pDbgc->pVM); 779 rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); 780 if (RT_SUCCESS(rc)) 781 { 782 pResult->enmType = DBGCVAR_TYPE_HC_FLAT; 783 rc = DBGFR3AddrToVolatileR3Ptr(pDbgc->pVM, pDbgc->idCpu, &Address, 784 false /*fReadOnly*/, &pResult->u.pvHCFlat); 785 if (RT_SUCCESS(rc)) 786 return VINF_SUCCESS; 787 } 788 return VERR_PARSE_CONVERSION_FAILED; 789 790 case DBGCVAR_TYPE_GC_PHYS: 791 Assert(pDbgc->pVM); 792 pResult->enmType = DBGCVAR_TYPE_HC_FLAT; 793 rc = DBGFR3AddrToVolatileR3Ptr(pDbgc->pVM, pDbgc->idCpu, 794 DBGFR3AddrFromPhys(pDbgc->pVM, &Address, pArg->u.GCPhys), 795 false /*fReadOnly */, 796 &pResult->u.pvHCFlat); 797 if (RT_SUCCESS(rc)) 798 return VINF_SUCCESS; 799 return VERR_PARSE_CONVERSION_FAILED; 800 801 case DBGCVAR_TYPE_HC_FLAT: 802 return VINF_SUCCESS; 803 804 case DBGCVAR_TYPE_HC_PHYS: 805 /** @todo !*/ 806 return VERR_PARSE_CONVERSION_FAILED; 807 808 case DBGCVAR_TYPE_NUMBER: 809 pResult->enmType = DBGCVAR_TYPE_HC_FLAT; 810 pResult->u.pvHCFlat = (void *)(uintptr_t)pResult->u.u64Number; 811 return VINF_SUCCESS; 812 813 case DBGCVAR_TYPE_STRING: 814 return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_HC_FLAT, pResult); 815 816 case DBGCVAR_TYPE_UNKNOWN: 817 default: 818 return VERR_PARSE_INCORRECT_ARG_TYPE; 819 } 596 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, DBGCVAR_TYPE_HC_FLAT, true /*fConvSyms*/, pResult); 820 597 } 821 598 -
trunk/src/VBox/Debugger/DBGConsole.cpp
r35626 r35627 202 202 * @param pDbgc The debug console instance. 203 203 * @param pszSymbol The symbol name. 204 * @param enmType The result type. 204 * @param enmType The result type. Specifying DBGCVAR_TYPE_GC_FAR may 205 * cause failure, avoid it. 205 206 * @param pResult Where to store the result. 206 207 */ … … 279 280 * Default return is a flat gc address. 280 281 */ 281 memset(pResult, 0, sizeof(*pResult)); 282 pResult->enmRangeType = Symbol.cb ? DBGCVAR_RANGE_BYTES : DBGCVAR_RANGE_NONE; 283 pResult->u64Range = Symbol.cb; 284 pResult->enmType = DBGCVAR_TYPE_GC_FLAT; 285 pResult->u.GCFlat = Symbol.Value; 286 DBGCVAR VarTmp; 282 DBGCVAR_INIT_GC_FLAT(pResult, Symbol.Value); 283 if (Symbol.cb) 284 DBGCVAR_SET_RANGE(pResult, DBGCVAR_RANGE_BYTES, Symbol.cb); 285 287 286 switch (enmType) 288 287 { 289 288 /* nothing to do. */ 290 289 case DBGCVAR_TYPE_GC_FLAT: 291 case DBGCVAR_TYPE_GC_FAR:292 290 case DBGCVAR_TYPE_ANY: 293 291 return VINF_SUCCESS; 292 293 /* impossible at the moment. */ 294 case DBGCVAR_TYPE_GC_FAR: 295 return VERR_PARSE_CONVERSION_FAILED; 294 296 295 297 /* simply make it numeric. */ … … 300 302 301 303 /* cast it. */ 302 303 304 case DBGCVAR_TYPE_GC_PHYS: 304 VarTmp = *pResult;305 return dbgcOpAddrPhys(pDbgc, &VarTmp, pResult);306 307 305 case DBGCVAR_TYPE_HC_FLAT: 308 VarTmp = *pResult;309 return dbgcOpAddrHost(pDbgc, &VarTmp, pResult);310 311 306 case DBGCVAR_TYPE_HC_PHYS: 312 VarTmp = *pResult; 313 return dbgcOpAddrHostPhys(pDbgc, &VarTmp, pResult); 307 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pResult, enmType, false /*fConvSyms*/, pResult); 314 308 315 309 default: … … 1420 1414 static int dbgcProcessCommands(PDBGC pDbgc, bool fNoExecute) 1421 1415 { 1416 /** @todo Replace this with a sh/ksh/csh/rexx like toplevel language that 1417 * allows doing function, loops, if, cases, and such. */ 1422 1418 int rc = 0; 1423 1419 while (pDbgc->cInputLines)
Note:
See TracChangeset
for help on using the changeset viewer.