| 1 | /* error */ |
| 2 | int mkerror(void); |
| 3 | #pragma varargck type "E" int |
| 4 | int Efmt(Fmt *e); |
| 5 | int sys_nosys(void); |
| 6 | |
| 7 | /* linuxcall */ |
| 8 | int linuxcall(void); |
| 9 | |
| 10 | /* trap */ |
| 11 | void inittrap(void); |
| 12 | void retuser(void); |
| 13 | |
| 14 | /* bits */ |
| 15 | void incref(Ref *); |
| 16 | int decref(Ref *); |
| 17 | void jumpstart(ulong addr, ulong *stack); |
| 18 | void jumpureg(void *ureg); |
| 19 | void linux_sigreturn(void); |
| 20 | void linux_rtsigreturn(void); |
| 21 | |
| 22 | /* trace */ |
| 23 | void inittrace(void); |
| 24 | void exittrace(Uproc *proc); |
| 25 | void clonetrace(Uproc *new, int copy); |
| 26 | void tprint(char *fmt, ...); |
| 27 | #pragma varargck argpos tprint 1 |
| 28 | #define trace if(debug)tprint |
| 29 | |
| 30 | /* proc */ |
| 31 | void initproc(void); |
| 32 | void exitproc(Uproc *proc, int code, int group); |
| 33 | void stopproc(Uproc *proc, int code, int group); |
| 34 | void contproc(Uproc *proc, int code, int group); |
| 35 | int procfork(void (*fproc)(void *aux), void *aux, int flags); |
| 36 | Uproc* getproc(int tid); |
| 37 | Uproc* getprocn(int n); |
| 38 | int threadcount(int pid); |
| 39 | void zapthreads(void); |
| 40 | void setprocname(char *s); |
| 41 | int notifyme(int on); |
| 42 | void wakeme(int on); |
| 43 | int sleepproc(QLock *l, int flags); |
| 44 | Uwait* addwaitq(Uwaitq *q); |
| 45 | void delwaitq(Uwait *w); |
| 46 | int sleepq(Uwaitq *q, QLock *l, int flags); |
| 47 | int wakeq(Uwaitq *q, int nwake); |
| 48 | int requeue(Uwaitq *q1, Uwaitq *q2, int nrequeue); |
| 49 | int killproc(Uproc *p, Usiginfo *info, int group); |
| 50 | void setalarm(vlong t); |
| 51 | |
| 52 | int sys_waitpid(int pid, int *pexit, int opt); |
| 53 | int sys_wait4(int pid, int *pexit, int opt, void *prusage); |
| 54 | int sys_exit(int code); |
| 55 | int sys_exit_group(int code); |
| 56 | int sys_linux_clone(int flags, void *newstack, int *parenttidptr, int *tlsdescr, void *childtidptr); |
| 57 | int sys_fork(void); |
| 58 | int sys_vfork(void); |
| 59 | int sys_getpid(void); |
| 60 | int sys_getppid(void); |
| 61 | int sys_gettid(void); |
| 62 | int sys_setpgid(int pid, int pgid); |
| 63 | int sys_getpgid(int pid); |
| 64 | int sys_setpgrp(int pid); |
| 65 | int sys_getpgrp(void); |
| 66 | int sys_getuid(void); |
| 67 | int sys_getgid(void); |
| 68 | int sys_setgid(int gid); |
| 69 | int sys_setuid(int uid); |
| 70 | int sys_setresuid(int ruid, int euid, int suid); |
| 71 | int sys_getresuid(int *ruid, int *euid, int *suid); |
| 72 | int sys_setresgid(int rgid, int egid, int sgid); |
| 73 | int sys_getresgid(int *rgid, int *egid, int *sgid); |
| 74 | int sys_setreuid(int ruid, int euid); |
| 75 | int sys_setregid(int rgid, int egid); |
| 76 | int sys_uname(void *); |
| 77 | int sys_personality(ulong p); |
| 78 | int sys_setsid(void); |
| 79 | int sys_getsid(int pid); |
| 80 | int sys_getgroups(int size, int *groups); |
| 81 | int sys_setgroups(int size, int *groups); |
| 82 | |
| 83 | int sys_kill(int pid, int sig); |
| 84 | int sys_tkill(int tid, int sig); |
| 85 | int sys_tgkill(int pid, int tid, int sig); |
| 86 | int sys_rt_sigqueueinfo(int pid, int sig, void *info); |
| 87 | |
| 88 | int sys_set_tid_address(int *tidptr); |
| 89 | |
| 90 | int sys_sched_setscheduler(int pid, int policy, void *param); |
| 91 | int sys_sched_getscheduler(int pid); |
| 92 | int sys_sched_setparam(int pid, void *param); |
| 93 | int sys_sched_getparam(int pid, void *param); |
| 94 | int sys_sched_yield(void); |
| 95 | |
| 96 | int sys_getrlimit(long resource, void *rlim); |
| 97 | int sys_setrlimit(long resource, void *rlim); |
| 98 | |
| 99 | /* signal */ |
| 100 | void initsignal(void); |
| 101 | void exitsignal(void); |
| 102 | void clonesignal(Uproc *new, int copyhand, int newproc); |
| 103 | void settty(Ufile *tty); |
| 104 | Ufile* gettty(void); |
| 105 | #pragma varargck type "S" int |
| 106 | int Sfmt(Fmt *f); |
| 107 | |
| 108 | int wantssignal(Uproc *proc, int sig); |
| 109 | int ignoressignal(Uproc *proc, int sig); |
| 110 | int signalspending(Uproc *proc); |
| 111 | |
| 112 | void handlesignals(void); |
| 113 | int sendsignal(Uproc *proc, Usiginfo *info, int group); |
| 114 | |
| 115 | void siginfo2linux(Usiginfo *, void *); |
| 116 | void linux2siginfo(void *, Usiginfo *); |
| 117 | |
| 118 | int sys_sigaltstack(void *stk, void *ostk); |
| 119 | int sys_rt_sigaction(int sig, void *pact, void *poact, int setsize); |
| 120 | int sys_rt_sigpending(uchar *set, int setsize); |
| 121 | int sys_rt_sigprocmask(int how, uchar *act, uchar *oact, int setsize); |
| 122 | int sys_rt_sigsuspend(uchar *set, int setsize); |
| 123 | int sys_sigreturn(void); |
| 124 | int sys_rt_sigreturn(void); |
| 125 | |
| 126 | int sys_setitimer(int which, void *value, void *ovalue); |
| 127 | int sys_getitimer(int which, void *value); |
| 128 | int sys_alarm(long seconds); |
| 129 | |
| 130 | /* file */ |
| 131 | void initfile(void); |
| 132 | void exitfile(Uproc *proc); |
| 133 | void clonefile(Uproc *new, int copy); |
| 134 | void closexfds(void); |
| 135 | Ufile *procfdgetfile(Uproc *proc, int fd); |
| 136 | Ufile* fdgetfile(int fd); |
| 137 | Ufile* getfile(Ufile *file); |
| 138 | void putfile(Ufile *file); |
| 139 | int newfd(Ufile *file, int flags); |
| 140 | int chdirfile(Ufile *file); |
| 141 | int readfile(Ufile *file, void *buf, int len); |
| 142 | int writefile(Ufile *file, void *buf, int len); |
| 143 | int preadfile(Ufile *file, void *buf, int len, vlong off); |
| 144 | int pwritefile(Ufile *file, void *buf, int len, vlong off); |
| 145 | int sys_dup(int fd); |
| 146 | int sys_dup2(int old, int new); |
| 147 | int sys_fcntl(int fd, int cmd, int arg); |
| 148 | int sys_close(int fd); |
| 149 | int sys_ioctl(int fd, int cmd, void *arg); |
| 150 | int sys_read(int fd, void *buf, int len); |
| 151 | int sys_readv(int fd, void *vec, int n); |
| 152 | int sys_pread64(int fd, void *buf, int len, ulong off); |
| 153 | int sys_write(int fd, void *buf, int len); |
| 154 | int sys_pwrite64(int fd, void *buf, int len, ulong off); |
| 155 | int sys_writev(int fd, void *vec, int n); |
| 156 | ulong sys_lseek(int fd, ulong off, int whence); |
| 157 | int sys_llseek(int fd, ulong hioff, ulong looff, vlong *res, int whence); |
| 158 | int sys_umask(int umask); |
| 159 | int sys_flock(int fd, int cmd); |
| 160 | int sys_fsync(int fd); |
| 161 | int sys_fchdir(int fd); |
| 162 | int sys_getcwd(char *buf, int len); |
| 163 | int sys_fchmod(int fd, int mode); |
| 164 | int sys_fchown(int fd, int uid, int gid); |
| 165 | int sys_ftruncate(int fd, ulong size); |
| 166 | |
| 167 | /* poll */ |
| 168 | void pollwait(Ufile *f, Uwaitq *q, void *t); |
| 169 | int sys_poll(void *p, int nfd, long timeout); |
| 170 | int sys_select(int nfd, ulong *rfd, ulong *wfd, ulong *efd, void *ptv); |
| 171 | |
| 172 | /* mem */ |
| 173 | void* kmalloc(int size); |
| 174 | void* kmallocz(int size, int zero); |
| 175 | void* krealloc(void *ptr, int size); |
| 176 | char* kstrdup(char *s); |
| 177 | char* ksmprint(char *fmt, ...); |
| 178 | #pragma varargck argpos ksmprint 1 |
| 179 | |
| 180 | ulong pagealign(ulong addr); |
| 181 | |
| 182 | void initmem(void); |
| 183 | void exitmem(void); |
| 184 | void clonemem(Uproc *new, int copy); |
| 185 | ulong procmemstat(Uproc *proc, ulong *pdat, ulong *plib, ulong *pshr, ulong *pstk, ulong *pexe); |
| 186 | void* mapstack(int size); |
| 187 | void mapdata(ulong base); |
| 188 | void unmapuserspace(void); |
| 189 | int okaddr(void *ptr, int len, int write); |
| 190 | |
| 191 | ulong sys_linux_mmap(void *a); |
| 192 | ulong sys_mmap(ulong addr, ulong len, int prot, int flags, int fd, ulong pgoff); |
| 193 | int sys_munmap(ulong addr, ulong len); |
| 194 | ulong sys_brk(ulong bk); |
| 195 | int sys_mprotect(ulong addr, ulong len, int prot); |
| 196 | int sys_msync(ulong addr, ulong len, int flags); |
| 197 | ulong sys_mremap(ulong addr, ulong oldlen, ulong newlen, int flags, ulong newaddr); |
| 198 | |
| 199 | int sys_futex(ulong *addr, int op, int val, void *ptime, ulong *addr2, int val3); |
| 200 | |
| 201 | /* exec */ |
| 202 | int sys_execve(char *name, char *argv[], char *envp[]); |
| 203 | |
| 204 | /* time */ |
| 205 | void inittime(void); |
| 206 | int sys_time(long *p); |
| 207 | int sys_gettimeofday(void *tvp, void *tzp); |
| 208 | int sys_clock_gettime(int clock, void *t); |
| 209 | int sys_nanosleep(void *rqp, void *rmp); |
| 210 | int proctimes(Uproc *p, ulong *t); |
| 211 | int sys_times(void *times); |
| 212 | |
| 213 | /* tls */ |
| 214 | void inittls(void); |
| 215 | void clonetls(Uproc *new); |
| 216 | |
| 217 | int sys_set_thread_area(void *pinfo); |
| 218 | int sys_get_thread_area(void *pinfo); |
| 219 | int sys_modify_ldt(int func, void *data, int count); |
| 220 | |
| 221 | /* bufproc */ |
| 222 | void *newbufproc(int fd); |
| 223 | void freebufproc(void *bp); |
| 224 | int readbufproc(void *bp, void *data, int len, int peek, int noblock); |
| 225 | int pollbufproc(void *bp, Ufile *file, void *tab); |
| 226 | int nreadablebufproc(void *bp); |
| 227 | |
| 228 | /* main */ |
| 229 | void panic(char *msg, ...); |
| 230 | int onstack(long *stk, int (*func)(void *arg), void *arg); |
| 231 | void profme(void); |
| 232 | |
| 233 | /* stat */ |
| 234 | int ufstat(int fd, Ustat *ps); |
| 235 | Udirent *newdirent(char *path, char *name, int mode); |
| 236 | |
| 237 | int sys_getxattr(char *path, char *name, void *value, int size); |
| 238 | int sys_lgetxattr(char *path, char *name, void *value, int size); |
| 239 | int sys_fgetxattr(int fd, char *name, void *value, int size); |
| 240 | int sys_setxattr(char *path, char *name, void *value, int flags, int size); |
| 241 | int sys_lsetxattr(char *path, char *name, void *value, int flags, int size); |
| 242 | int sys_fsetxattr(int fd, char *name, void *value, int size, int flags); |
| 243 | |
| 244 | int sys_linux_fstat(int fd, void *st); |
| 245 | int sys_linux_fstat64(int fd, void *st); |
| 246 | int sys_linux_getdents(int fd, void *buf, int nbuf); |
| 247 | int sys_linux_getdents64(int fd, void *buf, int nbuf); |
| 248 | int sys_linux_lstat(char *path, void *st); |
| 249 | int sys_linux_lstat64(char *path, void *st); |
| 250 | int sys_linux_stat(char *path, void *st); |
| 251 | int sys_linux_stat64(char *path, void *st); |
| 252 | |
| 253 | int sys_statfs(char *name, void *pstatfs); |
| 254 | |
| 255 | /* fs */ |
| 256 | void fsmount(Udev *dev, char *path); |
| 257 | |
| 258 | char* allocpath(char *base, char *prefix, char *name); |
| 259 | char* fullpath(char *base, char *name); |
| 260 | char* shortpath(char *base, char *path); |
| 261 | char* fsfullpath(char *path); |
| 262 | char* fsrootpath(char *path); |
| 263 | char* basepath(char *p, char **ps); |
| 264 | ulong hashpath(char *s); |
| 265 | |
| 266 | int fsaccess(char *path, int mode); |
| 267 | int fschmod(char *path, int mode); |
| 268 | int fschown(char *path, int uid, int gid, int link); |
| 269 | int fslink(char *old, char *new, int sym); |
| 270 | int fsmkdir(char *path, int mode); |
| 271 | int fsopen(char *path, int mode, int perm, Ufile **pf); |
| 272 | int fsreadlink(char *path, char *buf, int len); |
| 273 | int fsrename(char *old, char *new); |
| 274 | int fsstat(char *path, int link, Ustat *ps); |
| 275 | int fstruncate(char *path, vlong size); |
| 276 | int fsunlink(char *path, int rmdir); |
| 277 | int fsutime(char *path, int atime, int mtime); |
| 278 | |
| 279 | int sys_access(char *name, int mode); |
| 280 | int sys_chdir(char *name); |
| 281 | int sys_chroot(char *name); |
| 282 | int sys_chmod(char *name, int mode); |
| 283 | int sys_chown(char *name, int uid, int gid); |
| 284 | int sys_creat(char *name, int perm); |
| 285 | int sys_lchown(char *name, int uid, int gid); |
| 286 | int sys_link(char *old, char *new); |
| 287 | int sys_open(char *name, int mode, int perm); |
| 288 | int sys_readlink(char *name, char *buf, int len); |
| 289 | int sys_rename(char *from, char *to); |
| 290 | int sys_rmdir(char *name); |
| 291 | int sys_symlink(char *old, char *new); |
| 292 | int sys_truncate(char *name, ulong size); |
| 293 | int sys_unlink(char *name); |
| 294 | int sys_utime(char *name, void *times); |
| 295 | int sys_utimes(char *name, void *tvp); |
| 296 | int sys_mkdir(char *name, int mode); |
| 297 | |
| 298 | /* drivers */ |
| 299 | void rootdevinit(void); |
| 300 | void sockdevinit(void); |
| 301 | int sys_linux_socketcall(int call, int *arg); |
| 302 | void pipedevinit(void); |
| 303 | int sys_pipe(int *fds); |
| 304 | void fddevinit(void); |
| 305 | void ptsdevinit(void); |
| 306 | void dspdevinit(void); |
| 307 | void miscdevinit(void); |
| 308 | void ptydevinit(void); |
| 309 | void consdevinit(void); |
| 310 | void procdevinit(void); |
| 311 | |