mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 16:02:56 +00:00
fixup trap.S. Almost there...
svn path=/branches/ros-amd64-bringup/; revision=45333
This commit is contained in:
parent
e2151932e4
commit
f0c278391b
1 changed files with 97 additions and 62 deletions
|
@ -10,13 +10,18 @@
|
||||||
#include <reactos/asm.h>
|
#include <reactos/asm.h>
|
||||||
#include <ndk/amd64/asm.h>
|
#include <ndk/amd64/asm.h>
|
||||||
|
|
||||||
|
EXTERN _KiDispatchException:PROC
|
||||||
|
EXTERN _FrLdrDbgPrint:PROC
|
||||||
|
EXTERN _KeBugCheckWithTf:PROC
|
||||||
|
EXTERN _MmAccessFault:PROC
|
||||||
|
|
||||||
/* GLOBALS *******************************************************************/
|
/* GLOBALS *******************************************************************/
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
||||||
.global _MsgUnimplemented
|
PUBLIC _MsgUnimplemented
|
||||||
_MsgUnimplemented:
|
_MsgUnimplemented:
|
||||||
.ascii "WARNING: %s at %s:%d is UNIMPLEMENTED!\n\0"
|
.ascii "WARNING: %s at %s:%d is UNIMPLEMENTED!\n"
|
||||||
|
|
||||||
_MsgPageFault:
|
_MsgPageFault:
|
||||||
.ascii "Page fault! Code = 0x%x, RIP = %p, FaultingAddress = %p\n\0"
|
.ascii "Page fault! Code = 0x%x, RIP = %p, FaultingAddress = %p\n\0"
|
||||||
|
@ -39,31 +44,31 @@ _MsgDoubleFault:
|
||||||
_MsgTrapInfo:
|
_MsgTrapInfo:
|
||||||
.ascii "Trap: %s at %p\n\0"
|
.ascii "Trap: %s at %p\n\0"
|
||||||
|
|
||||||
.macro TRAPINFO func
|
MACRO(TRAPINFO, func)
|
||||||
#if 0
|
#if 0
|
||||||
jmp 2f
|
jmp 2f
|
||||||
.equ expr, 12
|
.equ expr, 12
|
||||||
1: .asciz "\func"
|
1: .asciz "\func"
|
||||||
2:
|
2:
|
||||||
sub rsp, 0x20
|
sub rsp, 32
|
||||||
lea rcx, _MsgTrapInfo[rip]
|
lea rcx, RIP(_MsgTrapInfo)
|
||||||
lea rdx, 1b[rip]
|
lea rdx, 1b[rip]
|
||||||
mov r8, [rbp + KTRAP_FRAME_Rip]
|
mov r8, [rbp + KTRAP_FRAME_Rip]
|
||||||
call _FrLdrDbgPrint[rip]
|
call _FrLdrDbgPrint[rip]
|
||||||
add rsp, 0x20
|
add rsp, 32
|
||||||
#endif
|
#endif
|
||||||
.endm
|
ENDM
|
||||||
|
|
||||||
/* Helper Macros *************************************************************/
|
/* Helper Macros *************************************************************/
|
||||||
|
|
||||||
#define TRAPFLAG_VOLATILES 0x01
|
#define TRAPFLAG_VOLATILES HEX(01)
|
||||||
#define TRAPFLAG_NONVOLATILES 0x02
|
#define TRAPFLAG_NONVOLATILES HEX(02)
|
||||||
#define TRAPFLAG_XMM 0x04
|
#define TRAPFLAG_XMM HEX(04)
|
||||||
#define TRAPFLAG_SEGMENTS 0x08
|
#define TRAPFLAG_SEGMENTS HEX(08)
|
||||||
#define TRAPFLAG_DEBUG 0x10
|
#define TRAPFLAG_DEBUG HEX(10)
|
||||||
|
|
||||||
#define TRAPFLAG_SYSTEMSERVICE (TRAPFLAG_VOLATILES|TRAPFLAG_DEBUG)
|
#define TRAPFLAG_SYSTEMSERVICE (TRAPFLAG_VOLATILES|TRAPFLAG_DEBUG)
|
||||||
#define TRAPFLAG_ALL 0xff
|
#define TRAPFLAG_ALL HEX(ff)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stack Layout:
|
* Stack Layout:
|
||||||
|
@ -80,10 +85,10 @@ _MsgTrapInfo:
|
||||||
/*
|
/*
|
||||||
* ENTER_TRAP_FRAME - Allocate SIZE_KTRAP_FRAME and save registers to it
|
* ENTER_TRAP_FRAME - Allocate SIZE_KTRAP_FRAME and save registers to it
|
||||||
*/
|
*/
|
||||||
.macro ENTER_TRAP_FRAME Flags
|
MACRO(ENTER_TRAP_FRAME, Flags)
|
||||||
SIZE_INITIAL_FRAME = 7 * 8
|
SIZE_INITIAL_FRAME = 7 * 8
|
||||||
SIZE_TRAP_FRAME_ALLOC = SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME
|
SIZE_TRAP_FRAME_ALLOC = SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME
|
||||||
TRAPFLAGS = \Flags
|
TRAPFLAGS = VAL(Flags)
|
||||||
|
|
||||||
/* Save rbp */
|
/* Save rbp */
|
||||||
push rbp
|
push rbp
|
||||||
|
@ -177,13 +182,13 @@ endif
|
||||||
|
|
||||||
/* Make sure the direction flag is cleared */
|
/* Make sure the direction flag is cleared */
|
||||||
cld
|
cld
|
||||||
.endm
|
ENDM
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* LEAVE_TRAP_FRAME - Restore registers and free stack space
|
* LEAVE_TRAP_FRAME - Restore registers and free stack space
|
||||||
*/
|
*/
|
||||||
.macro LEAVE_TRAP_FRAME
|
MACRO(LEAVE_TRAP_FRAME)
|
||||||
|
|
||||||
if (TRAPFLAGS AND TRAPFLAG_SEGMENTS)
|
if (TRAPFLAGS AND TRAPFLAG_SEGMENTS)
|
||||||
/* Restore segment selectors */
|
/* Restore segment selectors */
|
||||||
|
@ -232,8 +237,8 @@ endif
|
||||||
mov rbp, [rbp + KTRAP_FRAME_Rbp]
|
mov rbp, [rbp + KTRAP_FRAME_Rbp]
|
||||||
|
|
||||||
/* Adjust stack pointer (plus one qword for rbp, one for error code) */
|
/* Adjust stack pointer (plus one qword for rbp, one for error code) */
|
||||||
add rsp, SIZE_TRAP_FRAME_ALLOC + 0x10
|
add rsp, SIZE_TRAP_FRAME_ALLOC + HEX(10)
|
||||||
.endm
|
ENDM
|
||||||
|
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
@ -242,6 +247,7 @@ endif
|
||||||
.code64
|
.code64
|
||||||
|
|
||||||
ALIGN 8
|
ALIGN 8
|
||||||
|
|
||||||
PUBLIC _InterruptDispatchTable
|
PUBLIC _InterruptDispatchTable
|
||||||
_InterruptDispatchTable:
|
_InterruptDispatchTable:
|
||||||
Vector = 0
|
Vector = 0
|
||||||
|
@ -249,7 +255,7 @@ REPEAT 256
|
||||||
push Vector
|
push Vector
|
||||||
jmp _KiUnexpectedInterrupt
|
jmp _KiUnexpectedInterrupt
|
||||||
ALIGN 8
|
ALIGN 8
|
||||||
Vector = Vector + 1
|
Vector = Vector+1
|
||||||
ENDR
|
ENDR
|
||||||
|
|
||||||
// rbp = TrapFrame, eax = ExceptionCode, edx = NumParams, r9,r10,r11 = params
|
// rbp = TrapFrame, eax = ExceptionCode, edx = NumParams, r9,r10,r11 = params
|
||||||
|
@ -267,9 +273,9 @@ _InternalDispatchException:
|
||||||
mov rax, [rbp + KTRAP_FRAME_Rip]
|
mov rax, [rbp + KTRAP_FRAME_Rip]
|
||||||
mov [rcx + EXCEPTION_RECORD_ExceptionAddress], rax
|
mov [rcx + EXCEPTION_RECORD_ExceptionAddress], rax
|
||||||
mov [rcx + EXCEPTION_RECORD_NumberParameters], edx
|
mov [rcx + EXCEPTION_RECORD_NumberParameters], edx
|
||||||
mov [rcx + EXCEPTION_RECORD_ExceptionInformation + 0x00], r9
|
mov [rcx + EXCEPTION_RECORD_ExceptionInformation + HEX(00)], r9
|
||||||
mov [rcx + EXCEPTION_RECORD_ExceptionInformation + 0x08], r10
|
mov [rcx + EXCEPTION_RECORD_ExceptionInformation + HEX(08)], r10
|
||||||
mov [rcx + EXCEPTION_RECORD_ExceptionInformation + 0x10], r11
|
mov [rcx + EXCEPTION_RECORD_ExceptionInformation + HEX(10)], r11
|
||||||
|
|
||||||
/* Set up KEXCEPTION_FRAME */
|
/* Set up KEXCEPTION_FRAME */
|
||||||
mov rax, [rbp + KTRAP_FRAME_Rbp]
|
mov rax, [rbp + KTRAP_FRAME_Rbp]
|
||||||
|
@ -327,7 +333,8 @@ PUBLIC _KiDivideErrorFault
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiDivideErrorFault
|
UNIMPLEMENTED KiDivideErrorFault
|
||||||
|
|
||||||
|
@ -339,13 +346,14 @@ PUBLIC _KiDebugTrapOrFault
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
||||||
|
|
||||||
TRAPINFO KiDebugTrapOrFault
|
TRAPINFO KiDebugTrapOrFault
|
||||||
|
|
||||||
/* Checkif the frame was from kernelmode */
|
/* Check if the frame was from kernelmode */
|
||||||
test word ptr [rbp + KTRAP_FRAME_SegCs], 3
|
test word ptr [rbp + KTRAP_FRAME_SegCs], 3
|
||||||
jz KiDebugTrapOrFaultKMode
|
jz KiDebugTrapOrFaultKMode
|
||||||
|
|
||||||
|
@ -372,7 +380,8 @@ PUBLIC _KiNmiInterrupt
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiNmiInterrupt
|
UNIMPLEMENTED KiNmiInterrupt
|
||||||
|
|
||||||
|
@ -384,15 +393,16 @@ PUBLIC _KiBreakpointTrap
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
||||||
|
|
||||||
TRAPINFO KiBreakpointTrap
|
TRAPINFO KiBreakpointTrap
|
||||||
|
|
||||||
// lea rcx, _MsgBreakpointTrap[rip]
|
// lea rcx, RIP(_MsgBreakpointTrap)
|
||||||
// mov rdx, rsp
|
// mov rdx, rsp
|
||||||
// call _FrLdrDbgPrint[rip]
|
// call RIP(_FrLdrDbgPrint)
|
||||||
|
|
||||||
/* Dispatch the exception */
|
/* Dispatch the exception */
|
||||||
mov eax, STATUS_BREAKPOINT
|
mov eax, STATUS_BREAKPOINT
|
||||||
|
@ -412,7 +422,8 @@ PUBLIC _KiOverflowTrap
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiOverflowTrap
|
UNIMPLEMENTED KiOverflowTrap
|
||||||
jmp $
|
jmp $
|
||||||
|
@ -425,11 +436,12 @@ PUBLIC _KiBoundFault
|
||||||
push 0
|
push 0
|
||||||
.allocstack 8
|
.allocstack 8
|
||||||
|
|
||||||
sub rsp, 0x20
|
sub rsp, 32
|
||||||
.allocstack 0x20
|
.allocstack 32
|
||||||
|
|
||||||
mov [rsp + 8], rbx
|
mov [rsp + 8], rbx
|
||||||
.savereg rbx, 8
|
.savereg rbx, 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiBoundFault
|
UNIMPLEMENTED KiBoundFault
|
||||||
|
|
||||||
|
@ -441,7 +453,8 @@ PUBLIC _KiInvalidOpcodeFault
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
||||||
|
|
||||||
|
@ -450,8 +463,8 @@ PUBLIC _KiInvalidOpcodeFault
|
||||||
// DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0
|
// DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0
|
||||||
|
|
||||||
mov rdx, [rbp + KTRAP_FRAME_Rip]
|
mov rdx, [rbp + KTRAP_FRAME_Rip]
|
||||||
lea rcx, _MsgInvalidOpcodeFault[rip]
|
lea rcx, RIP(_MsgInvalidOpcodeFault)
|
||||||
call _FrLdrDbgPrint[rip]
|
call RIP(_FrLdrDbgPrint)
|
||||||
jmp $
|
jmp $
|
||||||
|
|
||||||
/* Return */
|
/* Return */
|
||||||
|
@ -464,7 +477,8 @@ PUBLIC _KiNpxNotAvailableFault
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiNpxNotAvailableFault
|
UNIMPLEMENTED KiNpxNotAvailableFault
|
||||||
|
|
||||||
|
@ -476,20 +490,21 @@ PUBLIC _KiDoubleFaultAbort
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
||||||
|
|
||||||
lea rcx, _MsgDoubleFault[rip]
|
lea rcx, RIP(_MsgDoubleFault)
|
||||||
mov rdx, [rbp + KTRAP_FRAME_FaultAddress]
|
mov rdx, [rbp + KTRAP_FRAME_FaultAddress]
|
||||||
mov r8, rbp
|
mov r8, rbp
|
||||||
call _FrLdrDbgPrint[rip]
|
call RIP(_FrLdrDbgPrint)
|
||||||
|
|
||||||
/* Bugcheck code UNEXPECTED_KERNEL_MODE_TRAP */
|
/* Bugcheck code UNEXPECTED_KERNEL_MODE_TRAP */
|
||||||
mov rcx, 0x0000007F
|
mov rcx, HEX(0000007F)
|
||||||
|
|
||||||
/* Set double fault parameters */
|
/* Set double fault parameters */
|
||||||
mov rdx, 0x00000008 // EXCEPTION_DOUBLE_FAULT
|
mov rdx, 8 // EXCEPTION_DOUBLE_FAULT
|
||||||
mov r8, 0
|
mov r8, 0
|
||||||
mov r9, 0
|
mov r9, 0
|
||||||
mov [rbp + KTRAP_FRAME_P5], rbp // trap frame (HACKY)
|
mov [rbp + KTRAP_FRAME_P5], rbp // trap frame (HACKY)
|
||||||
|
@ -504,7 +519,8 @@ PUBLIC _KiNpxSegmentOverrunAbort
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiNpxSegmentOverrunAbort
|
UNIMPLEMENTED KiNpxSegmentOverrunAbort
|
||||||
|
|
||||||
|
@ -515,6 +531,7 @@ PUBLIC _KiInvalidTssFault
|
||||||
.PROC _KiInvalidTssFault
|
.PROC _KiInvalidTssFault
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
/* We have an error code */
|
/* We have an error code */
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiInvalidTssFault
|
UNIMPLEMENTED KiInvalidTssFault
|
||||||
|
|
||||||
|
@ -525,6 +542,7 @@ PUBLIC _KiSegmentNotPresentFault
|
||||||
.PROC _KiSegmentNotPresentFault
|
.PROC _KiSegmentNotPresentFault
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
/* We have an error code */
|
/* We have an error code */
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiSegmentNotPresentFault
|
UNIMPLEMENTED KiSegmentNotPresentFault
|
||||||
|
|
||||||
|
@ -535,6 +553,7 @@ PUBLIC _KiStackFault
|
||||||
.PROC _KiStackFault
|
.PROC _KiStackFault
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
/* We have an error code */
|
/* We have an error code */
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiStackFault
|
UNIMPLEMENTED KiStackFault
|
||||||
|
|
||||||
|
@ -545,6 +564,7 @@ PUBLIC _KiGeneralProtectionFault
|
||||||
.PROC _KiGeneralProtectionFault
|
.PROC _KiGeneralProtectionFault
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
/* We have an error code */
|
/* We have an error code */
|
||||||
|
.endprolog
|
||||||
|
|
||||||
cli
|
cli
|
||||||
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
||||||
|
@ -552,10 +572,10 @@ PUBLIC _KiGeneralProtectionFault
|
||||||
TRAPINFO KiGeneralProtectionFault
|
TRAPINFO KiGeneralProtectionFault
|
||||||
|
|
||||||
mov rdx, [rbp + KTRAP_FRAME_Rip]
|
mov rdx, [rbp + KTRAP_FRAME_Rip]
|
||||||
lea rcx, _MsgGeneralProtFault[rip]
|
lea rcx, RIP(_MsgGeneralProtFault)
|
||||||
call _FrLdrDbgPrint[rip]
|
call RIP(_FrLdrDbgPrint)
|
||||||
|
|
||||||
/* Checkif this was from user-mode */
|
/* Check if this was from user-mode */
|
||||||
cmp byte ptr [rbp + KTRAP_FRAME_PreviousMode], KernelMode
|
cmp byte ptr [rbp + KTRAP_FRAME_PreviousMode], KernelMode
|
||||||
jnz KiGpfUserMode
|
jnz KiGpfUserMode
|
||||||
|
|
||||||
|
@ -564,33 +584,33 @@ PUBLIC _KiGeneralProtectionFault
|
||||||
mov rax, [rax]
|
mov rax, [rax]
|
||||||
|
|
||||||
/* Check for MSR failure */
|
/* Check for MSR failure */
|
||||||
cmp al, 0xF
|
cmp al, HEX(0F)
|
||||||
jz KiGpfMsr
|
jz KiGpfMsr
|
||||||
|
|
||||||
/* Check for IRET */
|
/* Check for IRET */
|
||||||
cmp ax, 0xCF48
|
cmp ax, HEX(0CF48)
|
||||||
je KiGpfIret
|
je KiGpfIret
|
||||||
|
|
||||||
/* Check for pop ds/es/fs/gs */
|
/* Check for pop ds/es/fs/gs */
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
cmp al, 0x1F
|
cmp al, HEX(1F)
|
||||||
jz KiGpfPopSegDs
|
jz KiGpfPopSegDs
|
||||||
cmp al, 0x07
|
cmp al, HEX(07)
|
||||||
jz KiGpfPopSegEs
|
jz KiGpfPopSegEs
|
||||||
cmp ax, 0xA10F
|
cmp ax, HEX(0A10F)
|
||||||
jz KiGpfPopSegFs
|
jz KiGpfPopSegFs
|
||||||
cmp ax, 0xA90F
|
cmp ax, HEX(0A90F)
|
||||||
jz KiGpfPopSegGs
|
jz KiGpfPopSegGs
|
||||||
|
|
||||||
|
|
||||||
mov dx, 0x002B // KGDT64_R3_DATA | RPL_MASK
|
mov dx, HEX(002B) // KGDT64_R3_DATA | RPL_MASK
|
||||||
cmp [rbp + KTRAP_FRAME_SegDs], dx
|
cmp [rbp + KTRAP_FRAME_SegDs], dx
|
||||||
jne KiGpfPopSegDs
|
jne KiGpfPopSegDs
|
||||||
cmp [rbp + KTRAP_FRAME_SegEs], dx
|
cmp [rbp + KTRAP_FRAME_SegEs], dx
|
||||||
jne KiGpfPopSegEs
|
jne KiGpfPopSegEs
|
||||||
cmp [rbp + KTRAP_FRAME_SegGs], dx
|
cmp [rbp + KTRAP_FRAME_SegGs], dx
|
||||||
jne KiGpfPopSegGs
|
jne KiGpfPopSegGs
|
||||||
mov dx, 0x0053 // KGDT64_R3_CMTEB | RPL_MASK
|
mov dx, HEX(0053) // KGDT64_R3_CMTEB | RPL_MASK
|
||||||
cmp [rbp + KTRAP_FRAME_SegFs], dx
|
cmp [rbp + KTRAP_FRAME_SegFs], dx
|
||||||
jne KiGpfPopSegFs
|
jne KiGpfPopSegFs
|
||||||
|
|
||||||
|
@ -598,7 +618,7 @@ KiGpfFatal:
|
||||||
|
|
||||||
/* Bugcheck */
|
/* Bugcheck */
|
||||||
mov ecx, UNEXPECTED_KERNEL_MODE_TRAP
|
mov ecx, UNEXPECTED_KERNEL_MODE_TRAP
|
||||||
mov rdx, 0x0000D // EXCEPTION_GP_FAULT
|
mov rdx, HEX(000D) // EXCEPTION_GP_FAULT
|
||||||
xor r8, r8
|
xor r8, r8
|
||||||
mov r9, [rbp + KTRAP_FRAME_ErrorCode] // error code
|
mov r9, [rbp + KTRAP_FRAME_ErrorCode] // error code
|
||||||
sub rsp, 8
|
sub rsp, 8
|
||||||
|
@ -657,17 +677,18 @@ PUBLIC _KiPageFault
|
||||||
.PROC _KiPageFault
|
.PROC _KiPageFault
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
/* We have an error code */
|
/* We have an error code */
|
||||||
|
.endprolog
|
||||||
|
|
||||||
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
||||||
|
|
||||||
TRAPINFO KiPageFault
|
TRAPINFO KiPageFault
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
lea rcx, _MsgPageFault[rip]
|
lea rcx, RIP(_MsgPageFault)
|
||||||
mov rdx, [rbp + KTRAP_FRAME_ErrorCode]
|
mov rdx, [rbp + KTRAP_FRAME_ErrorCode]
|
||||||
mov r8, [rbp + KTRAP_FRAME_Rip]
|
mov r8, [rbp + KTRAP_FRAME_Rip]
|
||||||
mov r9, [rbp + KTRAP_FRAME_FaultAddress]
|
mov r9, [rbp + KTRAP_FRAME_FaultAddress]
|
||||||
call _FrLdrDbgPrint[rip]
|
call RIP(_FrLdrDbgPrint)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Save page fault address */
|
/* Save page fault address */
|
||||||
|
@ -727,7 +748,8 @@ PUBLIC _KiFloatingErrorFault
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x8
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiFloatingErrorFault
|
UNIMPLEMENTED KiFloatingErrorFault
|
||||||
|
|
||||||
|
@ -738,6 +760,7 @@ PUBLIC _KiAlignmentFault
|
||||||
.PROC _KiAlignmentFault
|
.PROC _KiAlignmentFault
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
/* We have an error code */
|
/* We have an error code */
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiAlignmentFault
|
UNIMPLEMENTED KiAlignmentFault
|
||||||
|
|
||||||
|
@ -749,7 +772,8 @@ PUBLIC _KiMcheckAbort
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x08
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiMcheckAbort
|
UNIMPLEMENTED KiMcheckAbort
|
||||||
|
|
||||||
|
@ -761,7 +785,8 @@ PUBLIC _KiXmmException
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x08
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiXmmException
|
UNIMPLEMENTED KiXmmException
|
||||||
|
|
||||||
|
@ -771,6 +796,7 @@ PUBLIC _KiXmmException
|
||||||
PUBLIC _KiApcInterrupt
|
PUBLIC _KiApcInterrupt
|
||||||
.PROC _KiApcInterrupt
|
.PROC _KiApcInterrupt
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiApcInterrupt
|
UNIMPLEMENTED KiApcInterrupt
|
||||||
|
|
||||||
|
@ -780,6 +806,7 @@ PUBLIC _KiApcInterrupt
|
||||||
PUBLIC _KiRaiseAssertion
|
PUBLIC _KiRaiseAssertion
|
||||||
.PROC _KiRaiseAssertion
|
.PROC _KiRaiseAssertion
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiRaiseAssertion
|
UNIMPLEMENTED KiRaiseAssertion
|
||||||
|
|
||||||
|
@ -791,7 +818,8 @@ PUBLIC _KiDebugServiceTrap
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
/* Push pseudo error code */
|
/* Push pseudo error code */
|
||||||
push 0
|
push 0
|
||||||
.allocstack 0x08
|
.allocstack 8
|
||||||
|
.endprolog
|
||||||
|
|
||||||
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
ENTER_TRAP_FRAME TRAPFLAG_ALL
|
||||||
|
|
||||||
|
@ -815,6 +843,7 @@ PUBLIC _KiDebugServiceTrap
|
||||||
PUBLIC _KiDpcInterrupt
|
PUBLIC _KiDpcInterrupt
|
||||||
.PROC _KiDpcInterrupt
|
.PROC _KiDpcInterrupt
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiDpcInterrupt
|
UNIMPLEMENTED KiDpcInterrupt
|
||||||
|
|
||||||
|
@ -824,6 +853,7 @@ PUBLIC _KiDpcInterrupt
|
||||||
PUBLIC _KiIpiInterrupt
|
PUBLIC _KiIpiInterrupt
|
||||||
.PROC _KiIpiInterrupt
|
.PROC _KiIpiInterrupt
|
||||||
.pushframe 1
|
.pushframe 1
|
||||||
|
.endprolog
|
||||||
|
|
||||||
UNIMPLEMENTED KiIpiInterrupt
|
UNIMPLEMENTED KiIpiInterrupt
|
||||||
|
|
||||||
|
@ -833,6 +863,7 @@ PUBLIC _KiIpiInterrupt
|
||||||
PUBLIC _KiUnexpectedInterrupt
|
PUBLIC _KiUnexpectedInterrupt
|
||||||
.PROC _KiUnexpectedInterrupt
|
.PROC _KiUnexpectedInterrupt
|
||||||
.pushframe 0
|
.pushframe 0
|
||||||
|
.endprolog
|
||||||
|
|
||||||
/* The error code is the vector */
|
/* The error code is the vector */
|
||||||
|
|
||||||
|
@ -853,6 +884,10 @@ PUBLIC _KiUnexpectedInterrupt
|
||||||
|
|
||||||
PUBLIC _KiSystemFatalException
|
PUBLIC _KiSystemFatalException
|
||||||
.PROC _KiSystemFatalException
|
.PROC _KiSystemFatalException
|
||||||
|
.endprolog
|
||||||
|
|
||||||
.ENDP _KiSystemFatalException
|
.ENDP _KiSystemFatalException
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue