Author: tkreuzer Date: Sat Feb 4 12:29:24 2012 New Revision: 55409
URL: http://svn.reactos.org/svn/reactos?rev=55409&view=rev Log: [ASM] Modify syscall stub macros to be compatible with the new amd64 stubs
Modified: trunk/reactos/include/asm/syscalls.inc
Modified: trunk/reactos/include/asm/syscalls.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/asm/syscalls.inc?re... ============================================================================== --- trunk/reactos/include/asm/syscalls.inc [iso-8859-1] (original) +++ trunk/reactos/include/asm/syscalls.inc [iso-8859-1] Sat Feb 4 12:29:24 2012 @@ -2,14 +2,16 @@ #ifdef _M_IX86 #define KUSER_SHARED_SYSCALL HEX(7ffe0300) #define KGDT_R0_CODE 8 -MACRO(STUBCODE_U, SyscallId, StackBytes) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount) + StackBytes = 4 * ArgCount FPO 0, 0, 0, 0, 0, FRAME_FPO mov eax, SyscallId mov ecx, KUSER_SHARED_SYSCALL call dword ptr [ecx] ret StackBytes ENDM -MACRO(STUBCODE_K, SyscallId, StackBytes) +MACRO(STUBCODE_K, Name, SyscallId, ArgCount) + StackBytes = 4 * &ArgCount FPO 0, 0, 0, 0, 0, FRAME_FPO mov eax, SyscallId lea edx, [esp + 4] @@ -19,31 +21,32 @@ ret StackBytes ENDM #elif defined(_M_AMD64) -MACRO(STUBCODE_U, SyscallId, StackBytes) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount) .ENDPROLOG mov eax, SyscallId mov r10, rcx syscall - ret StackBytes + ret ENDM -MACRO(STUBCODE_K, SyscallId, StackBytes) +MACRO(STUBCODE_K, Name, SyscallId, ArgCount) .ENDPROLOG - mov eax, SyscallId - call KiSystemService - ret StackBytes + EXTERN Nt&Name:PROC + lea rax, Nt&Name[rip] + mov r10, ArgCount * 8 + jmp KiZwSystemService ENDM #elif defined(_M_ARM) -MACRO(STUBCODE_U, SyscallId, StackBytes) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount) swi #SyscallId bx lr ENDM -MACRO(STUBCODE_K, SyscallId, StackBytes) +MACRO(STUBCODE_K, Name, SyscallId, ArgCount) mov ip, lr swi #SyscallId bx ip ENDM #elif defined(_M_PPC) -MACRO(STUBCODE_U, SyscallId, StackBytes) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount) stwu 1,-16(1) mflr 0 stw 0,0(1) @@ -56,13 +59,13 @@ ENDM #define STUBCODE_K STUBCODE_U #elif defined(_M_MIPS) -MACRO(STUBCODE_U, SyscallId, StackBytes) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount) li $8, KUSER_SHARED_SYSCALL lw $8,0($8) j $8 nop ENDM -MACRO(STUBCODE_K, SyscallId, StackBytes) +MACRO(STUBCODE_K, Name, SyscallId, ArgCount) j KiSystemService nop ENDM @@ -71,38 +74,36 @@ #endif
#ifdef _M_IX86 -MACRO(MAKE_LABEL, Name, Stackbytes) - PUBLIC _&Name&@&Stackbytes - _&Name&@&Stackbytes: +MACRO(MAKE_LABEL, Name, StackBytes) + PUBLIC _&Name&@&StackBytes + _&Name&@&StackBytes: ENDM -MACRO(START_PROC, Name, Stackbytes) - PUBLIC _&Name&@&Stackbytes - .PROC _&Name&@&Stackbytes +MACRO(START_PROC, Name, StackBytes) + PUBLIC _&Name&@&StackBytes + .PROC _&Name&@&StackBytes ENDM #else -MACRO(MAKE_LABEL, Name, Stackbytes) +MACRO(MAKE_LABEL, Name, StackBytes) PUBLIC &Name &Name: ENDM -MACRO(START_PROC, Name, Stackbytes) +MACRO(START_PROC, Name, StackBytes) PUBLIC &Name .PROC &Name ENDM #endif
MACRO(STUB_U, Name, ArgCount) - Stackbytes = 4 * &ArgCount - MAKE_LABEL Zw&Name, %Stackbytes - START_PROC Nt&Name, %Stackbytes - STUBCODE_U SyscallId, %Stackbytes + MAKE_LABEL Zw&Name, %ArgCount * 4 + START_PROC Nt&Name, %ArgCount * 4 + STUBCODE_U Name, SyscallId, %ArgCount .ENDP SyscallId = SyscallId + 1 ENDM
MACRO(STUB_K, Name, ArgCount) - Stackbytes = 4 * &ArgCount - START_PROC Zw&Name, %Stackbytes - STUBCODE_K SyscallId, %Stackbytes + START_PROC Zw&Name, %ArgCount * 4 + STUBCODE_K Name, SyscallId, %ArgCount .ENDP SyscallId = SyscallId + 1 ENDM