/* -*- c -*-
 *
 * This is a list of system calls we invoke "directly".  These
 * are generated into syscall stubs in their own files, so the
 * linker can do its job properly.
 *
 * The full description of a line is:
 * [<[?][!]arch,...>] type [sysname,...][@systype][::funcname](args);
 *
 * ? means only instantiate this system call if present in asm/unistd.h
 */

#include <asm/unistd.h>
#include <klibc/sysconfig.h>
#include <bitsize.h>

/*
 * Process-related syscalls
 */
void _exit,exit::_exit(int);
<?!ia64> pid_t clone::__clone(unsigned long, void *);
<?ia64> pid_t clone::__clone2(unsigned long, void *, void *);
# if ! _KLIBC_NO_MMU
<!sparc,sparc64,ia64> pid_t fork();
<sparc,sparc64> pid_t fork@forkish();
#endif
#if _KLIBC_REAL_VFORK
/*
 * A lot of architectures need architecture-specific vfork
 * stubs, due to the no-stack requirement.  These are the
 * architectures which do not.
 */
<alpha,m32r,ppc,ppc64,sh,s390,s390x> pid_t vfork();
<sparc,sparc64> pid_t vfork@forkish();
#endif
<!alpha> pid_t getpid();
<alpha> pid_t getxpid@dual0::getpid();
int setpgid(pid_t, pid_t);
pid_t getpgid(pid_t);
<!alpha> pid_t getppid();
<alpha> pid_t getxpid@dual1::getppid();
pid_t setsid();
pid_t getsid(pid_t);
pid_t wait4(pid_t, int *, int, struct rusage *);
int execve(const char *, char * const *, char * const *);
<?> int nice(int);
<alpha,ia64> int getpriority(int, int);
<!alpha,ia64> int getpriority::__getpriority(int, int);
int setpriority(int, int, int);
int sched_setscheduler(pid_t, int, const struct sched_param *);
int sched_yield();

/*
 * User and group IDs
 */
int setuid32,setuid::setuid(uid_t);
int setgid32,setgid::setgid(gid_t);
<!alpha> uid_t getuid32,getuid::getuid();
<alpha>  uid_t getxuid@dual0::getuid();
<!alpha> gid_t getgid32,getgid::getgid();
<alpha> gid_t getxgid@dual0::getgid();
<!alpha> uid_t geteuid32,geteuid::geteuid();
<alpha> uid_t getxuid@dual1::geteuid();
<!alpha> gid_t getegid32,getegid::getegid();
<alpha> gid_t getxgid@dual1::getegid();
int getgroups32,getgroups::getgroups(int, gid_t *);
int setgroups32,setgroups::setgroups(size_t, const gid_t *);
int setreuid32,setreuid::setreuid(uid_t, uid_t);
int setregid32,setregid::setregid(gid_t, gid_t);
int setfsuid32,setfsuid::setfsuid(uid_t);
int setfsgid32,setfsgid::setfsgid(gid_t);
int setresuid32,setresuid::setresuid(int, uid_t, uid, uid_t);

/*
 * Filesystem-related system calls
 */
int mount(const char *, const char *, const char *, unsigned long, const void *);
<!alpha,ia64> int umount2(const char *, int);
<alpha,ia64> int umount::umount2(const char *, int);
<?> int pivot_root(const char *, const char *);
int sync();
#ifdef __NR_statfs64
int statfs64::__statfs64(const char *, size_t, struct statfs *);
#else
int statfs(const char *, struct statfs *);
#endif
#ifdef __NR_fstatfs64
int fstatfs64::__fstatfs64(int, size_t, struct statfs *);
#else
int fstatfs(int, struct statfs *);
#endif
int swapon(const char *, int);
int swapoff(const char *);

/*
 * Inode-related system calls
 */
int access(const char *, int);
<?> int faccessat(int, const char *, int);
int link(const char *, const char *);
<?> int linkat(int, const char *, int, const char *);
int unlink(const char *);
<?> int unlinkat(int, const char *);
int chdir(const char *);
int fchdir(int);
int rename(const char *, const char *);
<?> int renameat(int, const char *, int, const char *);
int mknod(const char *, mode_t, dev_t);
<?> int mknodat(int, const char *, const char *, mode_t, dev_t);
int chmod(const char *, mode_t);
int fchmod(int, mode_t);
<?> int fchmodat(int, const char *, mode_t);
int mkdir(const char *, mode_t);
<?> int mkdirat(int, const char *, const char *, mode_t);
int rmdir(const char *);
<!alpha,ia64,mips,mips64,sparc,sparc64> int pipe(int *);
mode_t umask(mode_t);
int chroot(const char *);
int symlink(const char *, const char *);
<?> int symlinkat(const char *, int, const char *);
int readlink(const char *, char *, size_t);
<?> int readlinkat(int, const char *, char *, int);
<!ppc64> int stat64,stat::stat(const char *, struct stat *);
<!ppc64> int lstat64,lstat::lstat(const char *, struct stat *);
<!ppc64> int fstat64,fstat::fstat(int, struct stat *);
<ppc64> int stat::stat(const char *, struct stat *);
<ppc64> int lstat::lstat(const char *, struct stat *);
<ppc64> int fstat::fstat(int, struct stat *);
/* XXX: Is this right?! */
<?> int fstatat64,newstatat,fstatat::fstatat(int, const char *, struct stat *, int);
int getdents64,getdents::getdents(unsigned int, struct dirent *, unsigned int);
int chown32,chown::chown(const char *, uid_t, gid_t);
int fchown32,fchown::fchown(int, uid_t, gid_t);
<?> int fchownat(int, const char *, uid_t, gid_t, int);
int lchown32,lchown::lchown(const char *, uid_t, gid_t);
int getcwd::__getcwd(char *, size_t);
<?> int utime(const char *, const struct utimbuf *);
<?> int utimes(const char *, const struct timeval *);
<?> int futimesat(int, const char *, const struct timeval *);
<?> int inotify_init(void);
<?> int inotify_add_watch(int, const char *, __u32);
<?> int inotify_rm_watch(int, __u32);

