* PROJECT: ReactOS kernel
* FILE: drivers/base/kddll/kddll.c
* PURPOSE: Base functions for the kernel debugger.
- * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org)
+ * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org)
*/
#include "kddll.h"
/* GLOBALS ********************************************************************/
-PFNDBGPRNT KdpDbgPrint = NULL;
ULONG CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID;
ULONG RemotePacketId = INITIAL_PACKET_ID;
CurrentPacketId ^= 1;
return KDP_PACKET_RECEIVED;
}
- /* That's not what we were waiting for, start over. */
+ /* That's not what we were waiting for, start over */
continue;
case PACKET_TYPE_KD_RESET:
- KDDBGPRINT("KdReceivePacket - got a reset packet\n");
+ KDDBGPRINT("KdReceivePacket - got PACKET_TYPE_KD_RESET\n");
KdpSendControlPacket(PACKET_TYPE_KD_RESET, 0);
CurrentPacketId = INITIAL_PACKET_ID;
RemotePacketId = INITIAL_PACKET_ID;
default:
KDDBGPRINT("KdReceivePacket - got unknown control packet\n");
- return KDP_PACKET_RESEND;
+ /* We got an invalid packet, ignore it and start over */
+ continue;
}
}
{
/* Packet received, we can quit the loop */
CurrentPacketId &= ~SYNC_PACKET_ID;
+ Retries = KdContext->KdpDefaultRetries;
break;
}
else if (KdStatus == KDP_PACKET_TIMEOUT)
*/
if (Retries == 0)
{
- if (PacketType == PACKET_TYPE_KD_DEBUG_IO)
+ ULONG MessageId = *(PULONG)MessageHeader->Buffer;
+ switch (PacketType)
{
- return;
+ case PACKET_TYPE_KD_DEBUG_IO:
+ {
+ if (MessageId != DbgKdPrintStringApi) continue;
+ break;
+ }
+
+ case PACKET_TYPE_KD_STATE_CHANGE32:
+ case PACKET_TYPE_KD_STATE_CHANGE64:
+ {
+ if (MessageId != DbgKdLoadSymbolsStateChange) continue;
+ break;
+ }
+
+ case PACKET_TYPE_KD_FILE_IO:
+ {
+ if (MessageId != DbgKdCreateFileApi) continue;
+ break;
+ }
}
+
+ /* Reset debugger state */
+ KD_DEBUGGER_NOT_PRESENT = TRUE;
+ SharedUserData->KdDebuggerEnabled &= ~0x00000002;
+ CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID;
+ RemotePacketId = INITIAL_PACKET_ID;
+
+ return;
}
}
// else (KdStatus == KDP_PACKET_RESEND) /* Resend the packet */