mirror of
https://github.com/reactos/reactos.git
synced 2024-12-31 19:42:51 +00:00
Fix GDB stub:
- Initialize WrapperTable routines as early as possible - Initialize debug port (hard coded to COM2, 115200 baud for now) - Don't limit runnable thread on startup svn path=/trunk/; revision=14977
This commit is contained in:
parent
68b564e30a
commit
600cfcc505
1 changed files with 23 additions and 21 deletions
|
@ -107,7 +107,7 @@ static PETHREAD GspDbgThread;
|
||||||
static PETHREAD GspEnumThread;
|
static PETHREAD GspEnumThread;
|
||||||
|
|
||||||
extern LIST_ENTRY PsActiveProcessHead;
|
extern LIST_ENTRY PsActiveProcessHead;
|
||||||
KD_PORT_INFORMATION GdbPortInfo;
|
KD_PORT_INFORMATION GdbPortInfo = { 2, 115200, 0 }; /* FIXME hardcoded for COM2, 115200 baud */
|
||||||
|
|
||||||
/* Number of Registers. */
|
/* Number of Registers. */
|
||||||
#define NUMREGS 16
|
#define NUMREGS 16
|
||||||
|
@ -714,19 +714,24 @@ GspSetThread(PCHAR Request)
|
||||||
{
|
{
|
||||||
case 'c': /* Run thread */
|
case 'c': /* Run thread */
|
||||||
if (GspFindThread (ptr, &ThreadInfo))
|
if (GspFindThread (ptr, &ThreadInfo))
|
||||||
{
|
{
|
||||||
GspOutBuffer[0] = 'O';
|
GspOutBuffer[0] = 'O';
|
||||||
GspOutBuffer[1] = 'K';
|
GspOutBuffer[1] = 'K';
|
||||||
|
|
||||||
if(GspRunThread) ObDereferenceObject(GspRunThread);
|
if (NULL != GspRunThread)
|
||||||
|
{
|
||||||
GspRunThread = ThreadInfo;
|
ObDereferenceObject(GspRunThread);
|
||||||
if (GspRunThread) ObReferenceObject(GspRunThread);
|
}
|
||||||
}
|
GspRunThread = ThreadInfo;
|
||||||
else
|
if (NULL != GspRunThread)
|
||||||
{
|
{
|
||||||
GspOutBuffer[0] = 'E';
|
ObReferenceObject(GspRunThread);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GspOutBuffer[0] = 'E';
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'g': /* Debug thread */
|
case 'g': /* Debug thread */
|
||||||
if (GspFindThread (ptr, &ThreadInfo))
|
if (GspFindThread (ptr, &ThreadInfo))
|
||||||
|
@ -1548,6 +1553,10 @@ KdpGdbStubInit(PKD_DISPATCH_TABLE WrapperTable,
|
||||||
|
|
||||||
if (BootPhase == 0)
|
if (BootPhase == 0)
|
||||||
{
|
{
|
||||||
|
/* Write out the functions that we support for now */
|
||||||
|
WrapperTable->KdpInitRoutine = KdpGdbStubInit;
|
||||||
|
WrapperTable->KdpPrintRoutine = KdpGdbDebugPrint;
|
||||||
|
WrapperTable->KdpExceptionRoutine = KdpGdbEnterDebuggerException;
|
||||||
|
|
||||||
/* Initialize the Port */
|
/* Initialize the Port */
|
||||||
KdPortInitializeEx(&GdbPortInfo, 0, 0);
|
KdPortInitializeEx(&GdbPortInfo, 0, 0);
|
||||||
|
@ -1555,18 +1564,11 @@ KdpGdbStubInit(PKD_DISPATCH_TABLE WrapperTable,
|
||||||
else if (BootPhase == 1)
|
else if (BootPhase == 1)
|
||||||
{
|
{
|
||||||
GspInitialized = TRUE;
|
GspInitialized = TRUE;
|
||||||
GspRunThread = PsGetCurrentThread();
|
|
||||||
|
|
||||||
ObReferenceObject(GspRunThread);
|
|
||||||
|
|
||||||
|
GspRunThread = NULL;
|
||||||
GspDbgThread = NULL;
|
GspDbgThread = NULL;
|
||||||
GspEnumThread = NULL;
|
GspEnumThread = NULL;
|
||||||
|
|
||||||
/* Write out the functions that we support for now */
|
|
||||||
WrapperTable->KdpInitRoutine = KdpGdbStubInit;
|
|
||||||
WrapperTable->KdpPrintRoutine = KdpGdbDebugPrint;
|
|
||||||
WrapperTable->KdpExceptionRoutine = KdpGdbEnterDebuggerException;
|
|
||||||
|
|
||||||
HalDisplayString("Waiting for GDB to attach\n");
|
HalDisplayString("Waiting for GDB to attach\n");
|
||||||
DbgPrint("Module 'hal.dll' loaded at 0x%.08x.\n", LdrHalBase);
|
DbgPrint("Module 'hal.dll' loaded at 0x%.08x.\n", LdrHalBase);
|
||||||
DbgBreakPointWithStatus (DBG_STATUS_CONTROL_C);
|
DbgBreakPointWithStatus (DBG_STATUS_CONTROL_C);
|
||||||
|
|
Loading…
Reference in a new issue