Author: tkreuzer Date: Sat Jan 30 04:12:26 2010 New Revision: 45336
URL: http://svn.reactos.org/svn/reactos?rev=45336&view=rev Log: trap.S is now fully MASM/ML compatible
Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S
Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskr... ============================================================================== --- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] Sat Jan 30 04:12:26 2010 @@ -11,7 +11,7 @@ #include <ndk/amd64/asm.h>
EXTERN _KiDispatchException:PROC -EXTERN _FrLdrDbgPrint:PROC +EXTERN _FrLdrDbgPrint:DWORD EXTERN _KeBugCheckWithTf:PROC EXTERN _MmAccessFault:PROC
@@ -45,16 +45,16 @@ .ascii "Trap: %s at %p\n\0"
MACRO(TRAPINFO, func) +LOCAL label1, label2 #if 0 - jmp 2f - .equ expr, 12 -1: .asciz "\func" -2: + jmp label2 +label1: .asciz "\func" +label2: sub rsp, 32 lea rcx, RIP(_MsgTrapInfo) lea rdx, 1b[rip] mov r8, [rbp + KTRAP_FRAME_Rip] - call _FrLdrDbgPrint[rip] + call qword ptr RIP(_FrLdrDbgPrint) add rsp, 32 #endif ENDM @@ -86,6 +86,7 @@ * ENTER_TRAP_FRAME - Allocate SIZE_KTRAP_FRAME and save registers to it */ MACRO(ENTER_TRAP_FRAME, Flags) +LOCAL dont_swap SIZE_INITIAL_FRAME = 7 * 8 SIZE_TRAP_FRAME_ALLOC = SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME TRAPFLAGS = VAL(Flags) @@ -145,9 +146,9 @@ mov ax, [rbp + KTRAP_FRAME_SegCs] and al, 1 mov [rbp + KTRAP_FRAME_PreviousMode], al - jz 1f + jz dont_swap swapgs -1: +dont_swap:
/* Save previous irql */ mov rax, cr8 @@ -189,7 +190,7 @@ * LEAVE_TRAP_FRAME - Restore registers and free stack space */ MACRO(LEAVE_TRAP_FRAME) - +LOCAL dont_swap_back if (TRAPFLAGS AND TRAPFLAG_SEGMENTS) /* Restore segment selectors */ mov ax, [rbp + KTRAP_FRAME_SegDs] @@ -201,9 +202,9 @@ endif
test byte ptr [rbp + KTRAP_FRAME_PreviousMode], 1 - jz 1f + jz dont_swap_back swapgs -1: +dont_swap_back:
if (TRAPFLAGS AND TRAPFLAG_NONVOLATILES) /* Restore non-volatile registers */ @@ -330,7 +331,7 @@
PUBLIC _KiDivideErrorFault .PROC _KiDivideErrorFault - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -343,7 +344,7 @@
PUBLIC _KiDebugTrapOrFault .PROC _KiDebugTrapOrFault - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -377,7 +378,7 @@
PUBLIC _KiNmiInterrupt .PROC _KiNmiInterrupt - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -390,7 +391,7 @@
PUBLIC _KiBreakpointTrap .PROC _KiBreakpointTrap - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -402,7 +403,7 @@
// lea rcx, RIP(_MsgBreakpointTrap) // mov rdx, rsp -// call RIP(_FrLdrDbgPrint) +// call qword ptr RIP(_FrLdrDbgPrint)
/* Dispatch the exception */ mov eax, STATUS_BREAKPOINT @@ -419,7 +420,7 @@
PUBLIC _KiOverflowTrap .PROC _KiOverflowTrap - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -431,7 +432,7 @@
PUBLIC _KiBoundFault .PROC _KiBoundFault - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -450,7 +451,7 @@
PUBLIC _KiInvalidOpcodeFault .PROC _KiInvalidOpcodeFault - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -464,7 +465,7 @@
mov rdx, [rbp + KTRAP_FRAME_Rip] lea rcx, RIP(_MsgInvalidOpcodeFault) - call RIP(_FrLdrDbgPrint) + call qword ptr RIP(_FrLdrDbgPrint) jmp $
/* Return */ @@ -474,7 +475,7 @@
PUBLIC _KiNpxNotAvailableFault .PROC _KiNpxNotAvailableFault - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -487,7 +488,7 @@
PUBLIC _KiDoubleFaultAbort .PROC _KiDoubleFaultAbort - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -498,7 +499,7 @@ lea rcx, RIP(_MsgDoubleFault) mov rdx, [rbp + KTRAP_FRAME_FaultAddress] mov r8, rbp - call RIP(_FrLdrDbgPrint) + call qword ptr RIP(_FrLdrDbgPrint)
/* Bugcheck code UNEXPECTED_KERNEL_MODE_TRAP */ mov rcx, HEX(0000007F) @@ -516,7 +517,7 @@
PUBLIC _KiNpxSegmentOverrunAbort .PROC _KiNpxSegmentOverrunAbort - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -529,7 +530,7 @@
PUBLIC _KiInvalidTssFault .PROC _KiInvalidTssFault - .pushframe 1 + .pushframe code /* We have an error code */ .endprolog
@@ -540,7 +541,7 @@
PUBLIC _KiSegmentNotPresentFault .PROC _KiSegmentNotPresentFault - .pushframe 1 + .pushframe /* We have an error code */ .endprolog
@@ -551,7 +552,7 @@
PUBLIC _KiStackFault .PROC _KiStackFault - .pushframe 1 + .pushframe code /* We have an error code */ .endprolog
@@ -562,7 +563,7 @@
PUBLIC _KiGeneralProtectionFault .PROC _KiGeneralProtectionFault - .pushframe 1 + .pushframe code /* We have an error code */ .endprolog
@@ -573,7 +574,7 @@
mov rdx, [rbp + KTRAP_FRAME_Rip] lea rcx, RIP(_MsgGeneralProtFault) - call RIP(_FrLdrDbgPrint) + call qword ptr RIP(_FrLdrDbgPrint)
/* Check if this was from user-mode */ cmp byte ptr [rbp + KTRAP_FRAME_PreviousMode], KernelMode @@ -675,7 +676,7 @@
PUBLIC _KiPageFault .PROC _KiPageFault - .pushframe 1 + .pushframe code /* We have an error code */ .endprolog
@@ -688,7 +689,7 @@ mov rdx, [rbp + KTRAP_FRAME_ErrorCode] mov r8, [rbp + KTRAP_FRAME_Rip] mov r9, [rbp + KTRAP_FRAME_FaultAddress] - call RIP(_FrLdrDbgPrint) + call qword ptr RIP(_FrLdrDbgPrint) #endif
/* Save page fault address */ @@ -745,7 +746,7 @@
PUBLIC _KiFloatingErrorFault .PROC _KiFloatingErrorFault - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -758,7 +759,7 @@
PUBLIC _KiAlignmentFault .PROC _KiAlignmentFault - .pushframe 1 + .pushframe code /* We have an error code */ .endprolog
@@ -769,7 +770,7 @@
PUBLIC _KiMcheckAbort .PROC _KiMcheckAbort - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -782,7 +783,7 @@
PUBLIC _KiXmmException .PROC _KiXmmException - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -795,7 +796,7 @@
PUBLIC _KiApcInterrupt .PROC _KiApcInterrupt - .pushframe 1 + .pushframe code .endprolog
UNIMPLEMENTED KiApcInterrupt @@ -805,7 +806,7 @@
PUBLIC _KiRaiseAssertion .PROC _KiRaiseAssertion - .pushframe 1 + .pushframe code .endprolog
UNIMPLEMENTED KiRaiseAssertion @@ -815,7 +816,7 @@
PUBLIC _KiDebugServiceTrap .PROC _KiDebugServiceTrap - .pushframe 0 + .pushframe /* Push pseudo error code */ push 0 .allocstack 8 @@ -842,7 +843,7 @@
PUBLIC _KiDpcInterrupt .PROC _KiDpcInterrupt - .pushframe 1 + .pushframe code .endprolog
UNIMPLEMENTED KiDpcInterrupt @@ -852,7 +853,7 @@
PUBLIC _KiIpiInterrupt .PROC _KiIpiInterrupt - .pushframe 1 + .pushframe code .endprolog
UNIMPLEMENTED KiIpiInterrupt @@ -862,7 +863,7 @@
PUBLIC _KiUnexpectedInterrupt .PROC _KiUnexpectedInterrupt - .pushframe 0 + .pushframe .endprolog
/* The error code is the vector */