Fix handling of debug traps in GDB stub/KiDispatchException.

svn path=/trunk/; revision=11647
This commit is contained in:
Gregor Anich 2004-11-13 23:00:15 +00:00
parent 60c952c6ce
commit 59881376cd
3 changed files with 14 additions and 13 deletions

View file

@ -639,7 +639,6 @@ KdbpSymRemoveCachedFile(IN PIMAGE_SYMBOL_INFO SymbolInfo)
KeReleaseSpinLock(&SymbolFileListLock, Irql); KeReleaseSpinLock(&SymbolFileListLock, Irql);
DPRINT1("Warning: Removing unknown symbol file: FileBuffer = %p, ImageBase = %p\n", DPRINT1("Warning: Removing unknown symbol file: FileBuffer = %p, ImageBase = %p\n",
SymbolInfo->FileBuffer, SymbolInfo->ImageBase); SymbolInfo->FileBuffer, SymbolInfo->ImageBase);
ASSERT(0);
} }
/*! \brief Loads a symbol file. /*! \brief Loads a symbol file.
@ -796,7 +795,8 @@ KdbpSymUnloadModuleSymbols(IN PIMAGE_SYMBOL_INFO SymbolInfo)
{ {
DPRINT("Unloading symbols\n"); DPRINT("Unloading symbols\n");
if (SymbolInfo != NULL && SymbolInfo->FileBuffer != NULL) if (SymbolInfo != NULL && SymbolInfo->FileBuffer != NULL &&
(PVOID)SymbolInfo->ImageBase != NULL)
{ {
KdbpSymRemoveCachedFile(SymbolInfo); KdbpSymRemoveCachedFile(SymbolInfo);
SymbolInfo->FileBuffer = NULL; SymbolInfo->FileBuffer = NULL;

View file

@ -1411,7 +1411,7 @@ KdEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
} }
} }
return kdHandleException; return ((SigVal == 5) ? (kdContinue) : (kdHandleException));
} }

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id: catch.c,v 1.51 2004/11/11 12:27:40 ekohl Exp $ /* $Id: catch.c,v 1.52 2004/11/13 23:00:15 blight Exp $
* *
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* FILE: ntoskrnl/ke/catch.c * FILE: ntoskrnl/ke/catch.c
@ -80,13 +80,13 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
else if (KdDebuggerEnabled && KdDebugState & KD_DEBUG_KDB) else if (KdDebuggerEnabled && KdDebugState & KD_DEBUG_KDB)
{ {
Action = KdbEnterDebuggerException (ExceptionRecord, Context, Tf); Action = KdbEnterDebuggerException (ExceptionRecord, Context, Tf);
if (Action == kdContinue)
{
return;
}
} }
#endif /* KDBG */ #endif /* KDBG */
if (Action != kdDoNotHandleException) if (Action == kdContinue)
{
return;
}
else if (Action != kdDoNotHandleException)
{ {
if (PreviousMode == UserMode) if (PreviousMode == UserMode)
{ {
@ -94,7 +94,7 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
{ {
PULONG Stack; PULONG Stack;
ULONG CDest; ULONG CDest;
char temp_space[12 + sizeof(EXCEPTION_RECORD) + sizeof(CONTEXT)]; // FIXME: HACKHACK char temp_space[12 + sizeof(EXCEPTION_RECORD) + sizeof(CONTEXT)]; /* FIXME: HACKHACK */
PULONG pNewUserStack = (PULONG)(Tf->Esp - (12 + sizeof(EXCEPTION_RECORD) + sizeof(CONTEXT))); PULONG pNewUserStack = (PULONG)(Tf->Esp - (12 + sizeof(EXCEPTION_RECORD) + sizeof(CONTEXT)));
NTSTATUS StatusOfCopy; NTSTATUS StatusOfCopy;
@ -125,10 +125,11 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
} }
else else
{ {
// Now it really hit the ventilation device. Sorry, /* Now it really hit the ventilation device. Sorry,
// can do nothing but kill the sucker. * can do nothing but kill the sucker.
*/
ZwTerminateThread(NtCurrentThread(), ExceptionRecord->ExceptionCode); ZwTerminateThread(NtCurrentThread(), ExceptionRecord->ExceptionCode);
DPRINT1("User-mode stack was invalid. Terminating target thread\nn"); DPRINT1("User-mode stack was invalid. Terminating target thread\n");
} }
Tf->Eip = (ULONG)LdrpGetSystemDllExceptionDispatcher(); Tf->Eip = (ULONG)LdrpGetSystemDllExceptionDispatcher();
return; return;