/*
   This file is part of Fennix Kernel.

   Fennix Kernel is free software: you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation, either version 3 of
   the License, or (at your option) any later version.

   Fennix Kernel is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with Fennix Kernel. If not, see <https://www.gnu.org/licenses/>.
*/

#include <syscalls.hpp>

#include <debug.h>
#include <cpu.hpp>

#include "../kernel.h"

typedef __INT32_TYPE__ mode_t;

#define internal_unimpl(a, b, c, d, e, f, g)                                                     \
    {                                                                                            \
        fixme("Unimplemented Syscall: %lld %lld %lld %lld %lld %lld %lld", a, b, c, d, e, f, g); \
    }

#define stub(a, b, c, d, e, f, g)                                                  \
    {                                                                              \
        fixme("( %lld %lld %lld %lld %lld %lld %lld ) stub", a, b, c, d, e, f, g); \
    }

static ssize_t sys_read(int fd, void *buf, size_t count)
{
    fixme("read( %p %p %ld )", fd, buf, count);
    return -1;
}

static ssize_t sys_write(int fd, const char *buf, size_t count)
{
    fixme("write( %p %p %ld )", fd, buf, count);
    return -1;
}

static ssize_t sys_open(const char *filename, int flags, mode_t mode)
{
    fixme("open( %s %d %d )", filename, flags, mode);
    return -1;
}

static ssize_t sys_close(int fd)
{
    fixme("close( %d )", fd);
    return -1;
}

static ssize_t sys_stat(const char *filename, void *statbuf)
{
    fixme("stat( %s %p )", filename, statbuf);
    return -1;
}

