mirror of
https://github.com/reactos/reactos.git
synced 2025-07-22 16:34:03 +00:00
- Removed some unnecessary DbgPrints from the fatal exception path; ignore
the breakpoint in the tail of KeBugCheckEx/KeBugCheckWithTf if no debugger is connected. svn path=/trunk/; revision=8551
This commit is contained in:
parent
957b856245
commit
b041530f2d
4 changed files with 35 additions and 15 deletions
|
@ -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: bug.c,v 1.41 2003/12/30 18:52:04 fireball Exp $
|
/* $Id: bug.c,v 1.42 2004/03/06 22:24:13 dwelch Exp $
|
||||||
*
|
*
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: ntoskrnl/ke/bug.c
|
* FILE: ntoskrnl/ke/bug.c
|
||||||
|
@ -163,11 +163,11 @@ KeBugCheckWithTf(ULONG BugCheckCode,
|
||||||
{
|
{
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
__asm__("sti\n\t");
|
__asm__("sti\n\t");
|
||||||
DbgBreakPoint();
|
DbgBreakPointNoBugCheck();
|
||||||
__asm__("cli\n\t");
|
__asm__("cli\n\t");
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
__asm sti
|
__asm sti
|
||||||
DbgBreakPoint();
|
DbgBreakPointNoBugCheck();
|
||||||
__asm cli
|
__asm cli
|
||||||
#else
|
#else
|
||||||
#error Unknown compiler for inline assembler
|
#error Unknown compiler for inline assembler
|
||||||
|
@ -293,11 +293,11 @@ KeBugCheckEx(ULONG BugCheckCode,
|
||||||
{
|
{
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
__asm__("sti\n\t");
|
__asm__("sti\n\t");
|
||||||
DbgBreakPoint();
|
DbgBreakPointNoBugCheck();
|
||||||
__asm__("cli\n\t");
|
__asm__("cli\n\t");
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
__asm sti
|
__asm sti
|
||||||
DbgBreakPoint();
|
DbgBreakPointNoBugCheck();
|
||||||
__asm cli
|
__asm cli
|
||||||
#else
|
#else
|
||||||
#error Unknown compiler for inline assembler
|
#error Unknown compiler for inline assembler
|
||||||
|
|
|
@ -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.39 2003/12/30 18:52:04 fireball Exp $
|
/* $Id: catch.c,v 1.40 2004/03/06 22:24:13 dwelch Exp $
|
||||||
*
|
*
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: ntoskrnl/ke/catch.c
|
* FILE: ntoskrnl/ke/catch.c
|
||||||
|
@ -163,9 +163,9 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
|
||||||
if (Value != ExceptionContinueExecution ||
|
if (Value != ExceptionContinueExecution ||
|
||||||
0 != (ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE))
|
0 != (ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE))
|
||||||
{
|
{
|
||||||
DbgPrint("ExceptionRecord->ExceptionAddress = 0x%x\n",
|
DPRINT("ExceptionRecord->ExceptionAddress = 0x%x\n",
|
||||||
ExceptionRecord->ExceptionAddress );
|
ExceptionRecord->ExceptionAddress );
|
||||||
KEBUGCHECKWITHTF(KMODE_EXCEPTION_NOT_HANDLED, 0, 0, 0, 0, Tf);
|
KeBugCheckWithTf(KMODE_EXCEPTION_NOT_HANDLED, 0, 0, 0, 0, Tf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,16 @@ DbgBreakPoint(VOID)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
__asm__(".globl _DbgBreakPointNoBugCheck@0\n\t"
|
||||||
|
"_DbgBreakPointNoBugCheck@0:\n\t"
|
||||||
|
"int $3\n\t"
|
||||||
|
"ret\n\t");
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @implemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -288,8 +288,8 @@ KiDoubleFaultHandler(VOID)
|
||||||
OldTss->Fs, OldTss->Gs);
|
OldTss->Fs, OldTss->Gs);
|
||||||
DbgPrint("EAX: %.8x EBX: %.8x ECX: %.8x\n", OldTss->Eax, OldTss->Ebx,
|
DbgPrint("EAX: %.8x EBX: %.8x ECX: %.8x\n", OldTss->Eax, OldTss->Ebx,
|
||||||
OldTss->Ecx);
|
OldTss->Ecx);
|
||||||
DbgPrint("EDX: %.8x EBP: %.8x ESI: %.8x\n", OldTss->Edx, OldTss->Ebp,
|
DbgPrint("EDX: %.8x EBP: %.8x ESI: %.8x\n ESP: %.8x", OldTss->Edx,
|
||||||
OldTss->Esi);
|
OldTss->Ebp, OldTss->Esi, Esp0);
|
||||||
DbgPrint("EDI: %.8x EFLAGS: %.8x ", OldTss->Edi, OldTss->Eflags);
|
DbgPrint("EDI: %.8x EFLAGS: %.8x ", OldTss->Edi, OldTss->Eflags);
|
||||||
if (OldTss->Cs == KERNEL_CS)
|
if (OldTss->Cs == KERNEL_CS)
|
||||||
{
|
{
|
||||||
|
@ -307,7 +307,6 @@ KiDoubleFaultHandler(VOID)
|
||||||
}
|
}
|
||||||
if ((OldTss->Cs & 0xffff) == KERNEL_CS)
|
if ((OldTss->Cs & 0xffff) == KERNEL_CS)
|
||||||
{
|
{
|
||||||
DbgPrint("ESP %x\n", Esp0);
|
|
||||||
if (PsGetCurrentThread() != NULL)
|
if (PsGetCurrentThread() != NULL)
|
||||||
{
|
{
|
||||||
StackLimit = (ULONG)PsGetCurrentThread()->Tcb.StackBase;
|
StackLimit = (ULONG)PsGetCurrentThread()->Tcb.StackBase;
|
||||||
|
@ -468,7 +467,8 @@ KiDumpTrapFrame(PKTRAP_FRAME Tf, ULONG Parameter1, ULONG Parameter2)
|
||||||
DbgPrint("DS %x ES %x FS %x GS %x\n", Tf->Ds&0xffff, Tf->Es&0xffff,
|
DbgPrint("DS %x ES %x FS %x GS %x\n", Tf->Ds&0xffff, Tf->Es&0xffff,
|
||||||
Tf->Fs&0xffff, Tf->Gs&0xfff);
|
Tf->Fs&0xffff, Tf->Gs&0xfff);
|
||||||
DbgPrint("EAX: %.8x EBX: %.8x ECX: %.8x\n", Tf->Eax, Tf->Ebx, Tf->Ecx);
|
DbgPrint("EAX: %.8x EBX: %.8x ECX: %.8x\n", Tf->Eax, Tf->Ebx, Tf->Ecx);
|
||||||
DbgPrint("EDX: %.8x EBP: %.8x ESI: %.8x\n", Tf->Edx, Tf->Ebp, Tf->Esi);
|
DbgPrint("EDX: %.8x EBP: %.8x ESI: %.8x ESP: %.8x\n", Tf->Edx,
|
||||||
|
Tf->Ebp, Tf->Esi, Esp0);
|
||||||
DbgPrint("EDI: %.8x EFLAGS: %.8x ", Tf->Edi, Tf->Eflags);
|
DbgPrint("EDI: %.8x EFLAGS: %.8x ", Tf->Edi, Tf->Eflags);
|
||||||
if ((Tf->Cs&0xffff) == KERNEL_CS)
|
if ((Tf->Cs&0xffff) == KERNEL_CS)
|
||||||
{
|
{
|
||||||
|
@ -481,8 +481,6 @@ KiDumpTrapFrame(PKTRAP_FRAME Tf, ULONG Parameter1, ULONG Parameter2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DbgPrint("ESP %x\n", Esp0);
|
|
||||||
|
|
||||||
if (PsGetCurrentThread() != NULL)
|
if (PsGetCurrentThread() != NULL)
|
||||||
{
|
{
|
||||||
StackLimit = (ULONG)PsGetCurrentThread()->Tcb.StackBase;
|
StackLimit = (ULONG)PsGetCurrentThread()->Tcb.StackBase;
|
||||||
|
@ -594,6 +592,18 @@ KiTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check for a breakpoint that was only for the attention of the debugger.
|
||||||
|
*/
|
||||||
|
if (ExceptionNr == 3 && Tf->Eip == ((ULONG)DbgBreakPointNoBugCheck) + 1)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
EIP is already adjusted by the processor to point to the instruction
|
||||||
|
after the breakpoint.
|
||||||
|
*/
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle user exceptions differently
|
* Handle user exceptions differently
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue