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/ntosk…
==============================================================================
--- 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 */