1 ; ========================
2 ; AcssMicro - System Calls
3 ; ========================
5 %include "../../../Kernel/include/syscalls.inc.asm"
32 mov rcx, rdx ; RDX - Third
38 [global _errno:data 4]
39 _errno: dw 0 ; Placed in .text, to allow use of relative addressing
41 #define SYSCALL0(_name,_num) SYSCALL0 _name, _num
42 #define SYSCALL1(_name,_num) SYSCALL1 _name, _num
43 #define SYSCALL2(_name,_num) SYSCALL2 _name, _num
44 #define SYSCALL3(_name,_num) SYSCALL3 _name, _num
45 #define SYSCALL4(_name,_num) SYSCALL4 _name, _num
46 #define SYSCALL5(_name,_num) SYSCALL5 _name, _num
47 #define SYSCALL6(_name,_num) SYSCALL6 _name, _num
49 ;%define SYSCALL_OP jmp 0xCFFF0000
50 ;%define SYSCALL_OP int 0xAC
51 %define SYSCALL_OP syscall
53 ; System Call - No Arguments
60 mov [DWORD rel _errno], ebx
65 %macro _SYSCALL_HEAD 2
73 %macro _SYSCALL_TAIL 0
74 mov [DWORD rel _errno], ebx
80 ; System Call - 1 Argument
88 ; System Call - 2 Arguments
97 ; System Call - 3 Arguments
107 ; System Call - 4 Arguments
113 mov r10, rcx ; r10 is used in place of RCX
118 ; System Call - 5 Arguments
130 ; System Call - 6 Arguments
143 ; // Override the clone syscall
144 #define clone _clone_raw
145 #define _exit _exit_raw
146 #include "syscalls.s.h"
157 mov r12, rsi ; Save in a reg for after the clone
159 ; Check if the new stack is being used
162 ; Quick hack, just this stack frame
164 mov [rsi-1*8], rax ; Return
165 mov [rsi-2*8], rsi ; EBP
166 and QWORD [rsi-3*8], BYTE 0 ; EBX
171 mov [rel _errno], ebx
173 ; Change stack pointer