Viewing: syscall.h
📄 syscall.h (Read Only) ⬅ To go back
#ifndef ULIBC_SYSCALL_H
#define ULIBC_SYSCALL_H

#include <stdint.h>

enum {
    SYS_WRITE = 1,
    SYS_EXIT  = 2,
    SYS_GETPID = 3,
    SYS_OPEN  = 4,
    SYS_READ  = 5,
    SYS_CLOSE = 6,
    SYS_WAITPID = 7,
    SYS_LSEEK = 9,
    SYS_FSTAT = 10,
    SYS_STAT = 11,
    SYS_DUP = 12,
    SYS_DUP2 = 13,
    SYS_PIPE = 14,
    SYS_EXECVE = 15,
    SYS_FORK = 16,
    SYS_GETPPID = 17,
    SYS_POLL = 18,
    SYS_KILL = 19,
    SYS_SELECT = 20,
    SYS_IOCTL = 21,
    SYS_SETSID = 22,
    SYS_SETPGID = 23,
    SYS_GETPGRP = 24,
    SYS_SIGACTION = 25,
    SYS_SIGPROCMASK = 26,
    SYS_SIGRETURN = 27,
    SYS_MKDIR = 28,
    SYS_UNLINK = 29,
    SYS_GETDENTS = 30,
    SYS_FCNTL = 31,
    SYS_CHDIR = 32,
    SYS_GETCWD = 33,
    SYS_PIPE2 = 34,
    SYS_DUP3 = 35,
    SYS_OPENAT = 36,
    SYS_FSTATAT = 37,
    SYS_UNLINKAT = 38,
    SYS_RENAME = 39,
    SYS_RMDIR = 40,
    SYS_BRK = 41,
    SYS_NANOSLEEP = 42,
    SYS_CLOCK_GETTIME = 43,
    SYS_MMAP = 44,
    SYS_MUNMAP = 45,
    SYS_SET_THREAD_AREA = 57,
    SYS_CLONE = 67,
    SYS_GETTID = 68,
    SYS_FSYNC = 69,
    SYS_FDATASYNC = 70,
    SYS_SIGPENDING = 71,
    SYS_PREAD = 72,
    SYS_PWRITE = 73,
    SYS_ACCESS = 74,
    SYS_UMASK = 75,
    SYS_CHMOD = 50,
    SYS_CHOWN = 51,
    SYS_GETUID = 52,
    SYS_GETGID = 53,
    SYS_SETUID = 76,
    SYS_SETGID = 77,
    SYS_TRUNCATE = 78,
    SYS_FTRUNCATE = 79,
    SYS_SIGSUSPEND = 80,
    SYS_READV = 81,
    SYS_WRITEV = 82,
    SYS_ALARM = 83,
    SYS_TIMES = 84,
    SYS_FUTEX = 85,
    SYS_SIGALTSTACK = 86,
    SYS_FLOCK = 87,
    SYS_GETEUID = 88,
    SYS_GETEGID = 89,
    SYS_SETEUID = 90,
    SYS_SETEGID = 91,
    SYS_SETITIMER = 92,
    SYS_GETITIMER = 93,
    SYS_SHMGET = 46,
    SYS_SHMAT  = 47,
    SYS_SHMDT  = 48,
    SYS_SHMCTL = 49,
    SYS_LINK   = 54,
    SYS_SYMLINK = 55,
    SYS_READLINK = 56,
    SYS_SOCKET    = 58,
    SYS_BIND      = 59,
    SYS_LISTEN    = 60,
    SYS_ACCEPT    = 61,
    SYS_CONNECT   = 62,
    SYS_SEND      = 63,
    SYS_RECV      = 64,
    SYS_SENDTO    = 65,
    SYS_RECVFROM  = 66,
    SYS_WAITID    = 94,
    SYS_SIGQUEUE  = 95,
    SYS_POSIX_SPAWN = 96,
    SYS_MQ_OPEN     = 97,
    SYS_MQ_CLOSE    = 98,
    SYS_MQ_SEND     = 99,
    SYS_MQ_RECEIVE  = 100,
    SYS_MQ_UNLINK   = 101,
    SYS_SEM_OPEN    = 102,
    SYS_SEM_CLOSE   = 103,
    SYS_SEM_WAIT    = 104,
    SYS_SEM_POST    = 105,
    SYS_SEM_UNLINK  = 106,
    SYS_SEM_GETVALUE = 107,
    SYS_GETADDRINFO  = 108,
    SYS_DLOPEN       = 109,
    SYS_DLSYM        = 110,
    SYS_DLCLOSE      = 111,
    SYS_EPOLL_CREATE = 112,
    SYS_EPOLL_CTL    = 113,
    SYS_EPOLL_WAIT   = 114,
    SYS_INOTIFY_INIT      = 115,
    SYS_INOTIFY_ADD_WATCH = 116,
    SYS_INOTIFY_RM_WATCH  = 117,
    SYS_SENDMSG  = 118,
    SYS_RECVMSG  = 119,
    SYS_PIVOT_ROOT = 120,
    SYS_AIO_READ    = 121,
    SYS_AIO_WRITE   = 122,
    SYS_AIO_ERROR   = 123,
    SYS_AIO_RETURN  = 124,
    SYS_AIO_SUSPEND = 125,
    SYS_MOUNT = 126,
    SYS_GETTIMEOFDAY = 127,
    SYS_MPROTECT = 128,
    SYS_GETRLIMIT = 129,
    SYS_SETRLIMIT = 130,
    SYS_SETSOCKOPT = 131,
    SYS_GETSOCKOPT = 132,
    SYS_SHUTDOWN = 133,
    SYS_GETPEERNAME = 134,
    SYS_GETSOCKNAME = 135,
    SYS_UNAME = 136,
    SYS_GETRUSAGE = 137,
    SYS_UMOUNT2 = 138,
    SYS_WAIT4 = 139,
    SYS_MADVISE = 140,
    SYS_EXECVEAT = 141,
};

/* Raw syscall wrappers — up to 5 args via INT 0x80 */
static inline int _syscall0(int nr) {
    int ret;
    __asm__ volatile("int $0x80" : "=a"(ret) : "a"(nr) : "memory");
    return ret;
}

static inline int _syscall1(int nr, int a1) {
    int ret;
    __asm__ volatile("int $0x80" : "=a"(ret) : "a"(nr), "b"(a1) : "memory");
    return ret;
}

static inline int _syscall2(int nr, int a1, int a2) {
    int ret;
    __asm__ volatile("int $0x80" : "=a"(ret) : "a"(nr), "b"(a1), "c"(a2) : "memory");
    return ret;
}

static inline int _syscall3(int nr, int a1, int a2, int a3) {
    int ret;
    __asm__ volatile("int $0x80" : "=a"(ret) : "a"(nr), "b"(a1), "c"(a2), "d"(a3) : "memory");
    return ret;
}

static inline int _syscall4(int nr, int a1, int a2, int a3, int a4) {
    int ret;
    __asm__ volatile("int $0x80" : "=a"(ret) : "a"(nr), "b"(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
    return ret;
}

static inline int _syscall5(int nr, int a1, int a2, int a3, int a4, int a5) {
    int ret;
    __asm__ volatile("int $0x80" : "=a"(ret) : "a"(nr), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
    return ret;
}

#endif