mirror of
https://github.com/reactos/reactos.git
synced 2025-05-01 11:39:58 +00:00
[ASM]
- Make syscalls ARM compatible svn path=/trunk/; revision=67640
This commit is contained in:
parent
89ee675f59
commit
9fbce543e9
6 changed files with 1075 additions and 995 deletions
|
@ -1,4 +1,57 @@
|
||||||
|
|
||||||
|
#ifdef _M_ARM
|
||||||
|
|
||||||
|
#include <ksarm.h>
|
||||||
|
|
||||||
|
GBLA SyscallId
|
||||||
|
|
||||||
|
SyscallId SETA 0
|
||||||
|
|
||||||
|
MACRO
|
||||||
|
STUB_K $Name
|
||||||
|
LCLS ZwFuncName
|
||||||
|
LCLS ZwFuncEndName
|
||||||
|
ZwFuncName SETS "Zw$Name"
|
||||||
|
ZwFuncEndName SETS "$ZwFuncName":CC:"_end"
|
||||||
|
ALIGN 2
|
||||||
|
EXPORT $ZwFuncName [FUNC]
|
||||||
|
$ZwFuncName
|
||||||
|
ROUT
|
||||||
|
mov r12, #SyscallId
|
||||||
|
svc #1
|
||||||
|
bx lr
|
||||||
|
$ZwFuncEndName
|
||||||
|
MEND
|
||||||
|
|
||||||
|
MACRO
|
||||||
|
STUB_U $Name
|
||||||
|
LCLS NtFuncName
|
||||||
|
LCLS NtFuncEndName
|
||||||
|
LCLS ZwFuncName
|
||||||
|
LCLS ZwFuncEndName
|
||||||
|
NtFuncName SETS "Nt$Name"
|
||||||
|
NtFuncEndName SETS "$NtFuncName":CC:"_end"
|
||||||
|
ZwFuncName SETS "Zw$Name"
|
||||||
|
ZwFuncEndName SETS "$ZwFuncName":CC:"_end"
|
||||||
|
ALIGN 2
|
||||||
|
EXPORT $NtFuncName [FUNC]
|
||||||
|
$NtFuncName
|
||||||
|
EXPORT $ZwFuncName [FUNC]
|
||||||
|
$ZwFuncName
|
||||||
|
ROUT
|
||||||
|
mov r12, #SyscallId
|
||||||
|
svc #1
|
||||||
|
bx lr
|
||||||
|
$NtFuncEndName
|
||||||
|
$ZwFuncEndName
|
||||||
|
MEND
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <asm.inc>
|
||||||
|
|
||||||
|
SyscallId = 0
|
||||||
|
|
||||||
#ifdef _M_IX86
|
#ifdef _M_IX86
|
||||||
#define KUSER_SHARED_SYSCALL HEX(7ffe0300)
|
#define KUSER_SHARED_SYSCALL HEX(7ffe0300)
|
||||||
#define KGDT_R0_CODE 8
|
#define KGDT_R0_CODE 8
|
||||||
|
@ -35,16 +88,6 @@ MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
|
||||||
mov r10, ArgCount * 8
|
mov r10, ArgCount * 8
|
||||||
jmp KiZwSystemService
|
jmp KiZwSystemService
|
||||||
ENDM
|
ENDM
|
||||||
#elif defined(_M_ARM)
|
|
||||||
MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
|
|
||||||
swi #SyscallId
|
|
||||||
bx lr
|
|
||||||
ENDM
|
|
||||||
MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
|
|
||||||
mov ip, lr
|
|
||||||
swi #SyscallId
|
|
||||||
bx ip
|
|
||||||
ENDM
|
|
||||||
#elif defined(_M_PPC)
|
#elif defined(_M_PPC)
|
||||||
MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
|
MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
|
||||||
stwu 1,-16(1)
|
stwu 1,-16(1)
|
||||||
|
@ -107,3 +150,5 @@ MACRO(STUB_K, Name, ArgCount)
|
||||||
.ENDP
|
.ENDP
|
||||||
SyscallId = SyscallId + 1
|
SyscallId = SyscallId + 1
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,7 +1,16 @@
|
||||||
|
|
||||||
#include <asm.inc>
|
|
||||||
#include <syscalls.inc>
|
#include <syscalls.inc>
|
||||||
|
|
||||||
|
#ifdef _M_ARM
|
||||||
|
|
||||||
|
TEXTAREA
|
||||||
|
|
||||||
|
#define SVC_(name, argcount) STUB_K name
|
||||||
|
|
||||||
|
#include <sysfuncs.h>
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#ifdef _M_IX86
|
#ifdef _M_IX86
|
||||||
EXTERN _KiSystemService:PROC
|
EXTERN _KiSystemService:PROC
|
||||||
#elif defined(_M_AMD64)
|
#elif defined(_M_AMD64)
|
||||||
|
@ -12,9 +21,10 @@ EXTERN KiZwSystemService:PROC
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
SyscallId = 0
|
|
||||||
#define SVC_(name, argcount) STUB_K name, argcount
|
#define SVC_(name, argcount) STUB_K name, argcount
|
||||||
|
|
||||||
#include <sysfuncs.h>
|
#include <sysfuncs.h>
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
|
@ -1,12 +1,23 @@
|
||||||
|
|
||||||
#include <asm.inc>
|
|
||||||
#include <syscalls.inc>
|
#include <syscalls.inc>
|
||||||
|
|
||||||
|
#ifdef _M_ARM
|
||||||
|
|
||||||
|
TEXTAREA
|
||||||
|
|
||||||
|
#define SVC_(name, argcount) STUB_U name
|
||||||
|
|
||||||
|
#include <sysfuncs.h>
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
SyscallId = 0
|
|
||||||
#define SVC_(name, argcount) STUB_U name, argcount
|
#define SVC_(name, argcount) STUB_U name, argcount
|
||||||
|
|
||||||
#include <sysfuncs.h>
|
#include <sysfuncs.h>
|
||||||
|
|
||||||
END
|
END
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,7 +1,18 @@
|
||||||
|
|
||||||
#include <asm.inc>
|
|
||||||
#include <syscalls.inc>
|
#include <syscalls.inc>
|
||||||
|
|
||||||
|
#ifdef _M_ARM
|
||||||
|
|
||||||
|
TEXTAREA
|
||||||
|
|
||||||
|
#define SVC_(name, argcount) STUB_U name
|
||||||
|
|
||||||
|
#include "w32ksvc.h"
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
SyscallId = HEX(1000)
|
SyscallId = HEX(1000)
|
||||||
|
@ -10,3 +21,5 @@ SyscallId = HEX(1000)
|
||||||
#include "w32ksvc.h"
|
#include "w32ksvc.h"
|
||||||
|
|
||||||
END
|
END
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
// SVC_(<NAME>, <ARG_COUNT>)
|
// SVC_(<NAME>, <ARG_COUNT>)
|
||||||
//
|
//
|
||||||
// Funcs order should match Windows XP 5.1.2600 SP2
|
// Funcs order should match Windows XP 5.1.2600 SP2
|
||||||
|
// Note: these MUST be indented for the ARM assembler!
|
||||||
//
|
//
|
||||||
SVC_(GdiAbortDoc, 1)
|
SVC_(GdiAbortDoc, 1)
|
||||||
SVC_(GdiAbortPath, 1)
|
SVC_(GdiAbortPath, 1)
|
||||||
|
|
Loading…
Reference in a new issue