Author: tkreuzer Date: Thu Sep 18 14:06:31 2014 New Revision: 64191
URL: http://svn.reactos.org/svn/reactos?rev=64191&view=rev Log: [NTOSKRNL/AMD64] - Fix trap flags in KiRaiseAssertion - Add some asm debugcode
Modified: trunk/reactos/ntoskrnl/ke/amd64/trap.S
Modified: trunk/reactos/ntoskrnl/ke/amd64/trap.S URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/amd64/trap.S?re... ============================================================================== --- trunk/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] Thu Sep 18 14:06:31 2014 @@ -30,6 +30,55 @@ MsgUnimplemented: .asciz "WARNING: %s at %s:%d is UNIMPLEMENTED!\n"
+MsgPageFault: +.asciz "Page fault! Code = 0x%x, RIP = %p, FaultingAddress = %p\n" + +MsgGeneralProtFault: +.asciz "General protection fault at %p!\n" + +MsgBreakpointTrap: +.asciz "BreakpointTrap at %p\n" + +MsgUnexpectedInterrupt: +.asciz "UnexpectedInterrupt Vector=0x%02lx\n" + +MsgInvalidOpcodeFault: +.asciz "Invalid opcode fault at %p!\n" + +MsgDoubleFault: +.asciz "Double fault at %p, rbp=%p!\n" + +MsgTrapInfo: +.asciz "Trap: %s at %p\n" + +MACRO(TRAPINFO, func) +LOCAL label1, label2 +#if 0 + jmp label2 +label1: .asciz "\func" +label2: + push rax + push rcx + push rdx + push r8 + push r9 + push r10 + push r11 + sub rsp, 32 + lea rcx, MsgTrapInfo[rip] + lea rdx, 1b[rip] + mov r8, [rbp + KTRAP_FRAME_Rip] + call qword ptr FrLdrDbgPrint[rip] + pop r11 + pop r10 + pop r9 + pop r8 + pop rdx + pop rcx + pop rax + add rsp, 32 +#endif +ENDM
/* Helper Macros *************************************************************/
@@ -87,7 +136,7 @@
// rbp = TrapFrame, eax = ExceptionCode, edx = NumParams, r9,r10,r11 = params -.PROC InternalDispatchException +FUNC InternalDispatchException
/* Allocate stack space for EXCEPTION_RECORD and KEXCEPTION_FRAME */ sub rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH @@ -155,7 +204,7 @@
add rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH ret -.ENDP +ENDFUNC InternalDispatchException
/* CPU EXCEPTION HANDLERS ****************************************************/ @@ -173,7 +222,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiDivideErrorFault
PUBLIC KiDebugTrapOrFault @@ -181,6 +230,8 @@ /* Push pseudo error code */ EnterTrap TF_SAVE_ALL
+ TRAPINFO KiDebugTrapOrFault + /* Check if the frame was from kernelmode */ test word ptr [rbp + KTRAP_FRAME_SegCs], 3 jz KiDebugTrapOrFaultKMode @@ -194,7 +245,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiDebugTrapOrFault
PUBLIC KiNmiInterrupt @@ -207,7 +258,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiNmiInterrupt
PUBLIC KiBreakpointTrap @@ -228,7 +279,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiBreakpointTrap
PUBLIC KiOverflowTrap @@ -244,7 +295,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiOverflowTrap
PUBLIC KiBoundFault @@ -268,13 +319,19 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiBoundFault
PUBLIC KiInvalidOpcodeFault FUNC KiInvalidOpcodeFault /* No error code */ EnterTrap TF_SAVE_ALL + + TRAPINFO KiInvalidOpcodeFault + + mov rdx, [rbp + KTRAP_FRAME_Rip] + lea rcx, MsgInvalidOpcodeFault[rip] + call qword ptr FrLdrDbgPrint[rip]
/* Enable interrupts */ sti @@ -293,7 +350,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiInvalidOpcodeFault
PUBLIC KiNpxNotAvailableFault @@ -315,18 +372,23 @@ KiNpxNotAvailableFaultExit: /* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiNpxNotAvailableFault
PUBLIC KiDoubleFaultAbort FUNC KiDoubleFaultAbort /* No error code */ EnterTrap TF_SAVE_ALL + + lea rcx, MsgDoubleFault[rip] + mov rdx, [rbp + KTRAP_FRAME_FaultAddress] + mov r8, rbp + call qword ptr FrLdrDbgPrint[rip]
/* Bugcheck */ Fatal 8 // EXCEPTION_DOUBLE_FAULT jmp $ -ENDFUNC +ENDFUNC KiDoubleFaultAbort
PUBLIC KiNpxSegmentOverrunAbort @@ -336,8 +398,9 @@
/* Bugcheck */ Fatal EXCEPTION_NPX_OVERRUN + jmp $ -ENDFUNC +ENDFUNC KiNpxSegmentOverrunAbort
PUBLIC KiInvalidTssFault @@ -348,7 +411,7 @@ /* Bugcheck */ Fatal EXCEPTION_INVALID_TSS jmp $ -ENDFUNC +ENDFUNC KiInvalidTssFault
PUBLIC KiSegmentNotPresentFault @@ -359,7 +422,7 @@ /* Bugcheck */ Fatal EXCEPTION_SEGMENT_NOT_PRESENT jmp $ -ENDFUNC +ENDFUNC KiSegmentNotPresentFault
PUBLIC KiStackFault @@ -370,13 +433,18 @@ /* Bugcheck */ Fatal EXCEPTION_STACK_FAULT jmp $ -ENDFUNC +ENDFUNC KiStackFault
PUBLIC KiGeneralProtectionFault FUNC KiGeneralProtectionFault /* We have an error code */ EnterTrap (TF_HAS_ERROR_CODE OR TF_SAVE_ALL) + + //TRAPINFO KiGeneralProtectionFault + //mov rdx, [rbp + KTRAP_FRAME_Rip] + //lea rcx, MsgGeneralProtFault[rip] + //call qword ptr FrLdrDbgPrint[rip]
/* Call the C handler */ mov rcx, rbp @@ -404,13 +472,23 @@ /* Return */ /* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiGeneralProtectionFault
PUBLIC KiPageFault FUNC KiPageFault /* We have an error code */ EnterTrap (TF_HAS_ERROR_CODE OR TF_SAVE_ALL) + + TRAPINFO KiPageFault + +#if 0 + lea rcx, MsgPageFault[rip] + mov rdx, [rbp + KTRAP_FRAME_ErrorCode] + mov r8, [rbp + KTRAP_FRAME_Rip] + mov r9, [rbp + KTRAP_FRAME_FaultAddress] + call qword ptr FrLdrDbgPrint[rip] +#endif
/* Save page fault address */ mov rdx, cr2 @@ -482,7 +560,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiFloatingErrorFault
PUBLIC KiAlignmentFault @@ -493,7 +571,7 @@ /* Bugcheck */ Fatal EXCEPTION_ALIGNMENT_CHECK jmp $ -ENDFUNC +ENDFUNC KiAlignmentFault
PUBLIC KiMcheckAbort @@ -504,7 +582,7 @@ /* Bugcheck */ Fatal HEX(12) jmp $ -ENDFUNC +ENDFUNC KiMcheckAbort
PUBLIC KiXmmException @@ -526,7 +604,7 @@ KiXmmExit: /* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiXmmException
/* SOFTWARE INTERRUPT SERVICES ***********************************************/ @@ -534,7 +612,7 @@ PUBLIC KiRaiseAssertion FUNC KiRaiseAssertion /* We have an error code */ - EnterTrap (TF_SAVE_ALL) + EnterTrap (TF_HAS_ERROR_CODE OR TF_SAVE_ALL)
/* Decrement RIP to point to the INT2C instruction (2 bytes, not 1 like INT3) */ sub qword ptr [rbp + KTRAP_FRAME_Rip], 2 @@ -544,13 +622,15 @@
/* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiRaiseAssertion
PUBLIC KiDebugServiceTrap -.PROC KiDebugServiceTrap - /* No error code */ - EnterTrap TF_SAVE_ALL +FUNC KiDebugServiceTrap + /* No error code */ + EnterTrap TF_SAVE_ALL + + TRAPINFO KiDebugServiceTrap
/* Increase Rip to skip the int3 */ inc qword ptr [rbp + KTRAP_FRAME_Rip] @@ -560,7 +640,7 @@
/* Return */ ExitTrap TF_SAVE_ALL -.ENDP +ENDFUNC KiDebugServiceTrap
PUBLIC KiApcInterrupt @@ -666,7 +746,7 @@ #endif /* Return */ ExitTrap TF_SAVE_ALL -ENDFUNC +ENDFUNC KiUnexpectedInterrupt
PUBLIC KiInterruptDispatch FUNC KiInterruptDispatch