mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
[ASM]
Modify syscall stub macros to be compatible with the new amd64 stubs svn path=/trunk/; revision=55409
This commit is contained in:
parent
61a48a890e
commit
5634a14cce
1 changed files with 29 additions and 28 deletions
|
@ -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 @@ MACRO(STUBCODE_K, SyscallId, StackBytes)
|
|||
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 @@ MACRO(STUBCODE_U, SyscallId, StackBytes)
|
|||
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 @@ ENDM
|
|||
#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
|
||||
|
|
Loading…
Reference in a new issue