#ifndef COSMOPOLITAN_LIBC_CALLS_SYSCALL_SYSV_INTERNAL_H_ #define COSMOPOLITAN_LIBC_CALLS_SYSCALL_SYSV_INTERNAL_H_ #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ #define i32 int32_t #define i64 int64_t #define u32 uint32_t #define u64 uint64_t /*───────────────────────────────────────────────────────────────────────────│─╗ │ cosmopolitan § syscalls » system five » structless synthetic jump slots ─╬─│┼ ╚────────────────────────────────────────────────────────────────────────────│*/ int _sysret32(long) asm("_sysret"); long _sysret64(long) asm("_sysret"); axdx_t __sys_fork(void) _Hide; axdx_t __sys_pipe(i32[hasatleast 2], i32) _Hide; axdx_t sys_getpid(void) _Hide; char *sys_getcwd(char *, u64) _Hide; char *sys_getcwd_xnu(char *, u64) _Hide; i32 __sys_dup3(i32, i32, i32) _Hide; i32 __sys_execve(const char *, char *const[], char *const[]) _Hide; i32 __sys_fcntl(i32, i32, ...) _Hide; i32 __sys_fcntl_cp(i32, i32, ...) _Hide; i32 __sys_fstat(i32, void *) _Hide; i32 __sys_fstatat(i32, const char *, void *, i32) _Hide; i32 __sys_gettid(i64 *) _Hide; i32 __sys_munmap(void *, u64) _Hide; i32 __sys_openat(i32, const char *, i32, u32) _Hide; i32 __sys_openat_nc(i32, const char *, i32, u32) _Hide; i32 __sys_pipe2(i32[hasatleast 2], u32) _Hide; i32 sys_arch_prctl(i32, i64) _Hide; i32 sys_chdir(const char *) _Hide; i32 sys_chroot(const char *) _Hide; i32 sys_close(i32) _Hide; i32 sys_close_range(u32, u32, u32) _Hide; i32 sys_closefrom(i32) _Hide; i32 sys_creat(const char *, u32) _Hide; i32 sys_dup(i32) _Hide; i32 sys_dup2(i32, i32) _Hide; i32 sys_dup3(i32, i32, i32) _Hide; i32 sys_execve(const char *, char *const[], char *const[]) _Hide; i32 sys_execveat(i32, const char *, char *const[], char *const[], i32) _Hide; i32 sys_faccessat(i32, const char *, i32, u32) _Hide; i32 sys_faccessat2(i32, const char *, i32, u32) _Hide; i32 sys_fadvise(i32, i64, i64, i32) _Hide; i32 sys_fchdir(i32) _Hide; i32 sys_fchmod(i32, u32) _Hide; i32 sys_fchmodat(i32, const char *, u32, u32) _Hide; i32 sys_fchown(i64, u32, u32) _Hide; i32 sys_fchownat(i32, const char *, u32, u32, u32) _Hide; i32 sys_fcntl(i32, i32, u64, i32 (*)(i32, i32, ...)) _Hide; i32 sys_fdatasync(i32) _Hide; i32 sys_fexecve(i32, char *const[], char *const[]) _Hide; i32 sys_flock(i32, i32) _Hide; i32 sys_fork(void) _Hide; i32 sys_fsync(i32) _Hide; i32 sys_ftruncate(i32, i64, i64) _Hide; i32 sys_getcontext(void *) _Hide; i32 sys_getpgid(i32) _Hide; i32 sys_getpgrp(void) _Hide; i32 sys_getppid(void) _Hide; i32 sys_getpriority(i32, u32) _Hide; i32 sys_getresgid(u32 *, u32 *, u32 *) _Hide; i32 sys_getresuid(u32 *, u32 *, u32 *) _Hide; i32 sys_getsid(i32) _Hide; i32 sys_gettid(void) _Hide; i32 sys_ioctl_cp(i32, u64, ...) _Hide; i32 sys_issetugid(void) _Hide; i32 sys_kill(i32, i32, i32) _Hide; i32 sys_linkat(i32, const char *, i32, const char *, i32) _Hide; i32 sys_madvise(void *, size_t, i32) _Hide; i32 sys_memfd_create(const char *, u32) _Hide; i32 sys_mincore(void *, u64, unsigned char *) _Hide; i32 sys_mkdirat(i32, const char *, u32) _Hide; i32 sys_mkfifo(const char *, u32) _Hide; i32 sys_mknod(const char *, u32, u64) _Hide; i32 sys_mprotect(void *, u64, i32) _Hide; i32 sys_msync(void *, u64, i32) _Hide; i32 sys_munmap(void *, u64) _Hide; i32 sys_open(const char *, i32, u32) _Hide; i32 sys_openat(i32, const char *, i32, u32) _Hide; i32 sys_pause(void) _Hide; i32 sys_pipe(i32[hasatleast 2]) _Hide; i32 sys_pipe2(i32[hasatleast 2], u32) _Hide; i32 sys_pivot_root(const char *, const char *) _Hide; i32 sys_pledge(const char *, const char *) _Hide; i32 sys_posix_openpt(i32) _Hide; i32 sys_renameat(i32, const char *, i32, const char *) _Hide; i32 sys_sem_close(i64) _Hide; i32 sys_sem_destroy(i64) _Hide; i32 sys_sem_getvalue(i64, u32 *) _Hide; i32 sys_sem_init(u32, i64 *) _Hide; i32 sys_sem_open(const char *, int, u32, i64 *) _Hide; i32 sys_sem_post(i64) _Hide; i32 sys_sem_trywait(i64) _Hide; i32 sys_sem_unlink(const char *) _Hide; i32 sys_sem_wait(i64) _Hide; i32 sys_setfsgid(i32) _Hide; i32 sys_setfsuid(i32) _Hide; i32 sys_setgid(i32) _Hide; i32 sys_setpgid(i32, i32) _Hide; i32 sys_setpriority(i32, u32, i32) _Hide; i32 sys_setregid(u32, u32) _Hide; i32 sys_setresgid(u32, u32, u32) _Hide; i32 sys_setresuid(u32, u32, u32) _Hide; i32 sys_setreuid(u32, u32) _Hide; i32 sys_setsid(void) _Hide; i32 sys_setuid(i32) _Hide; i32 sys_shm_open(const char *, i32, u32) _Hide; i32 sys_sigaction(i32, const void *, void *, i64, i64) _Hide; i32 sys_sigaltstack(const void *, void *) _Hide; i32 sys_symlinkat(const char *, i32, const char *) _Hide; i32 sys_sync(void) _Hide; i32 sys_sync_file_range(i32, i64, i64, u32) _Hide; i32 sys_syslog(i32, char *, i32) _Hide; i32 sys_tgkill(i32, i32, i32) _Hide; i32 sys_tkill(i32, i32, void *) _Hide; i32 sys_truncate(const char *, u64, u64) _Hide; i32 sys_uname(void *) _Hide; i32 sys_unlink(const char *) _Hide; i32 sys_unlinkat(i32, const char *, i32) _Hide; i32 sys_unmount(const char *, i32) _Hide; i32 sys_unveil(const char *, const char *) _Hide; i64 __sys_ptrace(i32, i32, i64, long *) _Hide; i64 sys_copy_file_range(i32, long *, i32, long *, u64, u32) _Hide; i64 sys_getrandom(void *, u64, u32) _Hide; i64 sys_lseek(i32, i64, i64, i64) _Hide; i64 sys_pread(i32, void *, u64, i64, i64) _Hide; i64 sys_pwrite(i32, const void *, u64, i64, i64) _Hide; i64 sys_read(i32, void *, u64) _Hide; i64 sys_readlink(const char *, char *, u64) _Hide; i64 sys_readlinkat(i32, const char *, char *, u64) _Hide; i64 sys_sendfile(i32, i32, i64 *, u64) _Hide; i64 sys_splice(i32, i64 *, i32, i64 *, u64, u32) _Hide; u32 sys_getegid(void) _Hide; u32 sys_geteuid(void) _Hide; u32 sys_getgid(void) _Hide; u32 sys_getuid(void) _Hide; u32 sys_umask(u32) _Hide; void *__sys_mmap(void *, u64, u32, u32, i64, i64, i64) _Hide; void *sys_mremap(void *, u64, u64, i32, void *) _Hide; void sys_exit(i32) _Hide; #ifdef __x86_64__ i64 sys_write(i32, const void *, u64) _Hide; #elif defined(__aarch64__) static inline ssize_t sys_write(int f, const void *b, size_t c) { register long r0 asm("x0") = (long)f; register long r1 asm("x1") = (long)b; register long r2 asm("x2") = (long)c; register long res_x0 asm("x0"); asm volatile("mov\tx8,%1\n" "svc\t0" : "=r"(res_x0) : "i"(64), "r"(r0), "r"(r1), "r"(r2) : "x8", "memory"); return _sysret64(res_x0); } #endif #ifdef __x86_64__ i32 sys_ioctl(i32, u64, ...) _Hide; #elif defined(__aarch64__) static inline int sys_ioctl(int d, int r, ...) { void *a; va_list va; va_start(va, r); a = va_arg(va, void *); va_end(va); register long r0 asm("x0") = (long)d; register long r1 asm("x1") = (long)r; register long r2 asm("x2") = (long)a; register long res_x0 asm("x0"); asm volatile("mov\tx8,%1\n" "svc\t0" : "=r"(res_x0) : "i"(29), "r"(r0), "r"(r1), "r"(r2) : "x8", "memory"); return _sysret32(res_x0); } #endif #undef i32 #undef i64 #undef u32 #undef u64 COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ #endif /* COSMOPOLITAN_LIBC_CALLS_SYSCALL_SYSV_INTERNAL_H_ */