1 ; ========================
2 ; AcssMicro - System Calls
3 ; ========================
5 %include "../../../Kernel/include/syscalls.inc.asm"
13 mov rdi, [rsp ] ; Base
14 mov rsi, [rsp+ 8] ; ArgC
15 mov rdx, [rsp+16] ; ArgV
16 mov rcx, [rsp+24] ; EnvP
35 mov rcx, rdx ; RDX - Third
41 [global _errno:data 4]
42 _errno: dw 0 ; Placed in .text, to allow use of relative addressing
44 #define SYSCALL0(_name,_num) SYSCALL0 _name, _num
45 #define SYSCALL1(_name,_num) SYSCALL1 _name, _num
46 #define SYSCALL2(_name,_num) SYSCALL2 _name, _num
47 #define SYSCALL3(_name,_num) SYSCALL3 _name, _num
48 #define SYSCALL4(_name,_num) SYSCALL4 _name, _num
49 #define SYSCALL5(_name,_num) SYSCALL5 _name, _num
50 #define SYSCALL6(_name,_num) SYSCALL6 _name, _num
52 ;%define SYSCALL_OP jmp 0xCFFF0000
53 ;%define SYSCALL_OP int 0xAC
54 %define SYSCALL_OP syscall
56 ; System Call - No Arguments
63 mov [DWORD rel _errno], ebx
68 %macro _SYSCALL_HEAD 2
76 %macro _SYSCALL_TAIL 0
77 mov [DWORD rel _errno], ebx
83 ; System Call - 1 Argument
91 ; System Call - 2 Arguments
100 ; System Call - 3 Arguments
110 ; System Call - 4 Arguments
116 mov r10, rcx ; r10 is used in place of RCX
121 ; System Call - 5 Arguments
133 ; System Call - 6 Arguments
146 ; // Override the clone syscall
147 #define clone _clone_raw
148 #define _exit _exit_raw
149 #include "syscalls.s.h"
160 mov r12, rsi ; Save in a reg for after the clone
162 ; Check if the new stack is being used
165 ; Quick hack, just this stack frame
167 mov [rsi-1*8], rax ; Return
168 mov [rsi-2*8], rsi ; EBP
169 and QWORD [rsi-3*8], BYTE 0 ; EBX
174 mov [rel _errno], ebx
176 ; Change stack pointer