VirtualBox

Changeset 59062 in vbox


Ignore:
Timestamp:
Dec 8, 2015 5:22:27 PM (9 years ago)
Author:
vboxsync
Message:

dbgcCmdEventCtrl: Started coding.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp

    r58903 r59062  
    39533953
    39543954
     3955typedef enum
     3956{
     3957    kDbgcSxEventKind_Plain,
     3958    kDbgcSxEventKind_Interrupt
     3959} DBGCSXEVENTKIND;
     3960static const struct
     3961{
     3962    DBGFEVENTTYPE   enmType;
     3963    const char     *pszName;
     3964    DBGCSXEVENTKIND enmKind;
     3965    bool            fDefault;
     3966}   g_aSxEvents[] =
     3967{
     3968    { DBGFEVENT_INTERRUPT_HARDWARE,         "hwint",        kDbgcSxEventKind_Interrupt, false },
     3969    { DBGFEVENT_INTERRUPT_SOFTWARE,         "swint",        kDbgcSxEventKind_Interrupt, false },
     3970    { DBGFEVENT_TRIPLE_FAULT,               "triplefault",  kDbgcSxEventKind_Plain,     true  },
     3971    { DBGFEVENT_XCPT_DE,                    "de",           kDbgcSxEventKind_Plain,     false },
     3972    { DBGFEVENT_XCPT_DB,                    "db",           kDbgcSxEventKind_Plain,     false },
     3973    { DBGFEVENT_XCPT_02,                    "xcpt02",       kDbgcSxEventKind_Plain,     false },
     3974    { DBGFEVENT_XCPT_BP,                    "bp",           kDbgcSxEventKind_Plain,     false },
     3975    { DBGFEVENT_XCPT_OF,                    "of",           kDbgcSxEventKind_Plain,     false },
     3976    { DBGFEVENT_XCPT_BR,                    "br",           kDbgcSxEventKind_Plain,     false },
     3977    { DBGFEVENT_XCPT_UD,                    "ud",           kDbgcSxEventKind_Plain,     false },
     3978    { DBGFEVENT_XCPT_NM,                    "nm",           kDbgcSxEventKind_Plain,     false },
     3979    { DBGFEVENT_XCPT_DF,                    "df",           kDbgcSxEventKind_Plain,     false },
     3980    { DBGFEVENT_XCPT_09,                    "xcpt09",       kDbgcSxEventKind_Plain,     false },
     3981    { DBGFEVENT_XCPT_TS,                    "ts",           kDbgcSxEventKind_Plain,     false },
     3982    { DBGFEVENT_XCPT_NP,                    "np",           kDbgcSxEventKind_Plain,     false },
     3983    { DBGFEVENT_XCPT_SS,                    "ss",           kDbgcSxEventKind_Plain,     false },
     3984    { DBGFEVENT_XCPT_GP,                    "gp",           kDbgcSxEventKind_Plain,     false },
     3985    { DBGFEVENT_XCPT_PF,                    "pf",           kDbgcSxEventKind_Plain,     false },
     3986    { DBGFEVENT_XCPT_0f,                    "xcpt0f",       kDbgcSxEventKind_Plain,     false },
     3987    { DBGFEVENT_XCPT_MF,                    "mf",           kDbgcSxEventKind_Plain,     false },
     3988    { DBGFEVENT_XCPT_AC,                    "ac",           kDbgcSxEventKind_Plain,     false },
     3989    { DBGFEVENT_XCPT_MC,                    "mc",           kDbgcSxEventKind_Plain,     false },
     3990    { DBGFEVENT_XCPT_XF,                    "xf",           kDbgcSxEventKind_Plain,     false },
     3991    { DBGFEVENT_XCPT_VE,                    "ve",           kDbgcSxEventKind_Plain,     false },
     3992    { DBGFEVENT_XCPT_15,                    "xcpt15",       kDbgcSxEventKind_Plain,     false },
     3993    { DBGFEVENT_XCPT_16,                    "xcpt16",       kDbgcSxEventKind_Plain,     false },
     3994    { DBGFEVENT_XCPT_17,                    "xcpt17",       kDbgcSxEventKind_Plain,     false },
     3995    { DBGFEVENT_XCPT_18,                    "xcpt18",       kDbgcSxEventKind_Plain,     false },
     3996    { DBGFEVENT_XCPT_19,                    "xcpt19",       kDbgcSxEventKind_Plain,     false },
     3997    { DBGFEVENT_XCPT_1a,                    "xcpt1a",       kDbgcSxEventKind_Plain,     false },
     3998    { DBGFEVENT_XCPT_1b,                    "xcpt1b",       kDbgcSxEventKind_Plain,     false },
     3999    { DBGFEVENT_XCPT_1c,                    "xcpt1c",       kDbgcSxEventKind_Plain,     false },
     4000    { DBGFEVENT_XCPT_1d,                    "xcpt1d",       kDbgcSxEventKind_Plain,     false },
     4001    { DBGFEVENT_XCPT_SX,                    "sx",           kDbgcSxEventKind_Plain,     false },
     4002    { DBGFEVENT_XCPT_1f,                    "xcpt1f",       kDbgcSxEventKind_Plain,     false },
     4003    { DBGFEVENT_INSTR_HALT,                 "halt",         kDbgcSxEventKind_Plain,     false },
     4004#if 0 /** @todo later */
     4005    { DBGFEVENT_INSTR_MWAIT,                "",
     4006    { DBGFEVENT_INSTR_MONITOR,              "",
     4007    { DBGFEVENT_INSTR_CPUID,                "",
     4008    { DBGFEVENT_INSTR_INVD,                 "",
     4009    { DBGFEVENT_INSTR_WBINVD,               "",
     4010    { DBGFEVENT_INSTR_INVLPG,               "",
     4011    { DBGFEVENT_INSTR_RDTSC,                "",
     4012    { DBGFEVENT_INSTR_RDTSCP,               "",
     4013    { DBGFEVENT_INSTR_RDPMC,                "",
     4014    { DBGFEVENT_INSTR_RDMSR,                "",
     4015    { DBGFEVENT_INSTR_WRMSR,                "",
     4016    { DBGFEVENT_INSTR_CRX_READ,             "",
     4017    { DBGFEVENT_INSTR_CRX_WRITE,            "",
     4018    { DBGFEVENT_INSTR_DRX_READ,             "",
     4019    { DBGFEVENT_INSTR_DRX_WRITE,            "",
     4020    { DBGFEVENT_INSTR_PAUSE,                "",
     4021    { DBGFEVENT_INSTR_XSETBV,               "",
     4022    { DBGFEVENT_INSTR_SIDT,                 "",
     4023    { DBGFEVENT_INSTR_LIDT,                 "",
     4024    { DBGFEVENT_INSTR_SGDT,                 "",
     4025    { DBGFEVENT_INSTR_LGDT,                 "",
     4026    { DBGFEVENT_INSTR_SLDT,                 "",
     4027    { DBGFEVENT_INSTR_LLDT,                 "",
     4028    { DBGFEVENT_INSTR_STR,                  "",
     4029    { DBGFEVENT_INSTR_LTR,                  "",
     4030    { DBGFEVENT_INSTR_GETSEC,               "",
     4031    { DBGFEVENT_INSTR_RSM,                  "",
     4032    { DBGFEVENT_INSTR_RDRAND,               "",
     4033    { DBGFEVENT_INSTR_RDSEED,               "",
     4034    { DBGFEVENT_INSTR_XSAVES,               "",
     4035    { DBGFEVENT_INSTR_XRSTORS,              "",
     4036    { DBGFEVENT_INSTR_VMM_CALL,             "",
     4037    { DBGFEVENT_INSTR_VMX_VMCLEAR           "",
     4038    { DBGFEVENT_INSTR_VMX_VMLAUNCH,         "",
     4039    { DBGFEVENT_INSTR_VMX_VMPTRLD,          "",
     4040    { DBGFEVENT_INSTR_VMX_VMPTRST,          "",
     4041    { DBGFEVENT_INSTR_VMX_VMREAD,           "",
     4042    { DBGFEVENT_INSTR_VMX_VMRESUME,         "",
     4043    { DBGFEVENT_INSTR_VMX_VMWRITE,          "",
     4044    { DBGFEVENT_INSTR_VMX_VMXOFF,           "",
     4045    { DBGFEVENT_INSTR_VMX_VMXON,            "",
     4046    { DBGFEVENT_INSTR_VMX_VMFUNC,           "",
     4047    { DBGFEVENT_INSTR_VMX_INVEPT,           "",
     4048    { DBGFEVENT_INSTR_VMX_INVVPID,          "",
     4049    { DBGFEVENT_INSTR_VMX_INVPCID,          "",
     4050    { DBGFEVENT_INSTR_SVM_VMRUN             "",
     4051    { DBGFEVENT_INSTR_SVM_VMLOAD,           "",
     4052    { DBGFEVENT_INSTR_SVM_VMSAVE,           "",
     4053    { DBGFEVENT_INSTR_SVM_STGI,             "",
     4054    { DBGFEVENT_INSTR_SVM_CLGI,             "",
     4055    { DBGFEVENT_EXIT_TASK_SWITCH            "",
     4056    { DBGFEVENT_EXIT_HALT,                  "",
     4057    { DBGFEVENT_EXIT_MWAIT,                 "",
     4058    { DBGFEVENT_EXIT_MONITOR,               "",
     4059    { DBGFEVENT_EXIT_CPUID,                 "",
     4060    { DBGFEVENT_EXIT_INVD,                  "",
     4061    { DBGFEVENT_EXIT_WBINVD,                "",
     4062    { DBGFEVENT_EXIT_INVLPG,                "",
     4063    { DBGFEVENT_EXIT_RDTSC,                 "",
     4064    { DBGFEVENT_EXIT_RDTSCP,                "",
     4065    { DBGFEVENT_EXIT_RDPMC,                 "",
     4066    { DBGFEVENT_EXIT_RDMSR,                 "",
     4067    { DBGFEVENT_EXIT_WRMSR,                 "",
     4068    { DBGFEVENT_EXIT_CRX_READ,              "",
     4069    { DBGFEVENT_EXIT_CRX_WRITE,             "",
     4070    { DBGFEVENT_EXIT_DRX_READ,              "",
     4071    { DBGFEVENT_EXIT_DRX_WRITE,             "",
     4072    { DBGFEVENT_EXIT_PAUSE,                 "",
     4073    { DBGFEVENT_EXIT_XSETBV,                "",
     4074    { DBGFEVENT_EXIT_SIDT,                  "",
     4075    { DBGFEVENT_EXIT_LIDT,                  "",
     4076    { DBGFEVENT_EXIT_SGDT,                  "",
     4077    { DBGFEVENT_EXIT_LGDT,                  "",
     4078    { DBGFEVENT_EXIT_SLDT,                  "",
     4079    { DBGFEVENT_EXIT_LLDT,                  "",
     4080    { DBGFEVENT_EXIT_STR,                   "",
     4081    { DBGFEVENT_EXIT_LTR,                   "",
     4082    { DBGFEVENT_EXIT_GETSEC,                "",
     4083    { DBGFEVENT_EXIT_RSM,                   "",
     4084    { DBGFEVENT_EXIT_RDRAND,                "",
     4085    { DBGFEVENT_EXIT_RDSEED,                "",
     4086    { DBGFEVENT_EXIT_XSAVES,                "",
     4087    { DBGFEVENT_EXIT_XRSTORS,               "",
     4088    { DBGFEVENT_EXIT_VMM_CALL,              "",
     4089    { DBGFEVENT_EXIT_VMX_VMCLEAR            "",
     4090    { DBGFEVENT_EXIT_VMX_VMLAUNCH,          "",
     4091    { DBGFEVENT_EXIT_VMX_VMPTRLD,           "",
     4092    { DBGFEVENT_EXIT_VMX_VMPTRST,           "",
     4093    { DBGFEVENT_EXIT_VMX_VMREAD,            "",
     4094    { DBGFEVENT_EXIT_VMX_VMRESUME,          "",
     4095    { DBGFEVENT_EXIT_VMX_VMWRITE,           "",
     4096    { DBGFEVENT_EXIT_VMX_VMXOFF,            "",
     4097    { DBGFEVENT_EXIT_VMX_VMXON,             "",
     4098    { DBGFEVENT_EXIT_VMX_VMFUNC,            "",
     4099    { DBGFEVENT_EXIT_VMX_INVEPT,            "",
     4100    { DBGFEVENT_EXIT_VMX_INVVPID,           "",
     4101    { DBGFEVENT_EXIT_VMX_INVPCID,           "",
     4102    { DBGFEVENT_EXIT_VMX_EPT_VIOLATION,     "",
     4103    { DBGFEVENT_EXIT_VMX_EPT_MISCONFIG,     "",
     4104    { DBGFEVENT_EXIT_VMX_VAPIC_ACCESS,      "",
     4105    { DBGFEVENT_EXIT_VMX_VAPIC_WRITE,       "",
     4106    { DBGFEVENT_EXIT_SVM_VMRUN              "",
     4107    { DBGFEVENT_EXIT_SVM_VMLOAD,            "",
     4108    { DBGFEVENT_EXIT_SVM_VMSAVE,            "",
     4109    { DBGFEVENT_EXIT_SVM_STGI,              "",
     4110    { DBGFEVENT_EXIT_SVM_CLGI,              "",
     4111    { DBGFEVENT_IOPORT_UNASSIGNED,          "",
     4112    { DBGFEVENT_IOPORT_UNUSED,              "",
     4113    { DBGFEVENT_MEMORY_UNASSIGNED,          "",
     4114    { DBGFEVENT_MEMORY_ROM_WRITE,           "",
     4115#endif
     4116};
     4117
     4118
    39554119/**
    39564120 * @callback_method_impl{FNDBGCCMD, The 'sx[eni-]' commands.}
     
    39584122static DECLCALLBACK(int) dbgcCmdEventCtrl(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
    39594123{
    3960     return VERR_NOT_IMPLEMENTED;
     4124    /*
     4125     * Figure out which command this is.
     4126     */
     4127    enum
     4128    {
     4129        kEventEnable,
     4130        kEventNotify,
     4131        kEventIgnore,
     4132        kEventChangeCmd
     4133    } enmSubOp;
     4134    switch (pCmd->pszCmd[2])
     4135    {
     4136        case 'e': enmSubOp = kEventEnable; break;
     4137        case 'n': enmSubOp = kEventNotify; break;
     4138        case '-': enmSubOp = kEventChangeCmd; break;
     4139        case 'i': enmSubOp = kEventIgnore; break;
     4140        default:
     4141            return pCmdHlp->pfnVBoxError(pCmdHlp, VERR_INVALID_PARAMETER, "pszCmd=%s\n", pCmd->pszCmd);
     4142    }
     4143
     4144    /*
     4145     * Command option.
     4146     */
     4147    unsigned    iArg = 0;
     4148    const char *pszCommand = NULL;
     4149    if (   cArgs >= iArg + 2
     4150        && paArgs[iArg].enmType == DBGCVAR_TYPE_STRING
     4151        && paArgs[iArg + 1].enmType == DBGCVAR_TYPE_STRING
     4152        && strcmp(paArgs[iArg].u.pszString, "-c") == 0)
     4153    {
     4154        pszCommand = paArgs[iArg + 1].u.pszString;
     4155        iArg += 2;
     4156        if (   enmSubOp != kEventEnable
     4157            && enmSubOp != kEventChangeCmd)
     4158            return pCmdHlp->pfnVBoxError(pCmdHlp, VERR_INVALID_PARAMETER, "Only the 'sxe' and 'sxc' command takes '-c cmds'.\n");
     4159    }
     4160
     4161    /*
     4162     * The remaining arguments are event specifiers to which the operation should be applied.
     4163     */
     4164    for (; iArg < cArgs; iArg++)
     4165    {
     4166        DBGC_CMDHLP_ASSERT_PARSER_RET(pCmdHlp, pCmd, iArg, paArgs[iArg].enmType == DBGCVAR_TYPE_STRING
     4167                                                        || paArgs[iArg].enmType == DBGCVAR_TYPE_SYMBOL);
     4168
     4169    }
     4170
     4171    return VINF_SUCCESS;
    39614172}
    39624173
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette