libc: Move __luna_syscall* declarations to asm

This commit is contained in:
apio 2022-10-19 17:50:09 +02:00
parent 5816f54293
commit 7ec221c36d
2 changed files with 50 additions and 48 deletions

View File

@ -0,0 +1,50 @@
global __luna_syscall0
__luna_syscall0:
mov rax, rdi
int 0x42
ret
global __luna_syscall1
__luna_syscall1:
mov rax, rdi
mov rdi, rsi
int 0x42
ret
global __luna_syscall2
__luna_syscall2:
mov rax, rdi
mov rdi, rsi
mov rsi, rdx
int 0x42
ret
global __luna_syscall3
__luna_syscall3:
mov rax, rdi
mov rdi, rsi
mov rsi, rdx
mov rdx, rcx
int 0x42
ret
global __luna_syscall4
__luna_syscall4:
mov rax, rdi
mov rdi, rsi
mov rsi, rdx
mov rdx, rcx
mov r10, r8
int 0x42
ret
global __luna_syscall5
__luna_syscall5:
mov rax, rdi
mov rdi, rsi
mov rsi, rdx
mov rdx, rcx
mov r10, r8
mov r8, r9
int 0x42
ret

View File

@ -1,48 +0,0 @@
#include <luna/syscall.h>
long int __luna_syscall0(long int sys_num)
{
long int result;
asm volatile("int $0x42" : "=a"(result) : "a"(sys_num));
return result;
}
long int __luna_syscall1(long int sys_num, unsigned long int arg0)
{
long int result;
asm volatile("int $0x42" : "=a"(result) : "a"(sys_num), "D"(arg0));
return result;
}
long int __luna_syscall2(long int sys_num, unsigned long int arg0, unsigned long int arg1)
{
long int result;
asm volatile("int $0x42" : "=a"(result) : "a"(sys_num), "D"(arg0), "S"(arg1));
return result;
}
long int __luna_syscall3(long int sys_num, unsigned long int arg0, unsigned long int arg1, unsigned long int arg2)
{
long int result;
asm volatile("int $0x42" : "=a"(result) : "a"(sys_num), "D"(arg0), "S"(arg1), "d"(arg2));
return result;
}
long int __luna_syscall4(long int sys_num, unsigned long int arg0, unsigned long int arg1, unsigned long int arg2,
unsigned long int arg3)
{
long int result;
register unsigned long int value0 asm("r10") = arg3;
asm volatile("int $0x42" : "=a"(result) : "a"(sys_num), "D"(arg0), "S"(arg1), "d"(arg2), "r"(value0));
return result;
}
long int __luna_syscall5(long int sys_num, unsigned long int arg0, unsigned long int arg1, unsigned long int arg2,
unsigned long int arg3, unsigned long int arg4)
{
long int result;
register unsigned long int value0 asm("r10") = arg3;
register unsigned long int value1 asm("r8") = arg4;
asm volatile("int $0x42" : "=a"(result) : "a"(sys_num), "D"(arg0), "S"(arg1), "d"(arg2), "r"(value0), "r"(value1));
return result;
}