Fix handling of debug traps in GDB stub/KiDispatchException.
authorGregor Anich <blight@blight.eu.org>
Sat, 13 Nov 2004 23:00:15 +0000 (23:00 +0000)
committerGregor Anich <blight@blight.eu.org>
Sat, 13 Nov 2004 23:00:15 +0000 (23:00 +0000)
svn path=/trunk/; revision=11647

reactos/ntoskrnl/dbg/kdb_symbols.c
reactos/ntoskrnl/kd/gdbstub.c
reactos/ntoskrnl/ke/catch.c

index 085d566..02e00b9 100644 (file)
@@ -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;
index 6fe73a0..17763fa 100644 (file)
@@ -1411,7 +1411,7 @@ KdEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
         }
     }
 
-  return kdHandleException;
+  return ((SigVal == 5) ? (kdContinue) : (kdHandleException));
 }
 
 
index ffe6c8e..fe5c3b5 100644 (file)
@@ -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;