PatchworkOS  19e446b
A non-POSIX operating system.
Loading...
Searching...
No Matches
syscalls.h File Reference
#include <kernel/cpu/syscall.h>
#include <stdint.h>
#include <sys/fs.h>
#include <sys/ioring.h>
#include <sys/proc.h>
#include <time.h>
Include dependency graph for syscalls.h:

Go to the source code of this file.

Macros

#define _SYSCALL0(retType, num)
 
#define _SYSCALL1(retType, num, type1, arg1)
 
#define _SYSCALL2(retType, num, type1, arg1, type2, arg2)
 
#define _SYSCALL3(retType, num, type1, arg1, type2, arg2, type3, arg3)
 
#define _SYSCALL4(retType, num, type1, arg1, type2, arg2, type3, arg3, type4, arg4)
 
#define _SYSCALL5(retType, num, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5)
 
#define _SYSCALL6(retType, num, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5, type6, arg6)
 

Functions

static _NORETURN void _syscall_exits (const char *status)
 
static _NORETURN void _syscall_thread_exit (void)
 
static pid_t _syscall_spawn (const char **argv, spawn_flags_t flags)
 
static uint64_t _syscall_nanosleep (clock_t nanoseconds)
 
static errno_t _syscall_errno (void)
 
static pid_t _syscall_getpid (void)
 
static tid_t _syscall_gettid (void)
 
static clock_t _syscall_uptime (void)
 
static time_t _syscall_unix_epoch (void)
 
static fd_t _syscall_open (const char *path)
 
static uint64_t _syscall_open2 (const char *path, fd_t fds[2])
 
static uint64_t _syscall_close (fd_t fd)
 
static uint64_t _syscall_read (fd_t fd, void *buffer, size_t count)
 
static uint64_t _syscall_write (fd_t fd, const void *buffer, size_t count)
 
static uint64_t _syscall_seek (fd_t fd, ssize_t offset, seek_origin_t origin)
 
static uint64_t _syscall_ioctl (fd_t fd, uint64_t request, void *argp, size_t size)
 
static uint64_t _syscall_poll (pollfd_t *fds, uint64_t amount, clock_t timeout)
 
static uint64_t _syscall_stat (const char *path, stat_t *info)
 
static void * _syscall_mmap (fd_t fd, void *address, size_t length, prot_t prot)
 
static void * _syscall_munmap (void *address, size_t length)
 
static void * _syscall_mprotect (void *address, size_t length, prot_t prot)
 
static uint64_t _syscall_getdents (fd_t fd, dirent_t *buffer, uint64_t count)
 
static tid_t _syscall_thread_create (void *entry, void *arg)
 
static void _syscall_yield (void)
 
static fd_t _syscall_dup (fd_t oldFd)
 
static fd_t _syscall_dup2 (fd_t oldFd, fd_t newFd)
 
static uint64_t _syscall_futex (atomic_uint64_t *addr, uint64_t val, futex_op_t op, clock_t timeout)
 
static uint64_t _syscall_remove (const char *path)
 
static uint64_t _syscall_link (const char *oldPath, const char *newPath)
 
static uint64_t _syscall_share (char *key, uint64_t size, fd_t fd, clock_t timeout)
 
static fd_t _syscall_claim (const char *key)
 
static uint64_t _syscall_bind (const char *mountpoint, fd_t source)
 
static fd_t _syscall_openat (fd_t from, const char *path)
 
static uint64_t _syscall_notify (note_func_t func)
 
static _NORETURN uint64_t _syscall_noted (void)
 
static uint64_t _syscall_readlink (const char *path, char *buffer, uint64_t size)
 
static uint64_t _syscall_symlink (const char *target, const char *linkpath)
 
static uint64_t _syscall_mount (const char *mountpoint, const char *fs, const char *options)
 
static uint64_t _syscall_umount (const char *mountpoint)
 
static uint64_t _syscall_arch_prctl (arch_prctl_t code, uintptr_t addr)
 
static uint64_t _syscall_setup (ioring_t *ring, void *address, size_t sentries, size_t centries)
 
static uint64_t _syscall_teardown (ioring_id_t id)
 
static uint64_t _syscall_enter (ioring_id_t id, size_t amount, size_t wait)
 

Macro Definition Documentation

◆ _SYSCALL0

#define _SYSCALL0 (   retType,
  num 
)
Value:
({ \
register retType ret asm("rax"); \
ASM("syscall\n" : "=a"(ret) : "a"(num) : "rcx", "r11", "memory"); \
ret; \
})

Definition at line 11 of file syscalls.h.

◆ _SYSCALL1

