// -*- 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"
