10#define _SYSCALL0(retType, num) \
12 register retType ret asm("rax"); \
13 asm volatile("syscall\n" : "=a"(ret) : "a"(num) : "rcx", "r11", "memory"); \
17#define _SYSCALL1(retType, num, type1, arg1) \
19 register retType ret asm("rax"); \
20 register type1 _a1 asm("rdi") = (arg1); \
21 asm volatile("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1) : "rcx", "r11", "memory"); \
25#define _SYSCALL2(retType, num, type1, arg1, type2, arg2) \
27 register retType ret asm("rax"); \
28 register type1 _a1 asm("rdi") = (arg1); \
29 register type2 _a2 asm("rsi") = (arg2); \
30 asm volatile("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1), "r"(_a2) : "rcx", "r11", "memory"); \
34#define _SYSCALL3(retType, num, type1, arg1, type2, arg2, type3, arg3) \
36 register retType ret asm("rax"); \
37 register type1 _a1 asm("rdi") = (arg1); \
38 register type2 _a2 asm("rsi") = (arg2); \
39 register type3 _a3 asm("rdx") = (arg3); \
40 asm volatile("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3) : "rcx", "r11", "memory"); \
44#define _SYSCALL4(retType, num, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \
46 register retType ret asm("rax"); \
47 register type1 _a1 asm("rdi") = (arg1); \
48 register type2 _a2 asm("rsi") = (arg2); \
49 register type3 _a3 asm("rdx") = (arg3); \
50 register type4 _a4 asm("r10") = (arg4); \
51 asm volatile("syscall\n" \
53 : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3), "r"(_a4) \
54 : "rcx", "r11", "memory"); \
58#define _SYSCALL5(retType, num, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5) \
60 register retType ret asm("rax"); \
61 register type1 _a1 asm("rdi") = (arg1); \
62 register type2 _a2 asm("rsi") = (arg2); \
63 register type3 _a3 asm("rdx") = (arg3); \
64 register type4 _a4 asm("r10") = (arg4); \
65 register type5 _a5 asm("r8") = (arg5); \
66 asm volatile("syscall\n" \
68 : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3), "r"(_a4), "r"(_a5) \
69 : "rcx", "r11", "memory"); \
73#define _SYSCALL6(retType, num, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
75 register retType ret asm("rax"); \
76 register type1 _a1 asm("rdi") = (arg1); \
77 register type2 _a2 asm("rsi") = (arg2); \
78 register type3 _a3 asm("rdx") = (arg3); \
79 register type4 _a4 asm("r10") = (arg4); \
80 register type5 _a5 asm("r8") = (arg5); \
81 register type6 _a6 asm("r9") = (arg6); \
82 asm volatile("syscall\n" \
84 : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3), "r"(_a4), "r"(_a5), "r"(_a6) \
85 : "rcx", "r11", "memory"); \
93 __builtin_unreachable();
100 __builtin_unreachable();
267 __builtin_unreachable();
mount_flags_t
Mount flags type.
uint8_t seek_origin_t
Type for the seek() origin argument.
void(* note_func_t)(char *note)
Note handler function type.
futex_op_t
Futex operation enum.
spawn_flags_t
Spawn behaviour flags.
prot_t
Memory protection flags.
__UINT64_TYPE__ tid_t
Thread Identifier.
__UINT64_TYPE__ fd_t
A file descriptor.
__UINT64_TYPE__ pid_t
Process Identifier.
__UINT64_TYPE__ clock_t
A nanosecond time.
static clock_source_t source
Structure to describe the HPET to the sys time subsystem.
static uintptr_t address
Mapped virtual address of the HPET registers.
EFI_PHYSICAL_ADDRESS buffer
static const path_flag_t flags[]
Poll file descriptor structure.
static fd_t _syscall_dup2(fd_t oldFd, fd_t newFd)
static uint64_t _syscall_share(key_t *key, fd_t fd, clock_t timeout)
#define _SYSCALL4(retType, num, type1, arg1, type2, arg2, type3, arg3, type4, arg4)
static pid_t _syscall_getpid(void)
#define _SYSCALL3(retType, num, type1, arg1, type2, arg2, type3, arg3)
#define _SYSCALL1(retType, num, type1, arg1)
static uint64_t _syscall_remove(const char *path)
#define _SYSCALL0(retType, num)
static uint64_t _syscall_getdents(fd_t fd, dirent_t *buffer, uint64_t count)
static uint64_t _syscall_link(const char *oldPath, const char *newPath)
static _NORETURN void _syscall_thread_exit(void)
static tid_t _syscall_thread_create(void *entry, void *arg)
static fd_t _syscall_open(const char *path)
static clock_t _syscall_uptime(void)
static uint64_t _syscall_chdir(const char *path)
static uint64_t _syscall_seek(fd_t fd, int64_t offset, seek_origin_t origin)
static _NORETURN uint64_t _syscall_noted(void)
static uint64_t _syscall_nanosleep(clock_t nanoseconds)
static tid_t _syscall_gettid(void)
#define _SYSCALL2(retType, num, type1, arg1, type2, arg2)
static pid_t _syscall_spawn(const char **argv, spawn_flags_t flags)
static uint64_t _syscall_open2(const char *path, fd_t fds[2])
static fd_t _syscall_dup(fd_t oldFd)
static void * _syscall_mmap(fd_t fd, void *address, uint64_t length, prot_t prot)
static uint64_t _syscall_close(fd_t fd)
static uint64_t _syscall_ioctl(fd_t fd, uint64_t request, void *argp, uint64_t size)
static fd_t _syscall_claim(key_t *key)
static uint64_t _syscall_stat(const char *path, stat_t *info)
static void _syscall_yield(void)
static uint64_t _syscall_write(fd_t fd, const void *buffer, uint64_t count)
static errno_t _syscall_errno(void)
static uint64_t _syscall_poll(pollfd_t *fds, uint64_t amount, clock_t timeout)
static uint64_t _syscall_read(fd_t fd, void *buffer, uint64_t count)
static time_t _syscall_unix_epoch(void)
static void * _syscall_munmap(void *address, uint64_t length)
static uint64_t _syscall_futex(atomic_uint64_t *addr, uint64_t val, futex_op_t op, clock_t timeout)
static _NORETURN void _syscall_process_exit(const char *status)
static uint64_t _syscall_notify(note_func_t func)
static void * _syscall_mprotect(void *address, uint64_t length, prot_t prot)
static uint64_t _syscall_bind(fd_t source, const char *mountpoint, mount_flags_t flags)
long long unsigned time_t