1 ; ========================
2 ; AcssMicro - System Calls
3 ; ========================
5 %include "../../../Kernel/include/syscalls.inc.asm"
16 push rsi ; // DI and SI must be maintained, CX doesn't
28 [global _errno:data 4]
29 _errno: dw 0 ; Placed in .text, to allow use of relative addressing
31 #define SYSCALL0(_name,_num) SYSCALL0 _name, _num
32 #define SYSCALL1(_name,_num) SYSCALL1 _name, _num
33 #define SYSCALL2(_name,_num) SYSCALL2 _name, _num
34 #define SYSCALL3(_name,_num) SYSCALL3 _name, _num
35 #define SYSCALL4(_name,_num) SYSCALL4 _name, _num
36 #define SYSCALL5(_name,_num) SYSCALL5 _name, _num
37 #define SYSCALL6(_name,_num) SYSCALL6 _name, _num
39 ;%define SYSCALL_OP jmp 0xCFFF0000
40 %define SYSCALL_OP int 0xAC
42 ; System Call - No Arguments
49 mov [DWORD rel _errno], ebx
54 %macro _SYSCALL_HEAD 2
62 %macro _SYSCALL_TAIL 0
63 mov [DWORD rel _errno], ebx
69 ; System Call - 1 Argument
77 ; System Call - 2 Arguments
86 ; System Call - 3 Arguments
96 ; System Call - 4 Arguments
109 ; System Call - 5 Arguments
125 ; System Call - 6 Arguments
142 ; // Override the clone syscall
143 #define clone _clone_raw
144 #include "syscalls.s.h"
153 mov rbx, [rbp+3*8] ; Get new stack pointer
155 ; Check if the new stack is being used
158 ; Quick hack, just this stack frame
160 mov [rbx-1*8], rax ; Return
161 mov [rbx-2*8], rbx ; EBP
162 and QWORD [rbx-3*8], BYTE 0 ; EBX
167 mov rbx, [rbp+2*8] ; Flags
169 mov [rel _errno], ebx