kdpacket.c (c2c66aff) kdpacket.c (de369ce2)
1/*
2 * COPYRIGHT: GPL, see COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: drivers/base/kddll/kdpacket.c
5 * PURPOSE: Base functions for the kernel debugger.
6 */
7
8#include "kdgdb.h"

--- 346 unchanged lines hidden (view full) ---

355NTAPI
356KdReceivePacket(
357 _In_ ULONG PacketType,
358 _Out_ PSTRING MessageHeader,
359 _Out_ PSTRING MessageData,
360 _Out_ PULONG DataLength,
361 _Inout_ PKD_CONTEXT KdContext)
362{
1/*
2 * COPYRIGHT: GPL, see COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: drivers/base/kddll/kdpacket.c
5 * PURPOSE: Base functions for the kernel debugger.
6 */
7
8#include "kdgdb.h"

--- 346 unchanged lines hidden (view full) ---

355NTAPI
356KdReceivePacket(
357 _In_ ULONG PacketType,
358 _Out_ PSTRING MessageHeader,
359 _Out_ PSTRING MessageData,
360 _Out_ PULONG DataLength,
361 _Inout_ PKD_CONTEXT KdContext)
362{
363 KDDBGPRINT("KdReceivePacket.\n");
363 KDDBGPRINT("KdReceivePacket --> ");
364
365 if (PacketType == PACKET_TYPE_KD_POLL_BREAKIN)
366 {
364
365 if (PacketType == PACKET_TYPE_KD_POLL_BREAKIN)
366 {
367 static BOOLEAN firstTime = TRUE;
368 KDDBGPRINT("Polling break in.\n");
369 if (firstTime)
370 {
371 /* Force debug break on init */
372 firstTime = FALSE;
373 return KdPacketReceived;
374 }
375
367 return KdpPollBreakIn();
368 }
369
370 if (PacketType == PACKET_TYPE_KD_DEBUG_IO)
371 {
376 return KdpPollBreakIn();
377 }
378
379 if (PacketType == PACKET_TYPE_KD_DEBUG_IO)
380 {
381 KDDBGPRINT("Debug prompt.\n");
372 /* HACK ! RtlAssert asks for (boipt), always say "o" --> break once. */
373 MessageData->Length = 1;
374 MessageData->Buffer[0] = 'o';
375 return KdPacketReceived;
376 }
377
378 if (PacketType == PACKET_TYPE_KD_STATE_MANIPULATE)
379 {
380 DBGKD_MANIPULATE_STATE64* State = (DBGKD_MANIPULATE_STATE64*)MessageHeader->Buffer;
381
382 /* HACK ! RtlAssert asks for (boipt), always say "o" --> break once. */
383 MessageData->Length = 1;
384 MessageData->Buffer[0] = 'o';
385 return KdPacketReceived;
386 }
387
388 if (PacketType == PACKET_TYPE_KD_STATE_MANIPULATE)
389 {
390 DBGKD_MANIPULATE_STATE64* State = (DBGKD_MANIPULATE_STATE64*)MessageHeader->Buffer;
391
392 KDDBGPRINT("State manipulation: ");
393
382 /* Maybe we are in a send<->receive loop that GDB doesn't need to know about */
383 if (KdpManipulateStateHandler != NULL)
384 {
394 /* Maybe we are in a send<->receive loop that GDB doesn't need to know about */
395 if (KdpManipulateStateHandler != NULL)
396 {
385 KDDBGPRINT("KDGBD: We have a manipulate state handler.\n");
397 KDDBGPRINT("We have a manipulate state handler.\n");
386 return KdpManipulateStateHandler(State, MessageData, DataLength, KdContext);
387 }
388
389 /* Receive data from GDB and interpret it */
398 return KdpManipulateStateHandler(State, MessageData, DataLength, KdContext);
399 }
400
401 /* Receive data from GDB and interpret it */
402 KDDBGPRINT("Receiving data from GDB.\n");
390 return gdb_receive_and_interpret_packet(State, MessageData, DataLength, KdContext);
391 }
392
393 /* What should we do ? */
394 while (1);
395 return KdPacketNeedsResend;
396}
397

--- 40 unchanged lines hidden ---
403 return gdb_receive_and_interpret_packet(State, MessageData, DataLength, KdContext);
404 }
405
406 /* What should we do ? */
407 while (1);
408 return KdPacketNeedsResend;
409}
410

--- 40 unchanged lines hidden ---