VirtualBox

Changeset 86246 in vbox


Ignore:
Timestamp:
Sep 23, 2020 4:28:45 PM (4 years ago)
Author:
vboxsync
Message:

Debugger/DBGCRemoteKd: Implement switch current processor request

File:
1 edited

Legend:

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

    r86244 r86246  
    11131113/** Cause a bugcheck request. */
    11141114#define KD_PACKET_MANIPULATE_REQ_CAUSE_BUGCHECK             UINT32_C(0x00003149)
     1115/** Cause a bugcheck request. */
     1116#define KD_PACKET_MANIPULATE_REQ_SWITCH_PROCESSOR           UINT32_C(0x00003150)
    11151117/** @todo */
    11161118/** Search memory for a pattern request. */
     
    13121314        case KD_PACKET_MANIPULATE_REQ_QUERY_MEMORY:             return "QueryMemory";
    13131315        case KD_PACKET_MANIPULATE_REQ_CAUSE_BUGCHECK:           return "CauseBugCheck";
     1316        case KD_PACKET_MANIPULATE_REQ_SWITCH_PROCESSOR:         return "SwitchProcessor";
    13141317        case KD_PACKET_MANIPULATE_REQ_SEARCH_MEMORY:            return "SearchMemory";
    13151318        default:                                                break;
     
    14631466                break;
    14641467            }
     1468            case KD_PACKET_MANIPULATE_REQ_SWITCH_PROCESSOR:
    14651469            default:
    14661470                break;
     
    34043408
    34053409/**
     3410 * Processes a switch processor request.
     3411 *
     3412 * @returns VBox status code.
     3413 * @param   pThis               The KD context.
     3414 * @param   pPktManip           The manipulate packet request.
     3415 */
     3416static int dbgcKdCtxPktManipulate64SwitchProcessor(PKDCTX pThis, PCKDPACKETMANIPULATE64 pPktManip)
     3417{
     3418    int rc = VINF_SUCCESS;
     3419
     3420    if (RT_UNLIKELY(pPktManip->Hdr.idCpu >= DBGFR3CpuGetCount(pThis->Dbgc.pUVM)))
     3421    {
     3422        KDPACKETMANIPULATEHDR RespHdr;
     3423        RT_ZERO(RespHdr);
     3424
     3425        RespHdr.idReq       = KD_PACKET_MANIPULATE_REQ_SWITCH_PROCESSOR;
     3426        RespHdr.u16CpuLvl   = pPktManip->Hdr.u16CpuLvl;
     3427        RespHdr.idCpu       = pPktManip->Hdr.idCpu;
     3428        RespHdr.u32NtStatus = NTSTATUS_UNSUCCESSFUL; /** @todo Test this path. */
     3429        rc = dbgcKdCtxPktSend(pThis, KD_PACKET_HDR_SIGNATURE_DATA, KD_PACKET_HDR_SUB_TYPE_STATE_MANIPULATE,
     3430                              &RespHdr, sizeof(RespHdr), true /*fAck*/);
     3431    }
     3432    else
     3433    {
     3434        pThis->Dbgc.idCpu = pPktManip->Hdr.idCpu;
     3435        rc = dbgcKdCtxStateChangeSend(pThis, DBGFEVENT_HALT_DONE);
     3436    }
     3437
     3438    return rc;
     3439}
     3440
     3441
     3442/**
    34063443 * Processes a manipulate packet.
    34073444 *
     
    34893526        {
    34903527            rc = dbgcKdCtxPktManipulate64CauseBugCheck(pThis, pPktManip);
     3528            break;
     3529        }
     3530        case KD_PACKET_MANIPULATE_REQ_SWITCH_PROCESSOR:
     3531        {
     3532            rc = dbgcKdCtxPktManipulate64SwitchProcessor(pThis, pPktManip);
    34913533            break;
    34923534        }
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