diff options
Diffstat (limited to 'src/VBox/Debugger/DBGCOps.cpp')
-rw-r--r-- | src/VBox/Debugger/DBGCOps.cpp | 408 |
1 files changed, 41 insertions, 367 deletions
diff --git a/src/VBox/Debugger/DBGCOps.cpp b/src/VBox/Debugger/DBGCOps.cpp index ed8f18996..fac77b38d 100644 --- a/src/VBox/Debugger/DBGCOps.cpp +++ b/src/VBox/Debugger/DBGCOps.cpp @@ -1,10 +1,10 @@ -/* $Id: DBGCOps.cpp $ */ +/* $Id: DBGCOps.cpp 35637 2011-01-19 17:42:59Z vboxsync $ */ /** @file * DBGC - Debugger Console, Operators. */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2011 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -22,24 +22,13 @@ #define LOG_GROUP LOG_GROUP_DBGC #include <VBox/dbg.h> #include <VBox/vmm/dbgf.h> -#include <VBox/vmm/vm.h> -#include <VBox/vmm/vmm.h> -#include <VBox/vmm/mm.h> -#include <VBox/vmm/pgm.h> -#include <VBox/vmm/selm.h> -#include <VBox/dis.h> #include <VBox/param.h> #include <VBox/err.h> #include <VBox/log.h> -#include <iprt/alloc.h> -#include <iprt/alloca.h> -#include <iprt/string.h> #include <iprt/assert.h> -#include <iprt/ctype.h> - -#include <stdlib.h> -#include <stdio.h> +#include <iprt/mem.h> +#include <iprt/string.h> #include "DBGCInternal.h" @@ -52,7 +41,6 @@ static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResu static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); -static DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult); static DECLCALLBACK(int) dbgcOpMult(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult); @@ -123,9 +111,6 @@ static DECLCALLBACK(int) dbgcOpRangeTo(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR p case DBGCVAR_TYPE_HC_FLAT: \ (pResult)->u.pvHCFlat = (void *)((uintptr_t)(pResult)->u.pvHCFlat Operator u64Right); \ break; \ - case DBGCVAR_TYPE_HC_FAR: \ - (pResult)->u.HCFar.off = (pResult)->u.HCFar.off Operator u64Right; \ - break; \ case DBGCVAR_TYPE_HC_PHYS: \ (pResult)->u.HCPhys = (pResult)->u.HCPhys Operator u64Right; \ break; \ @@ -170,32 +155,32 @@ const DBGCOP g_aOps[] = { /* szName is initialized as a 4 char array because of M$C elsewise optimizing it away in /Ox mode (the 'const char' vs 'char' problem). */ /* szName, cchName, fBinary, iPrecedence, pfnHandlerUnary, pfnHandlerBitwise */ - { {'-'}, 1, false, 1, dbgcOpMinus, NULL, "Unary minus." }, - { {'+'}, 1, false, 1, dbgcOpPluss, NULL, "Unary plus." }, - { {'!'}, 1, false, 1, dbgcOpBooleanNot, NULL, "Boolean not." }, - { {'~'}, 1, false, 1, dbgcOpBitwiseNot, NULL, "Bitwise complement." }, - { {':'}, 1, true, 2, NULL, dbgcOpAddrFar, "Far pointer." }, - { {'%'}, 1, false, 3, dbgcOpAddrFlat, NULL, "Flat address." }, - { {'%','%'}, 2, false, 3, dbgcOpAddrPhys, NULL, "Physical address." }, - { {'#'}, 1, false, 3, dbgcOpAddrHost, NULL, "Flat host address." }, - { {'#','%','%'}, 3, false, 3, dbgcOpAddrHostPhys, NULL, "Physical host address." }, - { {'$'}, 1, false, 3, dbgcOpVar, NULL, "Reference a variable." }, - { {'@'}, 1, false, 3, dbgcOpRegister, NULL, "Reference a register." }, - { {'*'}, 1, true, 10, NULL, dbgcOpMult, "Multiplication." }, - { {'/'}, 1, true, 11, NULL, dbgcOpDiv, "Division." }, - { {'%'}, 1, true, 12, NULL, dbgcOpMod, "Modulus." }, - { {'+'}, 1, true, 13, NULL, dbgcOpAdd, "Addition." }, - { {'-'}, 1, true, 14, NULL, dbgcOpSub, "Subtraction." }, - { {'<','<'}, 2, true, 15, NULL, dbgcOpBitwiseShiftLeft, "Bitwise left shift." }, - { {'>','>'}, 2, true, 16, NULL, dbgcOpBitwiseShiftRight, "Bitwise right shift." }, - { {'&'}, 1, true, 17, NULL, dbgcOpBitwiseAnd, "Bitwise and." }, - { {'^'}, 1, true, 18, NULL, dbgcOpBitwiseXor, "Bitwise exclusiv or." }, - { {'|'}, 1, true, 19, NULL, dbgcOpBitwiseOr, "Bitwise inclusive or." }, - { {'&','&'}, 2, true, 20, NULL, dbgcOpBooleanAnd, "Boolean and." }, - { {'|','|'}, 2, true, 21, NULL, dbgcOpBooleanOr, "Boolean or." }, - { {'L'}, 1, true, 22, NULL, dbgcOpRangeLength, "Range elements." }, - { {'L','B'}, 2, true, 23, NULL, dbgcOpRangeLengthBytes, "Range bytes." }, - { {'T'}, 1, true, 24, NULL, dbgcOpRangeTo, "Range to." } + { {'-'}, 1, false, 1, dbgcOpMinus, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Unary minus." }, + { {'+'}, 1, false, 1, dbgcOpPluss, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Unary plus." }, + { {'!'}, 1, false, 1, dbgcOpBooleanNot, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Boolean not." }, + { {'~'}, 1, false, 1, dbgcOpBitwiseNot, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Bitwise complement." }, + { {':'}, 1, true, 2, NULL, dbgcOpAddrFar, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Far pointer." }, + { {'%'}, 1, false, 3, dbgcOpAddrFlat, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Flat address." }, + { {'%','%'}, 2, false, 3, dbgcOpAddrPhys, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Physical address." }, + { {'#'}, 1, false, 3, dbgcOpAddrHost, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Flat host address." }, + { {'#','%','%'}, 3, false, 3, dbgcOpAddrHostPhys, NULL, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Physical host address." }, + { {'$'}, 1, false, 3, dbgcOpVar, NULL, DBGCVAR_CAT_STRING, DBGCVAR_CAT_ANY, "Reference a variable." }, + { {'@'}, 1, false, 3, dbgcOpRegister, NULL, DBGCVAR_CAT_STRING, DBGCVAR_CAT_ANY, "Reference a register." }, + { {'*'}, 1, true, 10, NULL, dbgcOpMult, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Multiplication." }, + { {'/'}, 1, true, 11, NULL, dbgcOpDiv, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Division." }, + { {'%'}, 1, true, 12, NULL, dbgcOpMod, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Modulus." }, + { {'+'}, 1, true, 13, NULL, dbgcOpAdd, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Addition." }, + { {'-'}, 1, true, 14, NULL, dbgcOpSub, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Subtraction." }, + { {'<','<'}, 2, true, 15, NULL, dbgcOpBitwiseShiftLeft, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Bitwise left shift." }, + { {'>','>'}, 2, true, 16, NULL, dbgcOpBitwiseShiftRight, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Bitwise right shift." }, + { {'&'}, 1, true, 17, NULL, dbgcOpBitwiseAnd, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Bitwise and." }, + { {'^'}, 1, true, 18, NULL, dbgcOpBitwiseXor, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Bitwise exclusiv or." }, + { {'|'}, 1, true, 19, NULL, dbgcOpBitwiseOr, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Bitwise inclusive or." }, + { {'&','&'}, 2, true, 20, NULL, dbgcOpBooleanAnd, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Boolean and." }, + { {'|','|'}, 2, true, 21, NULL, dbgcOpBooleanOr, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Boolean or." }, + { {'L'}, 1, true, 22, NULL, dbgcOpRangeLength, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Range elements." }, + { {'L','B'}, 2, true, 23, NULL, dbgcOpRangeLengthBytes, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Range bytes." }, + { {'T'}, 1, true, 24, NULL, dbgcOpRangeTo, DBGCVAR_CAT_ANY, DBGCVAR_CAT_ANY, "Range to." } }; /** Number of operators in the operator array. */ @@ -227,9 +212,6 @@ static int dbgcOpHelperGetNumber(PDBGC pDbgc, PCDBGCVAR pArg, uint64_t *pu64Ret) case DBGCVAR_TYPE_HC_FLAT: *pu64Ret = (uintptr_t)Var.u.pvHCFlat; break; - case DBGCVAR_TYPE_HC_FAR: - *pu64Ret = Var.u.HCFar.off; - break; case DBGCVAR_TYPE_HC_PHYS: *pu64Ret = Var.u.HCPhys; break; @@ -279,9 +261,6 @@ static DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResu case DBGCVAR_TYPE_HC_FLAT: pResult->u.pvHCFlat = (void *) -(intptr_t)pResult->u.pvHCFlat; break; - case DBGCVAR_TYPE_HC_FAR: - pResult->u.HCFar.off = -(int32_t)pResult->u.HCFar.off; - break; case DBGCVAR_TYPE_HC_PHYS: pResult->u.HCPhys = (RTHCPHYS) -(int64_t)pResult->u.HCPhys; break; @@ -319,7 +298,6 @@ static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResu case DBGCVAR_TYPE_GC_FAR: case DBGCVAR_TYPE_GC_PHYS: case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: case DBGCVAR_TYPE_NUMBER: break; @@ -362,9 +340,6 @@ static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR case DBGCVAR_TYPE_HC_FLAT: pResult->u.u64Number = !pResult->u.pvHCFlat; break; - case DBGCVAR_TYPE_HC_FAR: - pResult->u.u64Number = !pResult->u.HCFar.off && pResult->u.HCFar.sel <= 3; - break; case DBGCVAR_TYPE_HC_PHYS: pResult->u.u64Number = !pResult->u.HCPhys; break; @@ -413,9 +388,6 @@ static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR case DBGCVAR_TYPE_HC_FLAT: pResult->u.pvHCFlat = (void *)~(uintptr_t)pResult->u.pvHCFlat; break; - case DBGCVAR_TYPE_HC_FAR: - pResult->u.HCFar.off= ~pResult->u.HCFar.off; - break; case DBGCVAR_TYPE_HC_PHYS: pResult->u.HCPhys = ~pResult->u.HCPhys; break; @@ -480,14 +452,15 @@ static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult * @param pArg The argument. * @param pResult Where to store the result. */ -static DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) +DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) { LogFlow(("dbgcOpRegister: %s\n", pArg->u.pszString)); /* * Parse sanity. */ - if (pArg->enmType != DBGCVAR_TYPE_STRING) + if ( pArg->enmType != DBGCVAR_TYPE_STRING + && pArg->enmType != DBGCVAR_TYPE_SYMBOL) return VERR_PARSE_INCORRECT_ARG_TYPE; /* @@ -498,7 +471,6 @@ static DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pR int rc = DBGFR3RegNmQuery(pDbgc->pVM, pDbgc->idCpu, pArg->u.pszString, &Value, &enmType); if (RT_SUCCESS(rc)) { - rc = VERR_INTERNAL_ERROR_5; switch (enmType) { case DBGFREGVALTYPE_U8: @@ -538,6 +510,7 @@ static DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pR case DBGFREGVALTYPE_32BIT_HACK: break; } + rc = VERR_INTERNAL_ERROR_5; } return rc; } @@ -556,58 +529,8 @@ static DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pR DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) { LogFlow(("dbgcOpAddrFlat\n")); - int rc; - *pResult = *pArg; - - switch (pArg->enmType) - { - case DBGCVAR_TYPE_GC_FLAT: - return VINF_SUCCESS; - - case DBGCVAR_TYPE_GC_FAR: - { - Assert(pDbgc->pVM); - DBGFADDRESS Address; - rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); - if (RT_SUCCESS(rc)) - { - pResult->enmType = DBGCVAR_TYPE_GC_FLAT; - pResult->u.GCFlat = Address.FlatPtr; - return VINF_SUCCESS; - } - return VERR_PARSE_CONVERSION_FAILED; - } - - case DBGCVAR_TYPE_GC_PHYS: - //rc = MMR3PhysGCPhys2GCVirtEx(pDbgc->pVM, pResult->u.GCPhys, ..., &pResult->u.GCFlat); - yea, sure. - return VERR_PARSE_INCORRECT_ARG_TYPE; - - case DBGCVAR_TYPE_HC_FLAT: - return VINF_SUCCESS; - - case DBGCVAR_TYPE_HC_FAR: - return VERR_PARSE_INCORRECT_ARG_TYPE; - - case DBGCVAR_TYPE_HC_PHYS: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_HC_FLAT; - rc = MMR3HCPhys2HCVirt(pDbgc->pVM, pResult->u.HCPhys, &pResult->u.pvHCFlat); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_NUMBER: - pResult->enmType = DBGCVAR_TYPE_GC_FLAT; - pResult->u.GCFlat = (RTGCPTR)pResult->u.u64Number; - return VINF_SUCCESS; - - case DBGCVAR_TYPE_STRING: - return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_GC_FLAT, pResult); - - case DBGCVAR_TYPE_UNKNOWN: - default: - return VERR_PARSE_INCORRECT_ARG_TYPE; - } + DBGCVARTYPE enmType = DBGCVAR_ISHCPOINTER(pArg->enmType) ? DBGCVAR_TYPE_HC_FLAT : DBGCVAR_TYPE_GC_FLAT; + return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, enmType, true /*fConvSyms*/, pResult); } @@ -624,65 +547,8 @@ DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) { LogFlow(("dbgcOpAddrPhys\n")); - int rc; - DBGFADDRESS Address; - - *pResult = *pArg; - switch (pArg->enmType) - { - case DBGCVAR_TYPE_GC_FLAT: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_GC_PHYS; - rc = DBGFR3AddrToPhys(pDbgc->pVM, pDbgc->idCpu, - DBGFR3AddrFromFlat(pDbgc->pVM, &Address, pArg->u.GCFlat), - &pResult->u.GCPhys); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_GC_FAR: - Assert(pDbgc->pVM); - rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); - if (RT_SUCCESS(rc)) - { - pResult->enmType = DBGCVAR_TYPE_GC_PHYS; - rc = DBGFR3AddrToPhys(pDbgc->pVM, pDbgc->idCpu, &Address, &pResult->u.GCPhys); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - } - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_GC_PHYS: - return VINF_SUCCESS; - - case DBGCVAR_TYPE_HC_FLAT: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_GC_PHYS; - rc = PGMR3DbgR3Ptr2GCPhys(pDbgc->pVM, pArg->u.pvHCFlat, &pResult->u.GCPhys); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - /** @todo more memory types! */ - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_HC_FAR: - return VERR_PARSE_INCORRECT_ARG_TYPE; - - case DBGCVAR_TYPE_HC_PHYS: - return VINF_SUCCESS; - - case DBGCVAR_TYPE_NUMBER: - pResult->enmType = DBGCVAR_TYPE_GC_PHYS; - pResult->u.GCPhys = (RTGCPHYS)pResult->u.u64Number; - return VINF_SUCCESS; - - case DBGCVAR_TYPE_STRING: - return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_GC_PHYS, pResult); - - case DBGCVAR_TYPE_UNKNOWN: - default: - return VERR_PARSE_INCORRECT_ARG_TYPE; - } - return VINF_SUCCESS; + DBGCVARTYPE enmType = DBGCVAR_ISHCPOINTER(pArg->enmType) ? DBGCVAR_TYPE_HC_PHYS : DBGCVAR_TYPE_GC_PHYS; + return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, enmType, true /*fConvSyms*/, pResult); } @@ -699,74 +565,7 @@ DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) { LogFlow(("dbgcOpAddrPhys\n")); - DBGFADDRESS Address; - int rc; - - *pResult = *pArg; - switch (pArg->enmType) - { - case DBGCVAR_TYPE_GC_FLAT: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_HC_PHYS; - rc = DBGFR3AddrToHostPhys(pDbgc->pVM, pDbgc->idCpu, - DBGFR3AddrFromFlat(pDbgc->pVM, &Address, pArg->u.GCFlat), - &pResult->u.GCPhys); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_GC_FAR: - { - Assert(pDbgc->pVM); - rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); - if (RT_SUCCESS(rc)) - { - pResult->enmType = DBGCVAR_TYPE_HC_PHYS; - rc = DBGFR3AddrToHostPhys(pDbgc->pVM, pDbgc->idCpu, &Address, &pResult->u.GCPhys); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - } - return VERR_PARSE_CONVERSION_FAILED; - } - - case DBGCVAR_TYPE_GC_PHYS: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_HC_PHYS; - rc = DBGFR3AddrToHostPhys(pDbgc->pVM, pDbgc->idCpu, - DBGFR3AddrFromPhys(pDbgc->pVM, &Address, pArg->u.GCPhys), - &pResult->u.GCPhys); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_HC_FLAT: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_HC_PHYS; - rc = PGMR3DbgR3Ptr2HCPhys(pDbgc->pVM, pArg->u.pvHCFlat, &pResult->u.HCPhys); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - /** @todo more memory types! */ - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_HC_FAR: - return VERR_PARSE_INCORRECT_ARG_TYPE; - - case DBGCVAR_TYPE_HC_PHYS: - return VINF_SUCCESS; - - case DBGCVAR_TYPE_NUMBER: - pResult->enmType = DBGCVAR_TYPE_HC_PHYS; - pResult->u.HCPhys = (RTGCPHYS)pResult->u.u64Number; - return VINF_SUCCESS; - - case DBGCVAR_TYPE_STRING: - return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_HC_PHYS, pResult); - - case DBGCVAR_TYPE_UNKNOWN: - default: - return VERR_PARSE_INCORRECT_ARG_TYPE; - } - return VINF_SUCCESS; + return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, DBGCVAR_TYPE_HC_PHYS, true /*fConvSyms*/, pResult); } @@ -783,67 +582,7 @@ DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResu DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, PDBGCVAR pResult) { LogFlow(("dbgcOpAddrHost\n")); - int rc; - DBGFADDRESS Address; - - *pResult = *pArg; - switch (pArg->enmType) - { - case DBGCVAR_TYPE_GC_FLAT: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_HC_FLAT; - rc = DBGFR3AddrToVolatileR3Ptr(pDbgc->pVM, pDbgc->idCpu, - DBGFR3AddrFromFlat(pDbgc->pVM, &Address, pArg->u.GCFlat), - false /*fReadOnly */, - &pResult->u.pvHCFlat); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_GC_FAR: - Assert(pDbgc->pVM); - rc = DBGFR3AddrFromSelOff(pDbgc->pVM, pDbgc->idCpu, &Address, pArg->u.GCFar.sel, pArg->u.GCFar.off); - if (RT_SUCCESS(rc)) - { - pResult->enmType = DBGCVAR_TYPE_HC_FLAT; - rc = DBGFR3AddrToVolatileR3Ptr(pDbgc->pVM, pDbgc->idCpu, &Address, - false /*fReadOnly*/, &pResult->u.pvHCFlat); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - } - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_GC_PHYS: - Assert(pDbgc->pVM); - pResult->enmType = DBGCVAR_TYPE_HC_FLAT; - rc = DBGFR3AddrToVolatileR3Ptr(pDbgc->pVM, pDbgc->idCpu, - DBGFR3AddrFromPhys(pDbgc->pVM, &Address, pArg->u.GCPhys), - false /*fReadOnly */, - &pResult->u.pvHCFlat); - if (RT_SUCCESS(rc)) - return VINF_SUCCESS; - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_HC_FLAT: - return VINF_SUCCESS; - - case DBGCVAR_TYPE_HC_FAR: - case DBGCVAR_TYPE_HC_PHYS: - /** @todo !*/ - return VERR_PARSE_CONVERSION_FAILED; - - case DBGCVAR_TYPE_NUMBER: - pResult->enmType = DBGCVAR_TYPE_HC_FLAT; - pResult->u.pvHCFlat = (void *)(uintptr_t)pResult->u.u64Number; - return VINF_SUCCESS; - - case DBGCVAR_TYPE_STRING: - return dbgcSymbolGet(pDbgc, pArg->u.pszString, DBGCVAR_TYPE_HC_FLAT, pResult); - - case DBGCVAR_TYPE_UNKNOWN: - default: - return VERR_PARSE_INCORRECT_ARG_TYPE; - } + return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pArg, DBGCVAR_TYPE_HC_FLAT, true /*fConvSyms*/, pResult); } @@ -877,7 +616,6 @@ static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR p case DBGCVAR_TYPE_GC_FAR: case DBGCVAR_TYPE_GC_PHYS: case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: case DBGCVAR_TYPE_UNKNOWN: default: @@ -894,7 +632,7 @@ static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR p break; case DBGCVAR_TYPE_HC_FLAT: - pResult->u.HCFar.off = pArg2->u.GCFlat; + pResult->u.pvHCFlat = (void *)(uintptr_t)pArg2->u.GCFlat; pResult->enmType = DBGCVAR_TYPE_GC_FAR; break; @@ -916,7 +654,6 @@ static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR p case DBGCVAR_TYPE_GC_FAR: case DBGCVAR_TYPE_GC_PHYS: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: case DBGCVAR_TYPE_UNKNOWN: default: @@ -1036,7 +773,6 @@ static DECLCALLBACK(int) dbgcOpAdd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 switch (pArg2->enmType) { case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: return VERR_PARSE_INVALID_OPERATION; default: @@ -1056,7 +792,6 @@ static DECLCALLBACK(int) dbgcOpAdd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 switch (pArg2->enmType) { case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: return VERR_PARSE_INVALID_OPERATION; case DBGCVAR_TYPE_NUMBER: @@ -1082,7 +817,6 @@ static DECLCALLBACK(int) dbgcOpAdd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 switch (pArg2->enmType) { case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: return VERR_PARSE_INVALID_OPERATION; default: @@ -1112,32 +846,6 @@ static DECLCALLBACK(int) dbgcOpAdd(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 break; /* - * HC Far - */ - case DBGCVAR_TYPE_HC_FAR: - switch (pArg2->enmType) - { - case DBGCVAR_TYPE_NUMBER: - *pResult = *pArg1; - pResult->u.HCFar.off += (uintptr_t)pArg2->u.u64Number; - break; - - default: - rc = dbgcOpAddrFlat(pDbgc, pArg1, pResult); - if (RT_FAILURE(rc)) - return rc; - rc = dbgcOpAddrHost(pDbgc, pArg2, &Var2); - if (RT_FAILURE(rc)) - return rc; - rc = dbgcOpAddrFlat(pDbgc, &Var2, &Var); - if (RT_FAILURE(rc)) - return rc; - pResult->u.pvHCFlat = (char *)pResult->u.pvHCFlat + (uintptr_t)Var.u.pvHCFlat; - break; - } - break; - - /* * HC Phys */ case DBGCVAR_TYPE_HC_PHYS: @@ -1225,9 +933,6 @@ static DECLCALLBACK(int) dbgcOpSub(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 case DBGCVAR_TYPE_GC_FAR: enmType = DBGCVAR_TYPE_GC_FLAT; break; - case DBGCVAR_TYPE_HC_FAR: - enmType = DBGCVAR_TYPE_HC_FLAT; - break; default: case DBGCVAR_TYPE_STRING: @@ -1255,7 +960,6 @@ static DECLCALLBACK(int) dbgcOpSub(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 case DBGCVAR_TYPE_GC_PHYS: pOp = dbgcOpAddrPhys; break; - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_FLAT: pOp = dbgcOpAddrHost; break; @@ -1294,7 +998,6 @@ static DECLCALLBACK(int) dbgcOpSub(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 switch (pArg2->enmType) { case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: return VERR_PARSE_INVALID_OPERATION; default: @@ -1314,7 +1017,6 @@ static DECLCALLBACK(int) dbgcOpSub(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 switch (pArg2->enmType) { case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: return VERR_PARSE_INVALID_OPERATION; case DBGCVAR_TYPE_NUMBER: @@ -1340,7 +1042,6 @@ static DECLCALLBACK(int) dbgcOpSub(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 switch (pArg2->enmType) { case DBGCVAR_TYPE_HC_FLAT: - case DBGCVAR_TYPE_HC_FAR: case DBGCVAR_TYPE_HC_PHYS: return VERR_PARSE_INVALID_OPERATION; default: @@ -1370,32 +1071,6 @@ static DECLCALLBACK(int) dbgcOpSub(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2 break; /* - * HC Far - */ - case DBGCVAR_TYPE_HC_FAR: - switch (pArg2->enmType) - { - case DBGCVAR_TYPE_NUMBER: - *pResult = *pArg1; - pResult->u.HCFar.off -= (uintptr_t)pArg2->u.u64Number; - break; - - default: - rc = dbgcOpAddrFlat(pDbgc, pArg1, pResult); - if (RT_FAILURE(rc)) - return rc; - rc = dbgcOpAddrHost(pDbgc, pArg2, &Var2); - if (RT_FAILURE(rc)) - return rc; - rc = dbgcOpAddrFlat(pDbgc, &Var2, &Var); - if (RT_FAILURE(rc)) - return rc; - pResult->u.pvHCFlat = (char *)pResult->u.pvHCFlat - (uintptr_t)Var.u.pvHCFlat; - break; - } - break; - - /* * HC Phys */ case DBGCVAR_TYPE_HC_PHYS: @@ -1688,7 +1363,6 @@ static DECLCALLBACK(int) dbgcOpRangeTo(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR p case DBGCVAR_TYPE_GC_FAR: case DBGCVAR_TYPE_STRING: - case DBGCVAR_TYPE_HC_FAR: default: AssertMsgFailed(("Impossible!\n")); return VERR_PARSE_INVALID_OPERATION; |