[CONSRV]
[reactos.git] / include / asm / syscalls.inc
index a0d2832..c1d58ac 100644 (file)
-
-#ifdef _M_IX86
-#define KUSER_SHARED_SYSCALL HEX(7ffe0300)
-#define KGDT_R0_CODE 8
-MACRO(STUBCODE_U, SyscallId, StackBytes)
-    mov eax, SyscallId
-    mov ecx, KUSER_SHARED_SYSCALL
-    call dword ptr [ecx]
-    ret StackBytes
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
-    mov eax, SyscallId
-    lea edx, [esp + 4]
-    pushf
-    push KGDT_R0_CODE
-    call _KiSystemService
-    ret StackBytes
-ENDM
-#elif defined(_M_AMD64)
-MACRO(STUBCODE_U, SyscallId, StackBytes)
-    mov eax, SyscallId
-    mov r10, rcx
-    syscall
-    ret StackBytes
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
-    mov eax, SyscallId
-    call KiSystemService
-    ret StackBytes
-ENDM
-#elif defined(_M_ARM)
-MACRO(STUBCODE_U, SyscallId, StackBytes)
-    swi #SyscallId
-    bx lr
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
-    mov ip, lr
-    swi #SyscallId
-    bx ip
-ENDM
-#elif defined(_M_PPC)
-MACRO(STUBCODE_U, SyscallId, StackBytes)
-    stwu 1,-16(1)
-    mflr 0
-    stw  0,0(1)
-    li   0, SyscallId
-    sc
-    lwz 0,0(1)
-    mtlr 0
-    addi 1,1,16
-    blr
-ENDM
-#define STUBCODE_K STUBCODE_U
-#elif defined(_M_MIPS)
-MACRO(STUBCODE_U, SyscallId, StackBytes)
-    li $8, KUSER_SHARED_SYSCALL
-    lw $8,0($8)
-    j $8
-    nop
-ENDM
-MACRO(STUBCODE_K, SyscallId, StackBytes)
-    j KiSystemService
-    nop
-ENDM
-#else
-#error unsupported architecture
-#endif
-
-#ifdef _M_IX86
-MACRO(MAKE_LABEL, Name, Stackbytes)
-    PUBLIC _&Name&@&Stackbytes
-    _&Name&@&Stackbytes:
-ENDM
-#else
-MACRO(MAKE_LABEL, Name, Stackbytes)
-    PUBLIC &Name
-    &Name:
-ENDM
-#endif
-
-MACRO(STUB_U, Name, ArgCount)
-    Stackbytes = 4 * &ArgCount
-    MAKE_LABEL Zw&Name, %Stackbytes
-    MAKE_LABEL Nt&Name, %Stackbytes
-    STUBCODE_U SyscallId, %Stackbytes
-    SyscallId = SyscallId + 1
-ENDM
-
-MACRO(STUB_K, Name, ArgCount)
-    Stackbytes = 4 * &ArgCount
-    MAKE_LABEL Zw&Name, %Stackbytes
-    STUBCODE_K SyscallId, %Stackbytes
-    SyscallId = SyscallId + 1
-ENDM
+\r
+#ifdef _M_IX86\r
+#define KUSER_SHARED_SYSCALL HEX(7ffe0300)\r
+#define KGDT_R0_CODE 8\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, 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
+    pushfd\r
+    push KGDT_R0_CODE\r
+    call _KiSystemService\r
+    ret StackBytes\r
+ENDM\r
+#elif defined(_M_AMD64)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+    .ENDPROLOG\r
+    mov eax, SyscallId\r
+    mov r10, rcx\r
+    syscall\r
+    ret\r
+ENDM\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
+    .ENDPROLOG\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, Name, SyscallId, ArgCount)\r
+    swi #SyscallId\r
+    bx lr\r
+ENDM\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, Name, SyscallId, ArgCount)\r
+    stwu 1,-16(1)\r
+    mflr 0\r
+    stw  0,0(1)\r
+    li   0, SyscallId\r
+    sc\r
+    lwz 0,0(1)\r
+    mtlr 0\r
+    addi 1,1,16\r
+    blr\r
+ENDM\r
+#define STUBCODE_K STUBCODE_U\r
+#elif defined(_M_MIPS)\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, Name, SyscallId, ArgCount)\r
+    j KiSystemService\r
+    nop\r
+ENDM\r
+#else\r
+#error unsupported architecture\r
+#endif\r
+\r
+#ifdef _M_IX86\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
+ENDM\r
+#else\r
+MACRO(MAKE_LABEL, Name, StackBytes)\r
+    PUBLIC &Name\r
+    &Name:\r
+ENDM\r
+MACRO(START_PROC, Name, StackBytes)\r
+    PUBLIC &Name\r
+    .PROC &Name\r
+ENDM\r
+#endif\r
+\r
+MACRO(STUB_U, Name, ArgCount)\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
+    START_PROC Zw&Name, %ArgCount * 4\r
+    STUBCODE_K Name, SyscallId, %ArgCount\r
+    .ENDP\r
+    SyscallId = SyscallId + 1\r
+ENDM\r