[libc] Created syscall trampolines in libc
Using syscalls.inc (moved to src/include) generate trampoline functions for directly calling syscalls with libc functions.
This commit is contained in:
21
src/libraries/libc/arch/x86_64/syscalls.s
Normal file
21
src/libraries/libc/arch/x86_64/syscalls.s
Normal file
@@ -0,0 +1,21 @@
|
||||
%macro SYSCALL 2
|
||||
global _syscall_%1
|
||||
_syscall_%1:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
; address of args should already be in rdi, etc
|
||||
mov rax, %2
|
||||
syscall
|
||||
; result is now already in rax, so just return
|
||||
|
||||
pop rbp
|
||||
ret
|
||||
%endmacro
|
||||
|
||||
%define SYSCALL(n, name) SYSCALL name, n
|
||||
%define SYSCALL(n, name, a) SYSCALL name, n
|
||||
%define SYSCALL(n, name, a, b) SYSCALL name, n
|
||||
%define SYSCALL(n, name, a, b, c) SYSCALL name, n
|
||||
|
||||
%include "syscalls.inc"
|
||||
13
src/libraries/libc/include/j6libc/syscalls.h
Normal file
13
src/libraries/libc/include/j6libc/syscalls.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SYSCALL(n, name, ...) j6_status_t _syscall_ ## name (__VA_ARGS__);
|
||||
#include "syscalls.inc"
|
||||
#undef SYSCALL
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user