static uint64_t sys_fstat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_lstat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_poll(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_lseek(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mmap(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mprotect(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_munmap(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_brk(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_sigaction(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_sigprocmask(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_sigreturn(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ioctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pread64(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pwrite64(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_readv(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_writev(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_access(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pipe(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_select(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_yield(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mremap(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_msync(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mincore(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_madvise(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_shmget(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_shmat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_shmctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_dup(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_dup2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pause(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_nanosleep(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getitimer(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_alarm(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setitimer(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getpid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sendfile(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_socket(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_connect(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_accept(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sendto(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_recvfrom(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sendmsg(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_recvmsg(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_shutdown(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_bind(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_listen(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getsockname(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getpeername(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_socketpair(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setsockopt(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getsockopt(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_clone(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fork(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_vfork(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static int sys_execve(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_exit(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_wait4(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_kill(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_uname(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_semget(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_semop(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_semctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_shmdt(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_msgget(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_msgsnd(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_msgrcv(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_msgctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fcntl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_flock(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fsync(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fdatasync(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_truncate(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ftruncate(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getdents(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getcwd(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_chdir(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fchdir(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rename(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mkdir(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rmdir(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_creat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_link(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_unlink(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_symlink(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_readlink(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_chmod(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fchmod(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_chown(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fchown(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_lchown(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_umask(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_gettimeofday(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getrlimit(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getrusage(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sysinfo(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_times(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ptrace(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static unsigned int sys_getuid(void)
{
    stub(0, 0, 0, 0, 0, 0, 0);
    return 0;
}

static uint64_t sys_syslog(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static unsigned int sys_getgid(void)
{
    stub(0, 0, 0, 0, 0, 0, 0);
    return 0;
}

static uint64_t sys_setuid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setgid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static unsigned int sys_geteuid(void)
{
    stub(0, 0, 0, 0, 0, 0, 0);
    return 0;
}

static unsigned int sys_getegid(void)
{
    stub(0, 0, 0, 0, 0, 0, 0);
    return 0;
}

static uint64_t sys_setpgid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getppid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getpgrp(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setsid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setreuid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setregid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getgroups(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setgroups(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setresuid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getresuid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setresgid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getresgid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getpgid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setfsuid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setfsgid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getsid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_capget(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_capset(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_sigpending(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_sigtimedwait(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_sigqueueinfo(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_sigsuspend(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sigaltstack(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_utime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mknod(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_uselib(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_personality(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ustat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_statfs(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fstatfs(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sysfs(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getpriority(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setpriority(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_setparam(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_getparam(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_setscheduler(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_getscheduler(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_get_priority_max(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_get_priority_min(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_rr_get_interval(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mlock(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_munlock(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mlockall(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_munlockall(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_vhangup(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_modify_ldt(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pivot_root(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys__sysctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_prctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_arch_prctl(int code, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)
{
    trace("( code=%#lx, arg2=%lx, arg3=%lx, arg4=%lx, arg5=%lx )", code, arg2, arg3, arg4, arg5);

    switch (code)
    {
    case 0x1001: // ARCH_SET_GS
    {
#if defined(a64)
        CPU::x64::wrmsr(CPU::x64::MSRID::MSR_GS_BASE, arg2);
#elif defined(a32)
        CPU::x32::wrmsr(CPU::x32::MSRID::MSR_GS_BASE, arg2);
#endif
        return arg2;
    }
    case 0x1002: // ARCH_SET_FS
    {
#if defined(a64)
        CPU::x64::wrmsr(CPU::x64::MSRID::MSR_FS_BASE, arg2);
#elif defined(a32)
        CPU::x32::wrmsr(CPU::x32::MSRID::MSR_FS_BASE, arg2);
#endif
        return arg2;
    }
    case 0x1003: // ARCH_GET_FS
    {
#if defined(a64)
        return CPU::x64::rdmsr(CPU::x64::MSRID::MSR_FS_BASE);
#elif defined(a32)
        return CPU::x32::rdmsr(CPU::x32::MSRID::MSR_FS_BASE);
#endif
    }
    case 0x1004: // ARCH_GET_GS
    {
#if defined(a64)
        return CPU::x64::rdmsr(CPU::x64::MSRID::MSR_GS_BASE);
#elif defined(a32)
        return CPU::x32::rdmsr(CPU::x32::MSRID::MSR_GS_BASE);
#endif
    }
    default:
        warn("Unimplemented prctl code %#lx (arg2=%lx, arg3=%lx, arg4=%lx, arg5=%lx)", code, arg2, arg3, arg4, arg5);
        return -1; /* EINVAL */
    }
    return -1;
}

static uint64_t sys_adjtimex(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setrlimit(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_chroot(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sync(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_acct(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_settimeofday(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mount(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_umount2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_swapon(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_swapoff(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_reboot(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sethostname(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setdomainname(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_iopl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ioperm(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_create_module(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_init_module(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_delete_module(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_get_kernel_syms(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_query_module(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_quotactl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_nfsservctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getpmsg(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_putpmsg(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_afs_syscall(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_tuxcall(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_security(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_gettid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_readahead(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_lsetxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fsetxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_lgetxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fgetxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_listxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_llistxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_flistxattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_removexattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_lremovexattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fremovexattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_tkill(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_time(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_futex(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_setaffinity(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_getaffinity(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_set_thread_area(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_io_setup(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_io_destroy(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_io_getevents(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_io_submit(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_io_cancel(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_get_thread_area(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_lookup_dcookie(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_epoll_create(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_epoll_ctl_old(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_epoll_wait_old(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_remap_file_pages(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getdents64(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_set_tid_address(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_restart_syscall(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_semtimedop(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fadvise64(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timer_create(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timer_settime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timer_gettime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timer_getoverrun(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timer_delete(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_clock_settime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_clock_gettime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_clock_getres(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_clock_nanosleep(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_exit_group(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_epoll_wait(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_epoll_ctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_tgkill(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_utimes(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_vserver(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mbind(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_set_mempolicy(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_get_mempolicy(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mq_open(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mq_unlink(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mq_timedsend(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mq_timedreceive(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mq_notify(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mq_getsetattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_kexec_load(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_waitid(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_add_key(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_request_key(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_keyctl(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ioprio_set(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ioprio_get(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_inotify_init(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_inotify_add_watch(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_inotify_rm_watch(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_migrate_pages(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_openat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mkdirat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_mknodat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fchownat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_futimesat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_newfstatat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_unlinkat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_renameat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_linkat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_symlinkat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_readlinkat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fchmodat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_faccessat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pselect6(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_ppoll(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_unshare(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_set_robust_list(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_get_robust_list(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_splice(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_tee(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sync_file_range(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_vmsplice(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_move_pages(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_utimensat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_epoll_pwait(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_signalfd(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timerfd_create(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_eventfd(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fallocate(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timerfd_settime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_timerfd_gettime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_accept4(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_signalfd4(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_eventfd2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_epoll_create1(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_dup3(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pipe2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_inotify_init1(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_preadv(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_pwritev(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_rt_tgsigqueueinfo(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_perf_event_open(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_recvmmsg(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fanotify_init(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_fanotify_mark(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_prlimit64(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_name_to_handle_at(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_open_by_handle_at(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_clock_adjtime(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_syncfs(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sendmmsg(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_setns(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getcpu(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_process_vm_readv(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_process_vm_writev(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_kcmp(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_finit_module(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_setattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_sched_getattr(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_renameat2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_seccomp(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_getrandom(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_memfd_create(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_kexec_file_load(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t sys_bpf(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t stub_execveat(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t userfaultfd(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t membarrier(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t mlock2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t copy_file_range(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t preadv2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t pwritev2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t pkey_mprotect(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t pkey_alloc(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t pkey_free(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t statx(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t io_pgetevents(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t rseq(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

static uint64_t pkey_mprotect_(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e, uint64_t f, uint64_t g)
{
    internal_unimpl(a, b, c, d, e, f, g);
    return -1;
}

// Syscalls list: https://filippo.io/linux-syscall-table/ https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

static void *LinuxSyscallsTable[] = {
    [0] = (void *)sys_read,
    [1] = (void *)sys_write,
    [2] = (void *)sys_open,
    [3] = (void *)sys_close,
    [4] = (void *)sys_stat,
    [5] = (void *)sys_fstat,
    [6] = (void *)sys_lstat,
    [7] = (void *)sys_poll,
    [8] = (void *)sys_lseek,
    [9] = (void *)sys_mmap,
    [10] = (void *)sys_mprotect,
    [11] = (void *)sys_munmap,
    [12] = (void *)sys_brk,
    [13] = (void *)sys_rt_sigaction,
    [14] = (void *)sys_rt_sigprocmask,
    [15] = (void *)sys_rt_sigreturn,
    [16] = (void *)sys_ioctl,
    [17] = (void *)sys_pread64,
    [18] = (void *)sys_pwrite64,
    [19] = (void *)sys_readv,
    [20] = (void *)sys_writev,
    [21] = (void *)sys_access,
    [22] = (void *)sys_pipe,
    [23] = (void *)sys_select,
    [24] = (void *)sys_sched_yield,
    [25] = (void *)sys_mremap,
    [26] = (void *)sys_msync,
    [27] = (void *)sys_mincore,
    [28] = (void *)sys_madvise,
    [29] = (void *)sys_shmget,
    [30] = (void *)sys_shmat,
    [31] = (void *)sys_shmctl,
    [32] = (void *)sys_dup,
    [33] = (void *)sys_dup2,
    [34] = (void *)sys_pause,
    [35] = (void *)sys_nanosleep,
    [36] = (void *)sys_getitimer,
    [37] = (void *)sys_alarm,
    [38] = (void *)sys_setitimer,
    [39] = (void *)sys_getpid,
    [40] = (void *)sys_sendfile,
    [41] = (void *)sys_socket,
    [42] = (void *)sys_connect,
    [43] = (void *)sys_accept,
    [44] = (void *)sys_sendto,
    [45] = (void *)sys_recvfrom,
    [46] = (void *)sys_sendmsg,
    [47] = (void *)sys_recvmsg,
    [48] = (void *)sys_shutdown,
    [49] = (void *)sys_bind,
    [50] = (void *)sys_listen,
    [51] = (void *)sys_getsockname,
    [52] = (void *)sys_getpeername,
    [53] = (void *)sys_socketpair,
    [54] = (void *)sys_setsockopt,
    [55] = (void *)sys_getsockopt,
    [56] = (void *)sys_clone,
    [57] = (void *)sys_fork,
    [58] = (void *)sys_vfork,
    [59] = (void *)sys_execve,
    [60] = (void *)sys_exit,
    [61] = (void *)sys_wait4,
    [62] = (void *)sys_kill,
    [63] = (void *)sys_uname,
    [64] = (void *)sys_semget,
    [65] = (void *)sys_semop,
    [66] = (void *)sys_semctl,
    [67] = (void *)sys_shmdt,
    [68] = (void *)sys_msgget,
    [69] = (void *)sys_msgsnd,
    [70] = (void *)sys_msgrcv,
    [71] = (void *)sys_msgctl,
    [72] = (void *)sys_fcntl,
    [73] = (void *)sys_flock,
    [74] = (void *)sys_fsync,
    [75] = (void *)sys_fdatasync,
    [76] = (void *)sys_truncate,
    [77] = (void *)sys_ftruncate,
    [78] = (void *)sys_getdents,
    [79] = (void *)sys_getcwd,
    [80] = (void *)sys_chdir,
    [81] = (void *)sys_fchdir,
    [82] = (void *)sys_rename,
    [83] = (void *)sys_mkdir,
    [84] = (void *)sys_rmdir,
    [85] = (void *)sys_creat,
    [86] = (void *)sys_link,
    [87] = (void *)sys_unlink,
    [88] = (void *)sys_symlink,
    [89] = (void *)sys_readlink,
    [90] = (void *)sys_chmod,
    [91] = (void *)sys_fchmod,
    [92] = (void *)sys_chown,
    [93] = (void *)sys_fchown,
    [94] = (void *)sys_lchown,
    [95] = (void *)sys_umask,
    [96] = (void *)sys_gettimeofday,
    [97] = (void *)sys_getrlimit,
    [98] = (void *)sys_getrusage,
    [99] = (void *)sys_sysinfo,
    [100] = (void *)sys_times,
    [101] = (void *)sys_ptrace,
    [102] = (void *)sys_getuid,
    [103] = (void *)sys_syslog,
    [104] = (void *)sys_getgid,
    [105] = (void *)sys_setuid,
    [106] = (void *)sys_setgid,
    [107] = (void *)sys_geteuid,
    [108] = (void *)sys_getegid,
    [109] = (void *)sys_setpgid,
    [110] = (void *)sys_getppid,
    [111] = (void *)sys_getpgrp,
    [112] = (void *)sys_setsid,
    [113] = (void *)sys_setreuid,
    [114] = (void *)sys_setregid,
    [115] = (void *)sys_getgroups,
    [116] = (void *)sys_setgroups,
    [117] = (void *)sys_setresuid,
    [118] = (void *)sys_getresuid,
    [119] = (void *)sys_setresgid,
    [120] = (void *)sys_getresgid,
    [121] = (void *)sys_getpgid,
    [122] = (void *)sys_setfsuid,
    [123] = (void *)sys_setfsgid,
    [124] = (void *)sys_getsid,
    [125] = (void *)sys_capget,
    [126] = (void *)sys_capset,
    [127] = (void *)sys_rt_sigpending,
    [128] = (void *)sys_rt_sigtimedwait,
    [129] = (void *)sys_rt_sigqueueinfo,
    [130] = (void *)sys_rt_sigsuspend,
    [131] = (void *)sys_sigaltstack,
    [132] = (void *)sys_utime,
    [133] = (void *)sys_mknod,
    [134] = (void *)sys_uselib,
    [135] = (void *)sys_personality,
    [136] = (void *)sys_ustat,
    [137] = (void *)sys_statfs,
    [138] = (void *)sys_fstatfs,
    [139] = (void *)sys_sysfs,
    [140] = (void *)sys_getpriority,
    [141] = (void *)sys_setpriority,
    [142] = (void *)sys_sched_setparam,
    [143] = (void *)sys_sched_getparam,
    [144] = (void *)sys_sched_setscheduler,
    [145] = (void *)sys_sched_getscheduler,
    [146] = (void *)sys_sched_get_priority_max,
    [147] = (void *)sys_sched_get_priority_min,
    [148] = (void *)sys_sched_rr_get_interval,
    [149] = (void *)sys_mlock,
    [150] = (void *)sys_munlock,
    [151] = (void *)sys_mlockall,
    [152] = (void *)sys_munlockall,
    [153] = (void *)sys_vhangup,
    [154] = (void *)sys_modify_ldt,
    [155] = (void *)sys_pivot_root,
    [156] = (void *)sys__sysctl,
    [157] = (void *)sys_prctl,
    [158] = (void *)sys_arch_prctl,
    [159] = (void *)sys_adjtimex,
    [160] = (void *)sys_setrlimit,
    [161] = (void *)sys_chroot,
    [162] = (void *)sys_sync,
    [163] = (void *)sys_acct,
    [164] = (void *)sys_settimeofday,
    [165] = (void *)sys_mount,
    [166] = (void *)sys_umount2,
    [167] = (void *)sys_swapon,
    [168] = (void *)sys_swapoff,
    [169] = (void *)sys_reboot,
    [170] = (void *)sys_sethostname,
    [171] = (void *)sys_setdomainname,
    [172] = (void *)sys_iopl,
    [173] = (void *)sys_ioperm,
    [174] = (void *)sys_create_module,
    [175] = (void *)sys_init_module,
    [176] = (void *)sys_delete_module,
    [177] = (void *)sys_get_kernel_syms,
    [178] = (void *)sys_query_module,
    [179] = (void *)sys_quotactl,
    [180] = (void *)sys_nfsservctl,
    [181] = (void *)sys_getpmsg,
    [182] = (void *)sys_putpmsg,
    [183] = (void *)sys_afs_syscall,
    [184] = (void *)sys_tuxcall,
    [185] = (void *)sys_security,
    [186] = (void *)sys_gettid,
    [187] = (void *)sys_readahead,
    [188] = (void *)sys_setxattr,
    [189] = (void *)sys_lsetxattr,
    [190] = (void *)sys_fsetxattr,
    [191] = (void *)sys_getxattr,
    [192] = (void *)sys_lgetxattr,
    [193] = (void *)sys_fgetxattr,
    [194] = (void *)sys_listxattr,
    [195] = (void *)sys_llistxattr,
    [196] = (void *)sys_flistxattr,
    [197] = (void *)sys_removexattr,
    [198] = (void *)sys_lremovexattr,
    [199] = (void *)sys_fremovexattr,
    [200] = (void *)sys_tkill,
    [201] = (void *)sys_time,
    [202] = (void *)sys_futex,
    [203] = (void *)sys_sched_setaffinity,
    [204] = (void *)sys_sched_getaffinity,
    [205] = (void *)sys_set_thread_area,
    [206] = (void *)sys_io_setup,
    [207] = (void *)sys_io_destroy,
    [208] = (void *)sys_io_getevents,
    [209] = (void *)sys_io_submit,
    [210] = (void *)sys_io_cancel,
    [211] = (void *)sys_get_thread_area,
    [212] = (void *)sys_lookup_dcookie,
    [213] = (void *)sys_epoll_create,
    [214] = (void *)sys_epoll_ctl_old,
    [215] = (void *)sys_epoll_wait_old,
    [216] = (void *)sys_remap_file_pages,
    [217] = (void *)sys_getdents64,
    [218] = (void *)sys_set_tid_address,
    [219] = (void *)sys_restart_syscall,
    [220] = (void *)sys_semtimedop,
    [221] = (void *)sys_fadvise64,
    [222] = (void *)sys_timer_create,
    [223] = (void *)sys_timer_settime,
    [224] = (void *)sys_timer_gettime,
    [225] = (void *)sys_timer_getoverrun,
    [226] = (void *)sys_timer_delete,
    [227] = (void *)sys_clock_settime,
    [228] = (void *)sys_clock_gettime,
    [229] = (void *)sys_clock_getres,
    [230] = (void *)sys_clock_nanosleep,
    [231] = (void *)sys_exit_group,
    [232] = (void *)sys_epoll_wait,
    [233] = (void *)sys_epoll_ctl,
    [234] = (void *)sys_tgkill,
    [235] = (void *)sys_utimes,
    [236] = (void *)sys_vserver,
    [237] = (void *)sys_mbind,
    [238] = (void *)sys_set_mempolicy,
    [239] = (void *)sys_get_mempolicy,
    [240] = (void *)sys_mq_open,
    [241] = (void *)sys_mq_unlink,
    [242] = (void *)sys_mq_timedsend,
    [243] = (void *)sys_mq_timedreceive,
    [244] = (void *)sys_mq_notify,
    [245] = (void *)sys_mq_getsetattr,
    [246] = (void *)sys_kexec_load,
    [247] = (void *)sys_waitid,
    [248] = (void *)sys_add_key,
    [249] = (void *)sys_request_key,
    [250] = (void *)sys_keyctl,
    [251] = (void *)sys_ioprio_set,
    [252] = (void *)sys_ioprio_get,
    [253] = (void *)sys_inotify_init,
    [254] = (void *)sys_inotify_add_watch,
    [255] = (void *)sys_inotify_rm_watch,
    [256] = (void *)sys_migrate_pages,
    [257] = (void *)sys_openat,
    [258] = (void *)sys_mkdirat,
    [259] = (void *)sys_mknodat,
    [260] = (void *)sys_fchownat,
    [261] = (void *)sys_futimesat,
    [262] = (void *)sys_newfstatat,
    [263] = (void *)sys_unlinkat,
    [264] = (void *)sys_renameat,
    [265] = (void *)sys_linkat,
    [266] = (void *)sys_symlinkat,
    [267] = (void *)sys_readlinkat,
    [268] = (void *)sys_fchmodat,
    [269] = (void *)sys_faccessat,
    [270] = (void *)sys_pselect6,
    [271] = (void *)sys_ppoll,
    [272] = (void *)sys_unshare,
    [273] = (void *)sys_set_robust_list,
    [274] = (void *)sys_get_robust_list,
    [275] = (void *)sys_splice,
    [276] = (void *)sys_tee,
    [277] = (void *)sys_sync_file_range,
    [278] = (void *)sys_vmsplice,
    [279] = (void *)sys_move_pages,
    [280] = (void *)sys_utimensat,
    [281] = (void *)sys_epoll_pwait,
    [282] = (void *)sys_signalfd,
    [283] = (void *)sys_timerfd_create,
    [284] = (void *)sys_eventfd,
    [285] = (void *)sys_fallocate,
    [286] = (void *)sys_timerfd_settime,
    [287] = (void *)sys_timerfd_gettime,
    [288] = (void *)sys_accept4,
    [289] = (void *)sys_signalfd4,
    [290] = (void *)sys_eventfd2,
    [291] = (void *)sys_epoll_create1,
    [292] = (void *)sys_dup3,
    [293] = (void *)sys_pipe2,
    [294] = (void *)sys_inotify_init1,
    [295] = (void *)sys_preadv,
    [296] = (void *)sys_pwritev,
    [297] = (void *)sys_rt_tgsigqueueinfo,
    [298] = (void *)sys_perf_event_open,
    [299] = (void *)sys_recvmmsg,
    [300] = (void *)sys_fanotify_init,
    [301] = (void *)sys_fanotify_mark,
    [302] = (void *)sys_prlimit64,
    [303] = (void *)sys_name_to_handle_at,
    [304] = (void *)sys_open_by_handle_at,
    [305] = (void *)sys_clock_adjtime,
    [306] = (void *)sys_syncfs,
    [307] = (void *)sys_sendmmsg,
    [308] = (void *)sys_setns,
    [309] = (void *)sys_getcpu,
    [310] = (void *)sys_process_vm_readv,
    [311] = (void *)sys_process_vm_writev,
    [312] = (void *)sys_kcmp,
    [313] = (void *)sys_finit_module,
    [314] = (void *)sys_sched_setattr,
    [315] = (void *)sys_sched_getattr,
    [316] = (void *)sys_renameat2,
    [317] = (void *)sys_seccomp,
    [318] = (void *)sys_getrandom,
    [319] = (void *)sys_memfd_create,
    [320] = (void *)sys_kexec_file_load,
    [321] = (void *)sys_bpf,
    [322] = (void *)stub_execveat,
    [323] = (void *)userfaultfd,
    [324] = (void *)membarrier,
    [325] = (void *)mlock2,
    [326] = (void *)copy_file_range,
    [327] = (void *)preadv2,
    [328] = (void *)pwritev2,
    [329] = (void *)pkey_mprotect,
    [330] = (void *)pkey_alloc,
    [331] = (void *)pkey_free,
    [332] = (void *)statx,
    [333] = (void *)io_pgetevents,
    [334] = (void *)rseq,
    [335] = (void *)pkey_mprotect_,
};

uintptr_t HandleLinuxSyscalls(SyscallsFrame *Frame)
{
#if defined(a64)
    if (Frame->rax > sizeof(LinuxSyscallsTable))
    {
        fixme("Syscall %lld not implemented", Frame->rax);
        return -1;
    }

    uint64_t (*call)(uint64_t, ...) = reinterpret_cast<uint64_t (*)(uint64_t, ...)>(LinuxSyscallsTable[Frame->rax]);
    if (!call)
    {
        error("Syscall %#llx failed.", Frame->rax);
        return -1;
    }
    uint64_t ret = call(Frame->rdi, Frame->rsi, Frame->rdx, Frame->r10, Frame->r8, Frame->r9);
    Frame->rax = ret;
    return ret;
#elif defined(a32)
    return 0;
#elif defined(aa64)
    return 0;
#endif
}