From 59881376cd951bec9678e0e8019eb7f6d0e819f1 Mon Sep 17 00:00:00 2001 From: Gregor Anich Date: Sat, 13 Nov 2004 23:00:15 +0000 Subject: [PATCH] Fix handling of debug traps in GDB stub/KiDispatchException. svn path=/trunk/; revision=11647 --- reactos/ntoskrnl/dbg/kdb_symbols.c | 4 ++-- reactos/ntoskrnl/kd/gdbstub.c | 2 +- reactos/ntoskrnl/ke/catch.c | 21 +++++++++++---------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/reactos/ntoskrnl/dbg/kdb_symbols.c b/reactos/ntoskrnl/dbg/kdb_symbols.c index 085d56630a0..02e00b9b6eb 100644 --- a/reactos/ntoskrnl/dbg/kdb_symbols.c +++ b/reactos/ntoskrnl/dbg/kdb_symbols.c @@ -639,7 +639,6 @@ KdbpSymRemoveCachedFile(IN PIMAGE_SYMBOL_INFO SymbolInfo) KeReleaseSpinLock(&SymbolFileListLock, Irql); DPRINT1("Warning: Removing unknown symbol file: FileBuffer = %p, ImageBase = %p\n", SymbolInfo->FileBuffer, SymbolInfo->ImageBase); - ASSERT(0); } /*! \brief Loads a symbol file. @@ -796,7 +795,8 @@ KdbpSymUnloadModuleSymbols(IN PIMAGE_SYMBOL_INFO SymbolInfo) { DPRINT("Unloading symbols\n"); - if (SymbolInfo != NULL && SymbolInfo->FileBuffer != NULL) + if (SymbolInfo != NULL && SymbolInfo->FileBuffer != NULL && + (PVOID)SymbolInfo->ImageBase != NULL) { KdbpSymRemoveCachedFile(SymbolInfo); SymbolInfo->FileBuffer = NULL; diff --git a/reactos/ntoskrnl/kd/gdbstub.c b/reactos/ntoskrnl/kd/gdbstub.c index 6fe73a00ee1..17763fab161 100644 --- a/reactos/ntoskrnl/kd/gdbstub.c +++ b/reactos/ntoskrnl/kd/gdbstub.c @@ -1411,7 +1411,7 @@ KdEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord, } } - return kdHandleException; + return ((SigVal == 5) ? (kdContinue) : (kdHandleException)); } diff --git a/reactos/ntoskrnl/ke/catch.c b/reactos/ntoskrnl/ke/catch.c index ffe6c8e6d26..fe5c3b5cc51 100644 --- a/reactos/ntoskrnl/ke/catch.c +++ b/reactos/ntoskrnl/ke/catch.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * 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 * FILE: ntoskrnl/ke/catch.c @@ -80,13 +80,13 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord, else if (KdDebuggerEnabled && KdDebugState & KD_DEBUG_KDB) { Action = KdbEnterDebuggerException (ExceptionRecord, Context, Tf); - if (Action == kdContinue) - { - return; - } } #endif /* KDBG */ - if (Action != kdDoNotHandleException) + if (Action == kdContinue) + { + return; + } + else if (Action != kdDoNotHandleException) { if (PreviousMode == UserMode) { @@ -94,7 +94,7 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord, { PULONG Stack; 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))); NTSTATUS StatusOfCopy; @@ -125,10 +125,11 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord, } else { - // Now it really hit the ventilation device. Sorry, - // can do nothing but kill the sucker. + /* Now it really hit the ventilation device. Sorry, + * can do nothing but kill the sucker. + */ 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(); return;