[ASM]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 4 Feb 2012 12:29:24 +0000 (12:29 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 4 Feb 2012 12:29:24 +0000 (12:29 +0000)
Modify syscall stub macros to be compatible with the new amd64 stubs

svn path=/trunk/; revision=55409

reactos/include/asm/syscalls.inc

index 44b1bad..c1d58ac 100644 (file)
@@ -2,14 +2,16 @@
 #ifdef _M_IX86\r
 #define KUSER_SHARED_SYSCALL HEX(7ffe0300)\r
 #define KGDT_R0_CODE 8\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+    StackBytes = 4 * ArgCount\r
     FPO 0, 0, 0, 0, 0, FRAME_FPO\r
     mov eax, SyscallId\r
     mov ecx, KUSER_SHARED_SYSCALL\r
     call dword ptr [ecx]\r
     ret StackBytes\r
 ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
+    StackBytes = 4 * &ArgCount\r
     FPO 0, 0, 0, 0, 0, FRAME_FPO\r
     mov eax, SyscallId\r
     lea edx, [esp + 4]\r
@@ -19,31 +21,32 @@ MACRO(STUBCODE_K, SyscallId, StackBytes)
     ret StackBytes\r
 ENDM\r
 #elif defined(_M_AMD64)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
     .ENDPROLOG\r
     mov eax, SyscallId\r
     mov r10, rcx\r
     syscall\r
-    ret StackBytes\r
+    ret\r
 ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
     .ENDPROLOG\r
-    mov eax, SyscallId\r
-    call KiSystemService\r
-    ret StackBytes\r
+    EXTERN Nt&Name:PROC\r
+    lea rax, Nt&Name[rip]\r
+    mov r10, ArgCount * 8\r
+    jmp KiZwSystemService\r
 ENDM\r
 #elif defined(_M_ARM)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
     swi #SyscallId\r
     bx lr\r
 ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
     mov ip, lr\r
     swi #SyscallId\r
     bx ip\r
 ENDM\r
 #elif defined(_M_PPC)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
     stwu 1,-16(1)\r
     mflr 0\r
     stw  0,0(1)\r
@@ -56,13 +59,13 @@ MACRO(STUBCODE_U, SyscallId, StackBytes)
 ENDM\r
 #define STUBCODE_K STUBCODE_U\r
 #elif defined(_M_MIPS)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
     li $8, KUSER_SHARED_SYSCALL\r
     lw $8,0($8)\r
     j $8\r
     nop\r
 ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
     j KiSystemService\r
     nop\r
 ENDM\r
@@ -71,38 +74,36 @@ ENDM
 #endif\r
 \r
 #ifdef _M_IX86\r
-MACRO(MAKE_LABEL, Name, Stackbytes)\r
-    PUBLIC _&Name&@&Stackbytes\r
-    _&Name&@&Stackbytes:\r
+MACRO(MAKE_LABEL, Name, StackBytes)\r
+    PUBLIC _&Name&@&StackBytes\r
+    _&Name&@&StackBytes:\r
 ENDM\r
-MACRO(START_PROC, Name, Stackbytes)\r
-    PUBLIC _&Name&@&Stackbytes\r
-    .PROC _&Name&@&Stackbytes\r
+MACRO(START_PROC, Name, StackBytes)\r
+    PUBLIC _&Name&@&StackBytes\r
+    .PROC _&Name&@&StackBytes\r
 ENDM\r
 #else\r
-MACRO(MAKE_LABEL, Name, Stackbytes)\r
+MACRO(MAKE_LABEL, Name, StackBytes)\r
     PUBLIC &Name\r
     &Name:\r
 ENDM\r
-MACRO(START_PROC, Name, Stackbytes)\r
+MACRO(START_PROC, Name, StackBytes)\r
     PUBLIC &Name\r
     .PROC &Name\r
 ENDM\r
 #endif\r
 \r
 MACRO(STUB_U, Name, ArgCount)\r
-    Stackbytes = 4 * &ArgCount\r
-    MAKE_LABEL Zw&Name, %Stackbytes\r
-    START_PROC Nt&Name, %Stackbytes\r
-    STUBCODE_U SyscallId, %Stackbytes\r
+    MAKE_LABEL Zw&Name, %ArgCount * 4\r
+    START_PROC Nt&Name, %ArgCount * 4\r
+    STUBCODE_U Name, SyscallId, %ArgCount\r
     .ENDP\r
     SyscallId = SyscallId + 1\r
 ENDM\r
 \r
 MACRO(STUB_K, Name, ArgCount)\r
-    Stackbytes = 4 * &ArgCount\r
-    START_PROC Zw&Name, %Stackbytes\r
-    STUBCODE_K SyscallId, %Stackbytes\r
+    START_PROC Zw&Name, %ArgCount * 4\r
+    STUBCODE_K Name, SyscallId, %ArgCount\r
     .ENDP\r
     SyscallId = SyscallId + 1\r
 ENDM\r