Sync with trunk revision r58045 to bring the corrections on configure.cmd and on...
[reactos.git] / include / asm / syscalls.inc
1
2 #ifdef _M_IX86
3 #define KUSER_SHARED_SYSCALL HEX(7ffe0300)
4 #define KGDT_R0_CODE 8
5 MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
6 StackBytes = 4 * ArgCount
7 FPO 0, 0, 0, 0, 0, FRAME_FPO
8 mov eax, SyscallId
9 mov ecx, KUSER_SHARED_SYSCALL
10 call dword ptr [ecx]
11 ret StackBytes
12 ENDM
13 MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
14 StackBytes = 4 * &ArgCount
15 FPO 0, 0, 0, 0, 0, FRAME_FPO
16 mov eax, SyscallId
17 lea edx, [esp + 4]
18 pushfd
19 push KGDT_R0_CODE
20 call _KiSystemService
21 ret StackBytes
22 ENDM
23 #elif defined(_M_AMD64)
24 MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
25 .ENDPROLOG
26 mov eax, SyscallId
27 mov r10, rcx
28 syscall
29 ret
30 ENDM
31 MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
32 .ENDPROLOG
33 EXTERN Nt&Name:PROC
34 lea rax, Nt&Name[rip]
35 mov r10, ArgCount * 8
36 jmp KiZwSystemService
37 ENDM
38 #elif defined(_M_ARM)
39 MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
40 swi #SyscallId
41 bx lr
42 ENDM
43 MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
44 mov ip, lr
45 swi #SyscallId
46 bx ip
47 ENDM
48 #elif defined(_M_PPC)
49 MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
50 stwu 1,-16(1)
51 mflr 0
52 stw 0,0(1)
53 li 0, SyscallId
54 sc
55 lwz 0,0(1)
56 mtlr 0
57 addi 1,1,16
58 blr
59 ENDM
60 #define STUBCODE_K STUBCODE_U
61 #elif defined(_M_MIPS)
62 MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
63 li $8, KUSER_SHARED_SYSCALL
64 lw $8,0($8)
65 j $8
66 nop
67 ENDM
68 MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
69 j KiSystemService
70 nop
71 ENDM
72 #else
73 #error unsupported architecture
74 #endif
75
76 #ifdef _M_IX86
77 MACRO(MAKE_LABEL, Name, StackBytes)
78 PUBLIC _&Name&@&StackBytes
79 _&Name&@&StackBytes:
80 ENDM
81 MACRO(START_PROC, Name, StackBytes)
82 PUBLIC _&Name&@&StackBytes
83 .PROC _&Name&@&StackBytes
84 ENDM
85 #else
86 MACRO(MAKE_LABEL, Name, StackBytes)
87 PUBLIC &Name
88 &Name:
89 ENDM
90 MACRO(START_PROC, Name, StackBytes)
91 PUBLIC &Name
92 .PROC &Name
93 ENDM
94 #endif
95
96 MACRO(STUB_U, Name, ArgCount)
97 MAKE_LABEL Zw&Name, %ArgCount * 4
98 START_PROC Nt&Name, %ArgCount * 4
99 STUBCODE_U Name, SyscallId, %ArgCount
100 .ENDP
101 SyscallId = SyscallId + 1
102 ENDM
103
104 MACRO(STUB_K, Name, ArgCount)
105 START_PROC Zw&Name, %ArgCount * 4
106 STUBCODE_K Name, SyscallId, %ArgCount
107 .ENDP
108 SyscallId = SyscallId + 1
109 ENDM