diff --git a/reactos/dll/ntdll/dispatch/i386/dispatch.S b/reactos/dll/ntdll/dispatch/i386/dispatch.S index 25f7c34bcee..10706e21827 100644 --- a/reactos/dll/ntdll/dispatch/i386/dispatch.S +++ b/reactos/dll/ntdll/dispatch/i386/dispatch.S @@ -184,7 +184,8 @@ _KiRaiseUserExceptionDispatcher@0: PUBLIC _KiUserExceptionDispatcher@8 -_KiUserExceptionDispatcher@8: +.PROC KiUserExceptionDispatcher@8 + FPO 0, 0, 0, 0, 0, FRAME_FPO /* Clear direction flag */ cld @@ -240,9 +241,11 @@ Exit: call _RtlRaiseException@4 ret 8 +.ENDP KiUserExceptionDispatcher@8 PUBLIC _KiIntSystemCall@0 -_KiIntSystemCall@0: +.PROC KiIntSystemCall@0 + FPO 0, 0, 0, 0, 0, FRAME_FPO /* Set stack in EDX and do the interrupt */ lea edx, [esp+8] @@ -251,21 +254,26 @@ _KiIntSystemCall@0: /* Return to caller */ ret +.ENDP KiIntSystemCall@0 PUBLIC _KiFastSystemCall@0 -_KiFastSystemCall@0: +.PROC KiFastSystemCall@0 + FPO 0, 0, 0, 0, 0, FRAME_FPO /* Put ESP in EDX and do the SYSENTER */ mov edx, esp sysenter +.ENDP KiFastSystemCall@0 PUBLIC _KiFastSystemCallRet@0 -_KiFastSystemCallRet@0: +.PROC KiFastSystemCallRet@0 + FPO 0, 0, 0, 0, 0, FRAME_FPO /* Just return to caller */ ret +.ENDP KiFastSystemCallRet@0 PUBLIC _RtlpGetStackLimits@8 _RtlpGetStackLimits@8: diff --git a/reactos/include/asm/asm.inc b/reactos/include/asm/asm.inc index c204283452e..db0acdb525e 100644 --- a/reactos/include/asm/asm.inc +++ b/reactos/include/asm/asm.inc @@ -327,3 +327,10 @@ ENDM #define NUL "\0" #endif + +/* Common definitions for FPO macro + see http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */ +#define FRAME_FPO 0 +#define FRAME_TRAP 1 +#define FRAME_TSS 2 +#define FRAME_NONFPO 3 diff --git a/reactos/include/asm/syscalls.inc b/reactos/include/asm/syscalls.inc index 43b6fe33db1..85ef7a447a7 100644 --- a/reactos/include/asm/syscalls.inc +++ b/reactos/include/asm/syscalls.inc @@ -71,24 +71,42 @@ MACRO(MAKE_LABEL, Name, Stackbytes) PUBLIC _&Name&@&Stackbytes _&Name&@&Stackbytes: ENDM +MACRO(START_PROC, Name, Stackbytes) + PUBLIC _&Name&@&Stackbytes + .PROC &Name&@&Stackbytes + FPO 0, 0, 0, 0, 0, FRAME_FPO +ENDM +MACRO(END_PROC, Name, Stackbytes) + .ENDP &Name&@&Stackbytes +ENDM #else MACRO(MAKE_LABEL, Name, Stackbytes) PUBLIC &Name &Name: ENDM +MACRO(START_PROC, Name, Stackbytes) + PUBLIC &Name + .PROC &Name + FPO 0, 0, 0, 0, 0, FRAME_FPO +ENDM +MACRO(END_PROC, Name, Stackbytes) + .ENDP &Name +ENDM #endif MACRO(STUB_U, Name, ArgCount) Stackbytes = 4 * &ArgCount MAKE_LABEL Zw&Name, %Stackbytes - MAKE_LABEL Nt&Name, %Stackbytes + START_PROC Nt&Name, %Stackbytes STUBCODE_U SyscallId, %Stackbytes + END_PROC Nt&Name, %Stackbytes SyscallId = SyscallId + 1 ENDM MACRO(STUB_K, Name, ArgCount) Stackbytes = 4 * &ArgCount - MAKE_LABEL Zw&Name, %Stackbytes + START_PROC Zw&Name, %Stackbytes STUBCODE_K SyscallId, %Stackbytes + END_PROC Zw&Name, %Stackbytes SyscallId = SyscallId + 1 ENDM diff --git a/reactos/include/reactos/asm.inc b/reactos/include/reactos/asm.inc index b029eb08d45..a99ecfb7074 100644 --- a/reactos/include/reactos/asm.inc +++ b/reactos/include/reactos/asm.inc @@ -271,4 +271,11 @@ code = 1 #endif +/* Common definitions for FPO macro + see http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */ +#define FRAME_FPO 0 +#define FRAME_TRAP 1 +#define FRAME_TSS 2 +#define FRAME_NONFPO 3 + #endif /* _ASM_INC_ */ diff --git a/reactos/ntoskrnl/include/internal/i386/asmmacro.S b/reactos/ntoskrnl/include/internal/i386/asmmacro.S index d220c9a445f..77d989e9011 100644 --- a/reactos/ntoskrnl/include/internal/i386/asmmacro.S +++ b/reactos/ntoskrnl/include/internal/i386/asmmacro.S @@ -216,8 +216,6 @@ MACRO(KiCallHandler, Handler) nop ENDM -#define FRAME_TRAP 1 - MACRO(TRAP_ENTRY, Trap, Flags) EXTERN @&Trap&Handler@4 :PROC PUBLIC _&Trap diff --git a/reactos/ntoskrnl/ke/i386/trap.s b/reactos/ntoskrnl/ke/i386/trap.s index 9955e6daff5..ec95b4d6a3a 100644 --- a/reactos/ntoskrnl/ke/i386/trap.s +++ b/reactos/ntoskrnl/ke/i386/trap.s @@ -126,15 +126,19 @@ _KiInterruptTemplateDispatch: EXTERN @KiSystemServiceHandler@8:PROC PUBLIC _KiSystemService -_KiSystemService: +.PROC KiSystemService + FPO 0, 0, 0, 0, 1, FRAME_TRAP KiEnterTrap (KI_PUSH_FAKE_ERROR_CODE OR KI_NONVOLATILES_ONLY OR KI_DONT_SAVE_SEGS) KiCallHandler @KiSystemServiceHandler@8 +.ENDP KiSystemService EXTERN @KiFastCallEntryHandler@8:PROC PUBLIC _KiFastCallEntry -_KiFastCallEntry: +.PROC KiFastCallEntry + FPO 0, 0, 0, 0, 1, FRAME_TRAP KiEnterTrap (KI_FAST_SYSTEM_CALL OR KI_NONVOLATILES_ONLY OR KI_DONT_SAVE_SEGS) KiCallHandler @KiFastCallEntryHandler@8 +.ENDP KiFastCallEntry PUBLIC _KiStartUnexpectedRange@0 _KiStartUnexpectedRange@0: