mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
[NTOSKRNL/AMD64]
- Fix trap flags in KiRaiseAssertion - Add some asm debugcode svn path=/trunk/; revision=64191
This commit is contained in:
parent
0d048c3e47
commit
e4d6f25157
|
@ -30,6 +30,55 @@ PUBLIC MsgUnimplemented
|
|||
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 @@ KiInterruptDispatchTemplate:
|
|||
|
||||
|
||||
// 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 @@ KiInterruptDispatchTemplate:
|
|||
|
||||
add rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH
|
||||
ret
|
||||
.ENDP
|
||||
ENDFUNC InternalDispatchException
|
||||
|
||||
|
||||
/* CPU EXCEPTION HANDLERS ****************************************************/
|
||||
|
@ -173,7 +222,7 @@ FUNC KiDivideErrorFault
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiDivideErrorFault
|
||||
|
||||
|
||||
PUBLIC KiDebugTrapOrFault
|
||||
|
@ -181,6 +230,8 @@ FUNC KiDebugTrapOrFault
|
|||
/* 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 @@ KiDebugTrapOrFaultKMode:
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiDebugTrapOrFault
|
||||
|
||||
|
||||
PUBLIC KiNmiInterrupt
|
||||
|
@ -207,7 +258,7 @@ FUNC KiNmiInterrupt
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiNmiInterrupt
|
||||
|
||||
|
||||
PUBLIC KiBreakpointTrap
|
||||
|
@ -228,7 +279,7 @@ KiBreakpointTrapKMode:
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiBreakpointTrap
|
||||
|
||||
|
||||
PUBLIC KiOverflowTrap
|
||||
|
@ -244,7 +295,7 @@ FUNC KiOverflowTrap
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiOverflowTrap
|
||||
|
||||
|
||||
PUBLIC KiBoundFault
|
||||
|
@ -268,7 +319,7 @@ KiBoundFaultUserMode:
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiBoundFault
|
||||
|
||||
|
||||
PUBLIC KiInvalidOpcodeFault
|
||||
|
@ -276,6 +327,12 @@ 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 @@ KiInvalidOpcodeKernel:
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiInvalidOpcodeFault
|
||||
|
||||
|
||||
PUBLIC KiNpxNotAvailableFault
|
||||
|
@ -315,7 +372,7 @@ FUNC KiNpxNotAvailableFault
|
|||
KiNpxNotAvailableFaultExit:
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiNpxNotAvailableFault
|
||||
|
||||
|
||||
PUBLIC KiDoubleFaultAbort
|
||||
|
@ -323,10 +380,15 @@ 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 @@ FUNC KiNpxSegmentOverrunAbort
|
|||
|
||||
/* Bugcheck */
|
||||
Fatal EXCEPTION_NPX_OVERRUN
|
||||
|
||||
jmp $
|
||||
ENDFUNC
|
||||
ENDFUNC KiNpxSegmentOverrunAbort
|
||||
|
||||
|
||||
PUBLIC KiInvalidTssFault
|
||||
|
@ -348,7 +411,7 @@ FUNC KiInvalidTssFault
|
|||
/* Bugcheck */
|
||||
Fatal EXCEPTION_INVALID_TSS
|
||||
jmp $
|
||||
ENDFUNC
|
||||
ENDFUNC KiInvalidTssFault
|
||||
|
||||
|
||||
PUBLIC KiSegmentNotPresentFault
|
||||
|
@ -359,7 +422,7 @@ FUNC KiSegmentNotPresentFault
|
|||
/* Bugcheck */
|
||||
Fatal EXCEPTION_SEGMENT_NOT_PRESENT
|
||||
jmp $
|
||||
ENDFUNC
|
||||
ENDFUNC KiSegmentNotPresentFault
|
||||
|
||||
|
||||
PUBLIC KiStackFault
|
||||
|
@ -370,7 +433,7 @@ FUNC KiStackFault
|
|||
/* Bugcheck */
|
||||
Fatal EXCEPTION_STACK_FAULT
|
||||
jmp $
|
||||
ENDFUNC
|
||||
ENDFUNC KiStackFault
|
||||
|
||||
|
||||
PUBLIC KiGeneralProtectionFault
|
||||
|
@ -378,6 +441,11 @@ 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
|
||||
call KiGeneralProtectionFaultHandler
|
||||
|
@ -404,7 +472,7 @@ KiGpfExit:
|
|||
/* Return */
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiGeneralProtectionFault
|
||||
|
||||
|
||||
PUBLIC KiPageFault
|
||||
|
@ -412,6 +480,16 @@ 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
|
||||
mov [rbp + KTRAP_FRAME_FaultAddress], rdx
|
||||
|
@ -482,7 +560,7 @@ FUNC KiFloatingErrorFault
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiFloatingErrorFault
|
||||
|
||||
|
||||
PUBLIC KiAlignmentFault
|
||||
|
@ -493,7 +571,7 @@ FUNC KiAlignmentFault
|
|||
/* Bugcheck */
|
||||
Fatal EXCEPTION_ALIGNMENT_CHECK
|
||||
jmp $
|
||||
ENDFUNC
|
||||
ENDFUNC KiAlignmentFault
|
||||
|
||||
|
||||
PUBLIC KiMcheckAbort
|
||||
|
@ -504,7 +582,7 @@ FUNC KiMcheckAbort
|
|||
/* Bugcheck */
|
||||
Fatal HEX(12)
|
||||
jmp $
|
||||
ENDFUNC
|
||||
ENDFUNC KiMcheckAbort
|
||||
|
||||
|
||||
PUBLIC KiXmmException
|
||||
|
@ -526,7 +604,7 @@ FUNC KiXmmException
|
|||
KiXmmExit:
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiXmmException
|
||||
|
||||
|
||||
/* SOFTWARE INTERRUPT SERVICES ***********************************************/
|
||||
|
@ -534,7 +612,7 @@ ENDFUNC
|
|||
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,14 +622,16 @@ FUNC KiRaiseAssertion
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiRaiseAssertion
|
||||
|
||||
|
||||
PUBLIC KiDebugServiceTrap
|
||||
.PROC KiDebugServiceTrap
|
||||
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 @@ PUBLIC KiDebugServiceTrap
|
|||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
.ENDP
|
||||
ENDFUNC KiDebugServiceTrap
|
||||
|
||||
|
||||
PUBLIC KiApcInterrupt
|
||||
|
@ -666,7 +746,7 @@ FUNC KiUnexpectedInterrupt
|
|||
#endif
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
ENDFUNC KiUnexpectedInterrupt
|
||||
|
||||
PUBLIC KiInterruptDispatch
|
||||
FUNC KiInterruptDispatch
|
||||
|
|
Loading…
Reference in a new issue