/*
 * I/O operations
 */
<!i386,64> int open::__open(const char *, int, mode_t);
<?!i386,64> int openat::__openat(int, const char *, int, mode_t);
<64> int open(const char *, int, mode_t);
ssize_t read(int, void *, size_t);
ssize_t write(int, const void *, size_t);
int close(int);
<64> off_t lseek(int, off_t, int);
<32> int _llseek::__llseek(int, unsigned long, unsigned long, off_t *, int);
int dup(int);
int dup2(int, int);
<i386> int fcntl64@varadic::fcntl(int, int, unsigned long);
<ppc64> int fcntl(int, int, unsigned long);
<!i386,ppc64> int fcntl64,fcntl::fcntl(int, int, unsigned long);
int ioctl(int, int, void *);
int flock(int, int);
int _newselect,select::select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
#if defined(__NR_pselect) && !_KLIBC_USE_RT_SIG
int pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);
#elif defined(__NR_pselect7)
int pselect7::__pselect7(int, fd_set *, fd_set *, fd_set *, struct timespec *, const sigset_t *, size_t);
#elif defined(__NR_pselect6)
int pselect6::__pselect6(int, fd_set *, fd_set *, fd_set *, struct timespec *, const struct __pselect6 *);
#endif
int poll(struct pollfd *, nfds_t, long);
<?> int ppoll::__ppoll(struct pollfd *, nfds_t, struct timespec *, const sigset_t *, size_t);
int fsync(int);
int fdatasync,fsync::fdatasync(int);
int readv(int, const struct iovec *, int);
int writev(int, const struct iovec *, int);
int ftruncate64,ftruncate::ftruncate(int, off_t);
ssize_t pread64,pread::pread(int, void *, size_t, off_t);
ssize_t pwrite64,pwrite::pwrite(int, void *, size_t, off_t);
int sync_file_range,fdatasync,fsync::sync_file_range(int, off_t, off_t, unsigned int);
<?> int splice(int, off_t *, int, off_t *, size_t, unsigned int);
<?> int tee(int, int, size_t, unsigned int);

/*
 * Signal operations
 *
 * We really should get rid of the non-rt_* of these, but that takes
 * sanitizing <signal.h> for all architectures, sigh.  See <klibc/config.h>.
 */
#if _KLIBC_USE_RT_SIG
<!sparc,sparc64> int rt_sigaction::__rt_sigaction(int, const struct sigaction *, struct sigaction *, size_t);
<sparc,sparc64> int rt_sigaction::__rt_sigaction(int, const struct sigaction *, struct sigaction *, void *, size_t);
int rt_sigsuspend::__rt_sigsuspend(const sigset_t *, size_t);
int rt_sigpending::__rt_sigpending(sigset_t *, size_t);
int rt_sigprocmask::__rt_sigprocmask(int, const sigset_t *, sigset_t *, size_t);
<sparc64> void rt_sigreturn::__sigreturn(void);
#else
int sigaction::__sigaction(int, const struct sigaction *, struct sigaction *);
int sigsuspend(const sigset_t *);
int sigpending(sigset_t *);
int sigprocmask(int, const sigset_t *, sigset_t *);
#endif
int kill(pid_t, int);
<?> unsigned int alarm(unsigned int);
int getitimer(int, struct itimerval *);
int setitimer(int, const struct itimerval *, struct itimerval *);

/*
 * Time-related system calls
 */
<?> time_t time(time_t *);
clock_t times(struct tms *);
int gettimeofday(struct timeval *, struct timezone *);
int settimeofday(const struct timeval *, const struct timezone *);
int nanosleep(const struct timespec *, struct timespec *);
<?> int pause();

/*
 * Memory
 */
<?> void * brk::__brk(void *);
int munmap(void *, size_t);
void * mremap(void *, size_t, size_t, unsigned long);
int msync(const void *, size_t, int);
int mprotect(const void *, size_t, int);
# if _KLIBC_USE_MMAP2
<!s390> void * mmap2::__mmap2(void *, size_t, int, int, int, long);
# else
<!s390x> void * mmap(void *, size_t, int, int, int, long);
int mlockall(int);
int munlockall();
int mlock(const void *, size_t);
int munlock(const void *, size_t);
#endif

/*
 * System stuff
 */
int uname(struct utsname *);
int setdomainname(const char *, size_t);
int sethostname(const char *, size_t);
long init_module(void *, unsigned long, const char *);
long delete_module(const char *, unsigned int);
int reboot::__reboot(int, int, int, void *);
int syslog::klogctl(int, char *, int);
int sysinfo(struct sysinfo *);

/*
 * Low-level I/O (generally architecture-specific);
 */
<i386,x86_64> int iopl(int);
<i386,x86_64> int ioperm(unsigned long, unsigned long, int);
<i386> int vm86(struct vm86_struct *);

/*
 * Most architectures have the socket interfaces using regular
 * system calls.
 */
<?!i386> long socketcall::__socketcall(int, const unsigned long *);
#include "SOCKETCALLS.def"
