3#include <clod/sys/sys.h>
5#include <linux/unistd.h>
9long syscall0(
long number) {
14 :
"memory",
"cc",
"r11",
"rcx"
19long syscall1(
long _1,
long number) {
20 register long r1
asm (
"rdi") = _1;
26 :
"memory",
"cc",
"r11",
"rcx"
31long syscall2(
long _1,
long _2,
long number) {
32 register long r1
asm (
"rdi") = _1;
33 register long r2
asm (
"rsi") = _2;
39 :
"memory",
"cc",
"r11",
"rcx"
44long syscall3(
long _1,
long _2,
long _3,
long number) {
45 register long r1
asm (
"rdi") = _1;
46 register long r2
asm (
"rsi") = _2;
47 register long r3
asm (
"rdx") = _3;
52 :
"D" (r1),
"S" (r2),
"d" (r3)
53 :
"memory",
"cc",
"r11",
"rcx"
58long syscall4(
long _1,
long _2,
long _3,
long _4,
long number) {
59 register long r1
asm (
"rdi") = _1;
60 register long r2
asm (
"rsi") = _2;
61 register long r3
asm (
"rdx") = _3;
62 register long r4
asm (
"r10") = _4;
67 :
"D" (r1),
"S" (r2),
"d" (r3),
"r" (r4)
68 :
"memory",
"cc",
"r11",
"rcx"
73long syscall5(
long _1,
long _2,
long _3,
long _4,
long _5,
long number) {
74 register long r1
asm (
"rdi") = _1;
75 register long r2
asm (
"rsi") = _2;
76 register long r3
asm (
"rdx") = _3;
77 register long r4
asm (
"r10") = _4;
78 register long r5
asm (
"r8") = _5;
83 :
"D" (r1),
"S" (r2),
"d" (r3),
"r" (r4),
"r" (r5)
84 :
"memory",
"cc",
"r11",
"rcx"
89long syscall6(
long _1,
long _2,
long _3,
long _4,
long _5,
long _6,
long number) {
90 register long r1
asm (
"rdi") = _1;
91 register long r2
asm (
"rsi") = _2;
92 register long r3
asm (
"rdx") = _3;
93 register long r4
asm (
"r10") = _4;
94 register long r5
asm (
"r8") = _5;
95 register long r6
asm (
"r9") = _6;
100 :
"D" (r1),
"S" (r2),
"d" (r3),
"r" (r4),
"r" (r5),
"r" (r6)
101 :
"memory",
"cc",
"r11",
"rcx"
107#error "Linux syscalls not implemented on this architecture"
111int syscall_futex_wait(
const int *addr,
const int expected,
struct timespec *timeout) {
112 return (
int)syscall(__NR_futex, (
long)addr, __NR_futex_wait, expected, (
long)timeout);
116int syscall_futex_wake(
const int *addr,
const int num) {
117 return (
int)syscall(__NR_futex, (
long)addr, __NR_futex_wake, num);
121long syscall_read(
const int fd,
void *buff,
const size_t size) {
122 return syscall(__NR_read, fd, (
long)buff, (
long)size);
126long syscall_write(
const int fd,
const void *buff,
const size_t size) {
127 return syscall(__NR_write, fd, (
long)buff, (
long)size);
131int syscall_close(
const int fd) {
132 return (
int)syscall(__NR_close, fd);
136void *syscall_mmap(
void *addr,
const size_t length,
const int prot,
const int flags,
const int fd,
const long offset) {
137 return (
void*)syscall(__NR_mmap, (
long)addr, (
long)length, prot, flags, fd, offset);
141int syscall_munmap(
void *addr,
const size_t length) {
142 return (
int)syscall(__NR_munmap, (
long)addr, (
long)length);
146void clod_exit(
const int code) {
147 syscall(__NR_exit, code);
148 __builtin_unreachable();