#define _SYSCALL1 (   retType,
  num,
  type1,
  arg1 
)
Value:
({ \
register retType ret asm("rax"); \
register type1 _a1 asm("rdi") = (arg1); \
ASM("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1) : "rcx", "r11", "memory"); \
ret; \
})

Definition at line 18 of file syscalls.h.

◆ _SYSCALL2

#define _SYSCALL2 (   retType,
  num,
  type1,
  arg1,
  type2,
  arg2 
)
Value:
({ \
register retType ret asm("rax"); \
register type1 _a1 asm("rdi") = (arg1); \
register type2 _a2 asm("rsi") = (arg2); \
ASM("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1), "r"(_a2) : "rcx", "r11", "memory"); \
ret; \
})

Definition at line 26 of file syscalls.h.

◆ _SYSCALL3

#define _SYSCALL3 (   retType,
  num,
  type1,
  arg1,
  type2,
  arg2,
  type3,
  arg3 
)
Value:
({ \
register retType ret asm("rax"); \
register type1 _a1 asm("rdi") = (arg1); \
register type2 _a2 asm("rsi") = (arg2); \
register type3 _a3 asm("rdx") = (arg3); \
ASM("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3) : "rcx", "r11", "memory"); \
ret; \
})

Definition at line 35 of file syscalls.h.

◆ _SYSCALL4

#define _SYSCALL4 (   retType,
  num,
  type1,
  arg1,
  type2,
  arg2,
  type3,
  arg3,
  type4,
  arg4 
)
Value:
({ \
register retType ret asm("rax"); \
register type1 _a1 asm("rdi") = (arg1); \
register type2 _a2 asm("rsi") = (arg2); \
register type3 _a3 asm("rdx") = (arg3); \
register type4 _a4 asm("r10") = (arg4); \
ASM("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3), "r"(_a4) : "rcx", "r11", "memory"); \
ret; \
})

Definition at line 45 of file syscalls.h.

◆ _SYSCALL5

#define _SYSCALL5 (   retType,
  num,
  type1,
  arg1,
  type2,
  arg2,
  type3,
  arg3,
  type4,
  arg4,
  type5,
  arg5 
)
Value:
({ \
register retType ret asm("rax"); \
register type1 _a1 asm("rdi") = (arg1); \
register type2 _a2 asm("rsi") = (arg2); \
register type3 _a3 asm("rdx") = (arg3); \
register type4 _a4 asm("r10") = (arg4); \
register type5 _a5 asm("r8") = (arg5); \
ASM("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3), "r"(_a4), "r"(_a5) : "rcx", "r11", \
"memory"); \
ret; \
})

Definition at line 56 of file syscalls.h.

◆ _SYSCALL6

#define _SYSCALL6 (   retType,
  num,
  type1,
  arg1,
  type2,
  arg2,
  type3,
  arg3,
  type4,
  arg4,
  type5,
  arg5,
  type6,
  arg6 
)
Value:
({ \
register retType ret asm("rax"); \
register type1 _a1 asm("rdi") = (arg1); \
register type2 _a2 asm("rsi") = (arg2); \
register type3 _a3 asm("rdx") = (arg3); \
register type4 _a4 asm("r10") = (arg4); \
register type5 _a5 asm("r8") = (arg5); \
register type6 _a6 asm("r9") = (arg6); \
ASM("syscall\n" : "=a"(ret) : "a"(num), "r"(_a1), "r"(_a2), "r"(_a3), "r"(_a4), "r"(_a5), "r"(_a6) : "rcx", \
"r11", "memory"); \
ret; \
})

Definition at line 69 of file syscalls.h.

Function Documentation

◆ _syscall_exits()

static _NORETURN void _syscall_exits ( const char *  status)
inlinestatic

Definition at line 83 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_thread_exit()

static _NORETURN void _syscall_thread_exit ( void  )
inlinestatic

Definition at line 90 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_spawn()

static pid_t _syscall_spawn ( const char **  argv,
spawn_flags_t  flags 
)
inlinestatic

Definition at line 97 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_nanosleep()

static uint64_t _syscall_nanosleep ( clock_t  nanoseconds)
inlinestatic

Definition at line 102 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_errno()

static errno_t _syscall_errno ( void  )
inlinestatic

Definition at line 107 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_getpid()

static pid_t _syscall_getpid ( void  )
inlinestatic

Definition at line 112 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_gettid()

static tid_t _syscall_gettid ( void  )
inlinestatic

Definition at line 117 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_uptime()

static clock_t _syscall_uptime ( void  )
inlinestatic

Definition at line 122 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_unix_epoch()

static time_t _syscall_unix_epoch ( void  )
inlinestatic

Definition at line 127 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_open()

static fd_t _syscall_open ( const char *  path)
inlinestatic

Definition at line 132 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_open2()

static uint64_t _syscall_open2 ( const char *  path,
fd_t  fds[2] 
)
inlinestatic

Definition at line 137 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_close()

static uint64_t _syscall_close ( fd_t  fd)
inlinestatic

Definition at line 142 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_read()

static uint64_t _syscall_read ( fd_t  fd,
void *  buffer,
size_t  count 
)
inlinestatic

Definition at line 147 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_write()

static uint64_t _syscall_write ( fd_t  fd,
const void *  buffer,
size_t  count 
)
inlinestatic

Definition at line 152 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_seek()

static uint64_t _syscall_seek ( fd_t  fd,
ssize_t  offset,
seek_origin_t  origin 
)
inlinestatic

Definition at line 157 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_ioctl()

static uint64_t _syscall_ioctl ( fd_t  fd,
uint64_t  request,
void *  argp,
size_t  size 
)
inlinestatic

Definition at line 162 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_poll()

static uint64_t _syscall_poll ( pollfd_t fds,
uint64_t  amount,
clock_t  timeout 
)
inlinestatic

Definition at line 167 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_stat()

static uint64_t _syscall_stat ( const char *  path,
stat_t info 
)
inlinestatic

Definition at line 172 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_mmap()

static void * _syscall_mmap ( fd_t  fd,
void *  address,
size_t  length,
prot_t  prot 
)
inlinestatic

Definition at line 177 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_munmap()

static void * _syscall_munmap ( void *  address,
size_t  length 
)
inlinestatic

Definition at line 182 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_mprotect()

static void * _syscall_mprotect ( void *  address,
size_t  length,
prot_t  prot 
)
inlinestatic

Definition at line 187 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_getdents()

static uint64_t _syscall_getdents ( fd_t  fd,
dirent_t buffer,
uint64_t  count 
)
inlinestatic

Definition at line 192 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_thread_create()

static tid_t _syscall_thread_create ( void *  entry,
void *  arg 
)
inlinestatic

Definition at line 197 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_yield()

static void _syscall_yield ( void  )
inlinestatic

Definition at line 202 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_dup()

static fd_t _syscall_dup ( fd_t  oldFd)
inlinestatic

Definition at line 207 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_dup2()

static fd_t _syscall_dup2 ( fd_t  oldFd,
fd_t  newFd 
)
inlinestatic

Definition at line 212 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_futex()

static uint64_t _syscall_futex ( atomic_uint64_t *  addr,
uint64_t  val,
futex_op_t  op,
clock_t  timeout 
)
inlinestatic

Definition at line 217 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_remove()

static uint64_t _syscall_remove ( const char *  path)
inlinestatic

Definition at line 222 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_link()

static uint64_t _syscall_link ( const char *  oldPath,
const char *  newPath 
)
inlinestatic

Definition at line 227 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_share()

static uint64_t _syscall_share ( char *  key,
uint64_t  size,
fd_t  fd,
clock_t  timeout 
)
inlinestatic

Definition at line 232 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_claim()

static fd_t _syscall_claim ( const char *  key)
inlinestatic

Definition at line 237 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_bind()

static uint64_t _syscall_bind ( const char *  mountpoint,
fd_t  source 
)
inlinestatic

Definition at line 242 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_openat()

static fd_t _syscall_openat ( fd_t  from,
const char *  path 
)
inlinestatic

Definition at line 247 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_notify()

static uint64_t _syscall_notify ( note_func_t  func)
inlinestatic

Definition at line 252 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_noted()

static _NORETURN uint64_t _syscall_noted ( void  )
inlinestatic

Definition at line 257 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_readlink()

static uint64_t _syscall_readlink ( const char *  path,
char *  buffer,
uint64_t  size 
)
inlinestatic

Definition at line 264 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_symlink()

static uint64_t _syscall_symlink ( const char *  target,
const char *  linkpath 
)
inlinestatic

Definition at line 269 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_mount()

static uint64_t _syscall_mount ( const char *  mountpoint,
const char *  fs,
const char *  options 
)
inlinestatic

Definition at line 274 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_umount()

static uint64_t _syscall_umount ( const char *  mountpoint)
inlinestatic

Definition at line 279 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_arch_prctl()

static uint64_t _syscall_arch_prctl ( arch_prctl_t  code,
uintptr_t  addr 
)
inlinestatic

Definition at line 284 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_setup()

static uint64_t _syscall_setup ( ioring_t ring,
void *  address,
size_t  sentries,
size_t  centries 
)
inlinestatic

Definition at line 289 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_teardown()

static uint64_t _syscall_teardown ( ioring_id_t  id)
inlinestatic

Definition at line 294 of file syscalls.h.

Here is the caller graph for this function:

◆ _syscall_enter()

static uint64_t _syscall_enter ( ioring_id_t  id,
size_t  amount,
size_t  wait 
)
inlinestatic

Definition at line 299 of file syscalls.h.

Here is the caller graph for this function: