xref: /openbsd-src/gnu/usr.bin/perl/syscall_emulator.c (revision fac98b93b71777a71b1e912ccaf68ce33d7b87c4)
1*fac98b93Safresh1 /*
2*fac98b93Safresh1  * Generated from gen_syscall_emulator.pl
3*fac98b93Safresh1  */
4*fac98b93Safresh1 #include <sys/syscall.h>
5*fac98b93Safresh1 #include <stdarg.h>
6*fac98b93Safresh1 #include <errno.h>
7*fac98b93Safresh1 #include <sys/socket.h>
8*fac98b93Safresh1 #include <sys/event.h>
9*fac98b93Safresh1 #include <sys/futex.h>
10*fac98b93Safresh1 #include <sys/ioctl.h>
11*fac98b93Safresh1 #include <sys/ktrace.h>
12*fac98b93Safresh1 #include <sys/mman.h>
13*fac98b93Safresh1 #include <sys/mount.h>
14*fac98b93Safresh1 #include <sys/msg.h>
15*fac98b93Safresh1 #include <sys/poll.h>
16*fac98b93Safresh1 #include <sys/ptrace.h>
17*fac98b93Safresh1 #include <sys/resource.h>
18*fac98b93Safresh1 #include <sys/select.h>
19*fac98b93Safresh1 #include <sys/sem.h>
20*fac98b93Safresh1 #include <sys/shm.h>
21*fac98b93Safresh1 #include <sys/stat.h>
22*fac98b93Safresh1 #include <sys/sysctl.h>
23*fac98b93Safresh1 #include <sys/time.h>
24*fac98b93Safresh1 #include <sys/uio.h>
25*fac98b93Safresh1 #include <sys/wait.h>
26*fac98b93Safresh1 #include <dirent.h>
27*fac98b93Safresh1 #include <fcntl.h>
28*fac98b93Safresh1 #include <sched.h>
29*fac98b93Safresh1 #include <signal.h>
30*fac98b93Safresh1 #include <stdlib.h>
31*fac98b93Safresh1 #include <stdio.h>
32*fac98b93Safresh1 #include <syslog.h>
33*fac98b93Safresh1 #include <tib.h>
34*fac98b93Safresh1 #include <time.h>
35*fac98b93Safresh1 #include <unistd.h>
36*fac98b93Safresh1 #include "syscall_emulator.h"
37*fac98b93Safresh1 
38*fac98b93Safresh1 long
syscall_emulator(int syscall,...)39*fac98b93Safresh1 syscall_emulator(int syscall, ...)
40*fac98b93Safresh1 {
41*fac98b93Safresh1 	long ret = 0;
42*fac98b93Safresh1 	va_list args;
43*fac98b93Safresh1 	va_start(args, syscall);
44*fac98b93Safresh1 
45*fac98b93Safresh1 	switch(syscall) {
46*fac98b93Safresh1 	/* Indirect syscalls not supported
47*fac98b93Safresh1 	 *case SYS_syscall:
48*fac98b93Safresh1 	 *	ret = syscall(int, ...);
49*fac98b93Safresh1 	 *	break;
50*fac98b93Safresh1 	 */
51*fac98b93Safresh1 	case SYS_exit:
52*fac98b93Safresh1 		exit(va_arg(args, int)); // rval
53*fac98b93Safresh1 		break;
54*fac98b93Safresh1 	case SYS_fork:
55*fac98b93Safresh1 		ret = fork();
56*fac98b93Safresh1 		break;
57*fac98b93Safresh1 	case SYS_read: {
58*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
59*fac98b93Safresh1 		void * buf = (void *)va_arg(args, long);
60*fac98b93Safresh1 		size_t nbyte = (size_t)va_arg(args, long);
61*fac98b93Safresh1 		ret = read(fd, buf, nbyte);
62*fac98b93Safresh1 		break;
63*fac98b93Safresh1 	}
64*fac98b93Safresh1 	case SYS_write: {
65*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
66*fac98b93Safresh1 		const void * buf = (const void *)va_arg(args, long);
67*fac98b93Safresh1 		size_t nbyte = (size_t)va_arg(args, long);
68*fac98b93Safresh1 		ret = write(fd, buf, nbyte);
69*fac98b93Safresh1 		break;
70*fac98b93Safresh1 	}
71*fac98b93Safresh1 	case SYS_open: {
72*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
73*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
74*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
75*fac98b93Safresh1 		ret = open(path, flags, mode);
76*fac98b93Safresh1 		break;
77*fac98b93Safresh1 	}
78*fac98b93Safresh1 	case SYS_close:
79*fac98b93Safresh1 		ret = close(va_arg(args, int)); // fd
80*fac98b93Safresh1 		break;
81*fac98b93Safresh1 	case SYS_getentropy: {
82*fac98b93Safresh1 		void * buf = (void *)va_arg(args, long);
83*fac98b93Safresh1 		size_t nbyte = (size_t)va_arg(args, long);
84*fac98b93Safresh1 		ret = getentropy(buf, nbyte);
85*fac98b93Safresh1 		break;
86*fac98b93Safresh1 	}
87*fac98b93Safresh1 	/* No signature found in headers
88*fac98b93Safresh1 	 *case SYS___tfork: {
89*fac98b93Safresh1 	 *	const struct __tfork * param = (const struct __tfork *)va_arg(args, long);
90*fac98b93Safresh1 	 *	size_t psize = (size_t)va_arg(args, long);
91*fac98b93Safresh1 	 *	ret = __tfork(param, psize);
92*fac98b93Safresh1 	 *	break;
93*fac98b93Safresh1 	 *}
94*fac98b93Safresh1 	 */
95*fac98b93Safresh1 	case SYS_link: {
96*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
97*fac98b93Safresh1 		const char * _link = (const char *)va_arg(args, long);
98*fac98b93Safresh1 		ret = link(path, _link);
99*fac98b93Safresh1 		break;
100*fac98b93Safresh1 	}
101*fac98b93Safresh1 	case SYS_unlink:
102*fac98b93Safresh1 		ret = unlink(va_arg(args, const char *)); // path
103*fac98b93Safresh1 		break;
104*fac98b93Safresh1 	case SYS_wait4: {
105*fac98b93Safresh1 		pid_t pid = (pid_t)va_arg(args, long);
106*fac98b93Safresh1 		int * status = (int *)va_arg(args, long);
107*fac98b93Safresh1 		int options = (int)va_arg(args, long);
108*fac98b93Safresh1 		struct rusage * rusage = (struct rusage *)va_arg(args, long);
109*fac98b93Safresh1 		ret = wait4(pid, status, options, rusage);
110*fac98b93Safresh1 		break;
111*fac98b93Safresh1 	}
112*fac98b93Safresh1 	case SYS_chdir:
113*fac98b93Safresh1 		ret = chdir(va_arg(args, const char *)); // path
114*fac98b93Safresh1 		break;
115*fac98b93Safresh1 	case SYS_fchdir:
116*fac98b93Safresh1 		ret = fchdir(va_arg(args, int)); // fd
117*fac98b93Safresh1 		break;
118*fac98b93Safresh1 	case SYS_mknod: {
119*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
120*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
121*fac98b93Safresh1 		dev_t dev = (dev_t)va_arg(args, long);
122*fac98b93Safresh1 		ret = mknod(path, mode, dev);
123*fac98b93Safresh1 		break;
124*fac98b93Safresh1 	}
125*fac98b93Safresh1 	case SYS_chmod: {
126*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
127*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
128*fac98b93Safresh1 		ret = chmod(path, mode);
129*fac98b93Safresh1 		break;
130*fac98b93Safresh1 	}
131*fac98b93Safresh1 	case SYS_chown: {
132*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
133*fac98b93Safresh1 		uid_t uid = (uid_t)va_arg(args, long);
134*fac98b93Safresh1 		gid_t gid = (gid_t)va_arg(args, long);
135*fac98b93Safresh1 		ret = chown(path, uid, gid);
136*fac98b93Safresh1 		break;
137*fac98b93Safresh1 	}
138*fac98b93Safresh1 	/* No signature found in headers
139*fac98b93Safresh1 	 *case SYS_break:
140*fac98b93Safresh1 	 *	ret = break(char *);
141*fac98b93Safresh1 	 *	break;
142*fac98b93Safresh1 	 */
143*fac98b93Safresh1 	case SYS_getdtablecount:
144*fac98b93Safresh1 		ret = getdtablecount();
145*fac98b93Safresh1 		break;
146*fac98b93Safresh1 	case SYS_getrusage: {
147*fac98b93Safresh1 		int who = (int)va_arg(args, long);
148*fac98b93Safresh1 		struct rusage * rusage = (struct rusage *)va_arg(args, long);
149*fac98b93Safresh1 		ret = getrusage(who, rusage);
150*fac98b93Safresh1 		break;
151*fac98b93Safresh1 	}
152*fac98b93Safresh1 	case SYS_getpid:
153*fac98b93Safresh1 		ret = getpid();
154*fac98b93Safresh1 		break;
155*fac98b93Safresh1 	case SYS_mount: {
156*fac98b93Safresh1 		const char * type = (const char *)va_arg(args, long);
157*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
158*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
159*fac98b93Safresh1 		void * data = (void *)va_arg(args, long);
160*fac98b93Safresh1 		ret = mount(type, path, flags, data);
161*fac98b93Safresh1 		break;
162*fac98b93Safresh1 	}
163*fac98b93Safresh1 	case SYS_unmount: {
164*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
165*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
166*fac98b93Safresh1 		ret = unmount(path, flags);
167*fac98b93Safresh1 		break;
168*fac98b93Safresh1 	}
169*fac98b93Safresh1 	case SYS_setuid:
170*fac98b93Safresh1 		ret = setuid(va_arg(args, uid_t)); // uid
171*fac98b93Safresh1 		break;
172*fac98b93Safresh1 	case SYS_getuid:
173*fac98b93Safresh1 		ret = getuid();
174*fac98b93Safresh1 		break;
175*fac98b93Safresh1 	case SYS_geteuid:
176*fac98b93Safresh1 		ret = geteuid();
177*fac98b93Safresh1 		break;
178*fac98b93Safresh1 	case SYS_ptrace: {
179*fac98b93Safresh1 		int req = (int)va_arg(args, long);
180*fac98b93Safresh1 		pid_t pid = (pid_t)va_arg(args, long);
181*fac98b93Safresh1 		caddr_t addr = (caddr_t)va_arg(args, long);
182*fac98b93Safresh1 		int data = (int)va_arg(args, long);
183*fac98b93Safresh1 		ret = ptrace(req, pid, addr, data);
184*fac98b93Safresh1 		break;
185*fac98b93Safresh1 	}
186*fac98b93Safresh1 	case SYS_recvmsg: {
187*fac98b93Safresh1 		int s = (int)va_arg(args, long);
188*fac98b93Safresh1 		struct msghdr * msg = (struct msghdr *)va_arg(args, long);
189*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
190*fac98b93Safresh1 		ret = recvmsg(s, msg, flags);
191*fac98b93Safresh1 		break;
192*fac98b93Safresh1 	}
193*fac98b93Safresh1 	case SYS_sendmsg: {
194*fac98b93Safresh1 		int s = (int)va_arg(args, long);
195*fac98b93Safresh1 		const struct msghdr * msg = (const struct msghdr *)va_arg(args, long);
196*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
197*fac98b93Safresh1 		ret = sendmsg(s, msg, flags);
198*fac98b93Safresh1 		break;
199*fac98b93Safresh1 	}
200*fac98b93Safresh1 	case SYS_recvfrom: {
201*fac98b93Safresh1 		int s = (int)va_arg(args, long);
202*fac98b93Safresh1 		void * buf = (void *)va_arg(args, long);
203*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
204*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
205*fac98b93Safresh1 		struct sockaddr * from = (struct sockaddr *)va_arg(args, long);
206*fac98b93Safresh1 		socklen_t * fromlenaddr = (socklen_t *)va_arg(args, long);
207*fac98b93Safresh1 		ret = recvfrom(s, buf, len, flags, from, fromlenaddr);
208*fac98b93Safresh1 		break;
209*fac98b93Safresh1 	}
210*fac98b93Safresh1 	case SYS_accept: {
211*fac98b93Safresh1 		int s = (int)va_arg(args, long);
212*fac98b93Safresh1 		struct sockaddr * name = (struct sockaddr *)va_arg(args, long);
213*fac98b93Safresh1 		socklen_t * anamelen = (socklen_t *)va_arg(args, long);
214*fac98b93Safresh1 		ret = accept(s, name, anamelen);
215*fac98b93Safresh1 		break;
216*fac98b93Safresh1 	}
217*fac98b93Safresh1 	case SYS_getpeername: {
218*fac98b93Safresh1 		int fdes = (int)va_arg(args, long);
219*fac98b93Safresh1 		struct sockaddr * asa = (struct sockaddr *)va_arg(args, long);
220*fac98b93Safresh1 		socklen_t * alen = (socklen_t *)va_arg(args, long);
221*fac98b93Safresh1 		ret = getpeername(fdes, asa, alen);
222*fac98b93Safresh1 		break;
223*fac98b93Safresh1 	}
224*fac98b93Safresh1 	case SYS_getsockname: {
225*fac98b93Safresh1 		int fdes = (int)va_arg(args, long);
226*fac98b93Safresh1 		struct sockaddr * asa = (struct sockaddr *)va_arg(args, long);
227*fac98b93Safresh1 		socklen_t * alen = (socklen_t *)va_arg(args, long);
228*fac98b93Safresh1 		ret = getsockname(fdes, asa, alen);
229*fac98b93Safresh1 		break;
230*fac98b93Safresh1 	}
231*fac98b93Safresh1 	case SYS_access: {
232*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
233*fac98b93Safresh1 		int amode = (int)va_arg(args, long);
234*fac98b93Safresh1 		ret = access(path, amode);
235*fac98b93Safresh1 		break;
236*fac98b93Safresh1 	}
237*fac98b93Safresh1 	case SYS_chflags: {
238*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
239*fac98b93Safresh1 		u_int flags = (u_int)va_arg(args, long);
240*fac98b93Safresh1 		ret = chflags(path, flags);
241*fac98b93Safresh1 		break;
242*fac98b93Safresh1 	}
243*fac98b93Safresh1 	case SYS_fchflags: {
244*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
245*fac98b93Safresh1 		u_int flags = (u_int)va_arg(args, long);
246*fac98b93Safresh1 		ret = fchflags(fd, flags);
247*fac98b93Safresh1 		break;
248*fac98b93Safresh1 	}
249*fac98b93Safresh1 	case SYS_sync:
250*fac98b93Safresh1 		sync();
251*fac98b93Safresh1 		break;
252*fac98b93Safresh1 	/* No signature found in headers
253*fac98b93Safresh1 	 *case SYS_msyscall: {
254*fac98b93Safresh1 	 *	void * addr = (void *)va_arg(args, long);
255*fac98b93Safresh1 	 *	size_t len = (size_t)va_arg(args, long);
256*fac98b93Safresh1 	 *	ret = msyscall(addr, len);
257*fac98b93Safresh1 	 *	break;
258*fac98b93Safresh1 	 *}
259*fac98b93Safresh1 	 */
260*fac98b93Safresh1 	case SYS_stat: {
261*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
262*fac98b93Safresh1 		struct stat * ub = (struct stat *)va_arg(args, long);
263*fac98b93Safresh1 		ret = stat(path, ub);
264*fac98b93Safresh1 		break;
265*fac98b93Safresh1 	}
266*fac98b93Safresh1 	case SYS_getppid:
267*fac98b93Safresh1 		ret = getppid();
268*fac98b93Safresh1 		break;
269*fac98b93Safresh1 	case SYS_lstat: {
270*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
271*fac98b93Safresh1 		struct stat * ub = (struct stat *)va_arg(args, long);
272*fac98b93Safresh1 		ret = lstat(path, ub);
273*fac98b93Safresh1 		break;
274*fac98b93Safresh1 	}
275*fac98b93Safresh1 	case SYS_dup:
276*fac98b93Safresh1 		ret = dup(va_arg(args, int)); // fd
277*fac98b93Safresh1 		break;
278*fac98b93Safresh1 	case SYS_fstatat: {
279*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
280*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
281*fac98b93Safresh1 		struct stat * buf = (struct stat *)va_arg(args, long);
282*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
283*fac98b93Safresh1 		ret = fstatat(fd, path, buf, flag);
284*fac98b93Safresh1 		break;
285*fac98b93Safresh1 	}
286*fac98b93Safresh1 	case SYS_getegid:
287*fac98b93Safresh1 		ret = getegid();
288*fac98b93Safresh1 		break;
289*fac98b93Safresh1 	case SYS_profil: {
290*fac98b93Safresh1 		caddr_t samples = (caddr_t)va_arg(args, long);
291*fac98b93Safresh1 		size_t size = (size_t)va_arg(args, long);
292*fac98b93Safresh1 		u_long offset = (u_long)va_arg(args, long);
293*fac98b93Safresh1 		u_int scale = (u_int)va_arg(args, long);
294*fac98b93Safresh1 		ret = profil(samples, size, offset, scale);
295*fac98b93Safresh1 		break;
296*fac98b93Safresh1 	}
297*fac98b93Safresh1 	case SYS_ktrace: {
298*fac98b93Safresh1 		const char * fname = (const char *)va_arg(args, long);
299*fac98b93Safresh1 		int ops = (int)va_arg(args, long);
300*fac98b93Safresh1 		int facs = (int)va_arg(args, long);
301*fac98b93Safresh1 		pid_t pid = (pid_t)va_arg(args, long);
302*fac98b93Safresh1 		ret = ktrace(fname, ops, facs, pid);
303*fac98b93Safresh1 		break;
304*fac98b93Safresh1 	}
305*fac98b93Safresh1 	case SYS_sigaction: {
306*fac98b93Safresh1 		int signum = (int)va_arg(args, long);
307*fac98b93Safresh1 		const struct sigaction * nsa = (const struct sigaction *)va_arg(args, long);
308*fac98b93Safresh1 		struct sigaction * osa = (struct sigaction *)va_arg(args, long);
309*fac98b93Safresh1 		ret = sigaction(signum, nsa, osa);
310*fac98b93Safresh1 		break;
311*fac98b93Safresh1 	}
312*fac98b93Safresh1 	case SYS_getgid:
313*fac98b93Safresh1 		ret = getgid();
314*fac98b93Safresh1 		break;
315*fac98b93Safresh1 	/* Mismatched func: int sigprocmask(int, const sigset_t *, sigset_t *); <signal.h>
316*fac98b93Safresh1 	 *                  int sigprocmask(int, sigset_t); <sys/syscall.h>
317*fac98b93Safresh1 	 *case SYS_sigprocmask: {
318*fac98b93Safresh1 	 *	int how = (int)va_arg(args, long);
319*fac98b93Safresh1 	 *	sigset_t mask = (sigset_t)va_arg(args, long);
320*fac98b93Safresh1 	 *	ret = sigprocmask(how, mask);
321*fac98b93Safresh1 	 *	break;
322*fac98b93Safresh1 	 *}
323*fac98b93Safresh1 	 */
324*fac98b93Safresh1 	case SYS_mmap: {
325*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
326*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
327*fac98b93Safresh1 		int prot = (int)va_arg(args, long);
328*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
329*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
330*fac98b93Safresh1 		off_t pos = (off_t)va_arg(args, long);
331*fac98b93Safresh1 		ret = (long)mmap(addr, len, prot, flags, fd, pos);
332*fac98b93Safresh1 		break;
333*fac98b93Safresh1 	}
334*fac98b93Safresh1 	case SYS_setlogin:
335*fac98b93Safresh1 		ret = setlogin(va_arg(args, const char *)); // namebuf
336*fac98b93Safresh1 		break;
337*fac98b93Safresh1 	case SYS_acct:
338*fac98b93Safresh1 		ret = acct(va_arg(args, const char *)); // path
339*fac98b93Safresh1 		break;
340*fac98b93Safresh1 	/* Mismatched func: int sigpending(sigset_t *); <signal.h>
341*fac98b93Safresh1 	 *                  int sigpending(void); <sys/syscall.h>
342*fac98b93Safresh1 	 *case SYS_sigpending:
343*fac98b93Safresh1 	 *	ret = sigpending();
344*fac98b93Safresh1 	 *	break;
345*fac98b93Safresh1 	 */
346*fac98b93Safresh1 	case SYS_fstat: {
347*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
348*fac98b93Safresh1 		struct stat * sb = (struct stat *)va_arg(args, long);
349*fac98b93Safresh1 		ret = fstat(fd, sb);
350*fac98b93Safresh1 		break;
351*fac98b93Safresh1 	}
352*fac98b93Safresh1 	case SYS_ioctl: {
353*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
354*fac98b93Safresh1 		u_long com = (u_long)va_arg(args, long);
355*fac98b93Safresh1 		void * data = (void *)va_arg(args, long);
356*fac98b93Safresh1 		ret = ioctl(fd, com, data);
357*fac98b93Safresh1 		break;
358*fac98b93Safresh1 	}
359*fac98b93Safresh1 	case SYS_reboot:
360*fac98b93Safresh1 		ret = reboot(va_arg(args, int)); // opt
361*fac98b93Safresh1 		break;
362*fac98b93Safresh1 	case SYS_revoke:
363*fac98b93Safresh1 		ret = revoke(va_arg(args, const char *)); // path
364*fac98b93Safresh1 		break;
365*fac98b93Safresh1 	case SYS_symlink: {
366*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
367*fac98b93Safresh1 		const char * link = (const char *)va_arg(args, long);
368*fac98b93Safresh1 		ret = symlink(path, link);
369*fac98b93Safresh1 		break;
370*fac98b93Safresh1 	}
371*fac98b93Safresh1 	case SYS_readlink: {
372*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
373*fac98b93Safresh1 		char * buf = (char *)va_arg(args, long);
374*fac98b93Safresh1 		size_t count = (size_t)va_arg(args, long);
375*fac98b93Safresh1 		ret = readlink(path, buf, count);
376*fac98b93Safresh1 		break;
377*fac98b93Safresh1 	}
378*fac98b93Safresh1 	case SYS_execve: {
379*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
380*fac98b93Safresh1 		char *const * argp = (char *const *)va_arg(args, long);
381*fac98b93Safresh1 		char *const * envp = (char *const *)va_arg(args, long);
382*fac98b93Safresh1 		ret = execve(path, argp, envp);
383*fac98b93Safresh1 		break;
384*fac98b93Safresh1 	}
385*fac98b93Safresh1 	case SYS_umask:
386*fac98b93Safresh1 		ret = umask(va_arg(args, mode_t)); // newmask
387*fac98b93Safresh1 		break;
388*fac98b93Safresh1 	case SYS_chroot:
389*fac98b93Safresh1 		ret = chroot(va_arg(args, const char *)); // path
390*fac98b93Safresh1 		break;
391*fac98b93Safresh1 	case SYS_getfsstat: {
392*fac98b93Safresh1 		struct statfs * buf = (struct statfs *)va_arg(args, long);
393*fac98b93Safresh1 		size_t bufsize = (size_t)va_arg(args, long);
394*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
395*fac98b93Safresh1 		ret = getfsstat(buf, bufsize, flags);
396*fac98b93Safresh1 		break;
397*fac98b93Safresh1 	}
398*fac98b93Safresh1 	case SYS_statfs: {
399*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
400*fac98b93Safresh1 		struct statfs * buf = (struct statfs *)va_arg(args, long);
401*fac98b93Safresh1 		ret = statfs(path, buf);
402*fac98b93Safresh1 		break;
403*fac98b93Safresh1 	}
404*fac98b93Safresh1 	case SYS_fstatfs: {
405*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
406*fac98b93Safresh1 		struct statfs * buf = (struct statfs *)va_arg(args, long);
407*fac98b93Safresh1 		ret = fstatfs(fd, buf);
408*fac98b93Safresh1 		break;
409*fac98b93Safresh1 	}
410*fac98b93Safresh1 	case SYS_fhstatfs: {
411*fac98b93Safresh1 		const fhandle_t * fhp = (const fhandle_t *)va_arg(args, long);
412*fac98b93Safresh1 		struct statfs * buf = (struct statfs *)va_arg(args, long);
413*fac98b93Safresh1 		ret = fhstatfs(fhp, buf);
414*fac98b93Safresh1 		break;
415*fac98b93Safresh1 	}
416*fac98b93Safresh1 	case SYS_vfork:
417*fac98b93Safresh1 		ret = vfork();
418*fac98b93Safresh1 		break;
419*fac98b93Safresh1 	case SYS_gettimeofday: {
420*fac98b93Safresh1 		struct timeval * tp = (struct timeval *)va_arg(args, long);
421*fac98b93Safresh1 		struct timezone * tzp = (struct timezone *)va_arg(args, long);
422*fac98b93Safresh1 		ret = gettimeofday(tp, tzp);
423*fac98b93Safresh1 		break;
424*fac98b93Safresh1 	}
425*fac98b93Safresh1 	case SYS_settimeofday: {
426*fac98b93Safresh1 		const struct timeval * tv = (const struct timeval *)va_arg(args, long);
427*fac98b93Safresh1 		const struct timezone * tzp = (const struct timezone *)va_arg(args, long);
428*fac98b93Safresh1 		ret = settimeofday(tv, tzp);
429*fac98b93Safresh1 		break;
430*fac98b93Safresh1 	}
431*fac98b93Safresh1 	case SYS_setitimer: {
432*fac98b93Safresh1 		int which = (int)va_arg(args, long);
433*fac98b93Safresh1 		const struct itimerval * itv = (const struct itimerval *)va_arg(args, long);
434*fac98b93Safresh1 		struct itimerval * oitv = (struct itimerval *)va_arg(args, long);
435*fac98b93Safresh1 		ret = setitimer(which, itv, oitv);
436*fac98b93Safresh1 		break;
437*fac98b93Safresh1 	}
438*fac98b93Safresh1 	case SYS_getitimer: {
439*fac98b93Safresh1 		int which = (int)va_arg(args, long);
440*fac98b93Safresh1 		struct itimerval * itv = (struct itimerval *)va_arg(args, long);
441*fac98b93Safresh1 		ret = getitimer(which, itv);
442*fac98b93Safresh1 		break;
443*fac98b93Safresh1 	}
444*fac98b93Safresh1 	case SYS_select: {
445*fac98b93Safresh1 		int nd = (int)va_arg(args, long);
446*fac98b93Safresh1 		fd_set * in = (fd_set *)va_arg(args, long);
447*fac98b93Safresh1 		fd_set * ou = (fd_set *)va_arg(args, long);
448*fac98b93Safresh1 		fd_set * ex = (fd_set *)va_arg(args, long);
449*fac98b93Safresh1 		struct timeval * tv = (struct timeval *)va_arg(args, long);
450*fac98b93Safresh1 		ret = select(nd, in, ou, ex, tv);
451*fac98b93Safresh1 		break;
452*fac98b93Safresh1 	}
453*fac98b93Safresh1 	case SYS_kevent: {
454*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
455*fac98b93Safresh1 		const struct kevent * changelist = (const struct kevent *)va_arg(args, long);
456*fac98b93Safresh1 		int nchanges = (int)va_arg(args, long);
457*fac98b93Safresh1 		struct kevent * eventlist = (struct kevent *)va_arg(args, long);
458*fac98b93Safresh1 		int nevents = (int)va_arg(args, long);
459*fac98b93Safresh1 		const struct timespec * timeout = (const struct timespec *)va_arg(args, long);
460*fac98b93Safresh1 		ret = kevent(fd, changelist, nchanges, eventlist, nevents, timeout);
461*fac98b93Safresh1 		break;
462*fac98b93Safresh1 	}
463*fac98b93Safresh1 	case SYS_munmap: {
464*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
465*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
466*fac98b93Safresh1 		ret = munmap(addr, len);
467*fac98b93Safresh1 		break;
468*fac98b93Safresh1 	}
469*fac98b93Safresh1 	case SYS_mprotect: {
470*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
471*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
472*fac98b93Safresh1 		int prot = (int)va_arg(args, long);
473*fac98b93Safresh1 		ret = mprotect(addr, len, prot);
474*fac98b93Safresh1 		break;
475*fac98b93Safresh1 	}
476*fac98b93Safresh1 	case SYS_madvise: {
477*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
478*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
479*fac98b93Safresh1 		int behav = (int)va_arg(args, long);
480*fac98b93Safresh1 		ret = madvise(addr, len, behav);
481*fac98b93Safresh1 		break;
482*fac98b93Safresh1 	}
483*fac98b93Safresh1 	case SYS_utimes: {
484*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
485*fac98b93Safresh1 		const struct timeval * tptr = (const struct timeval *)va_arg(args, long);
486*fac98b93Safresh1 		ret = utimes(path, tptr);
487*fac98b93Safresh1 		break;
488*fac98b93Safresh1 	}
489*fac98b93Safresh1 	case SYS_futimes: {
490*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
491*fac98b93Safresh1 		const struct timeval * tptr = (const struct timeval *)va_arg(args, long);
492*fac98b93Safresh1 		ret = futimes(fd, tptr);
493*fac98b93Safresh1 		break;
494*fac98b93Safresh1 	}
495*fac98b93Safresh1 	case SYS_mquery: {
496*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
497*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
498*fac98b93Safresh1 		int prot = (int)va_arg(args, long);
499*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
500*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
501*fac98b93Safresh1 		off_t pos = (off_t)va_arg(args, long);
502*fac98b93Safresh1 		ret = (long)mquery(addr, len, prot, flags, fd, pos);
503*fac98b93Safresh1 		break;
504*fac98b93Safresh1 	}
505*fac98b93Safresh1 	case SYS_getgroups: {
506*fac98b93Safresh1 		int gidsetsize = (int)va_arg(args, long);
507*fac98b93Safresh1 		gid_t * gidset = (gid_t *)va_arg(args, long);
508*fac98b93Safresh1 		ret = getgroups(gidsetsize, gidset);
509*fac98b93Safresh1 		break;
510*fac98b93Safresh1 	}
511*fac98b93Safresh1 	case SYS_setgroups: {
512*fac98b93Safresh1 		int gidsetsize = (int)va_arg(args, long);
513*fac98b93Safresh1 		const gid_t * gidset = (const gid_t *)va_arg(args, long);
514*fac98b93Safresh1 		ret = setgroups(gidsetsize, gidset);
515*fac98b93Safresh1 		break;
516*fac98b93Safresh1 	}
517*fac98b93Safresh1 	case SYS_getpgrp:
518*fac98b93Safresh1 		ret = getpgrp();
519*fac98b93Safresh1 		break;
520*fac98b93Safresh1 	case SYS_setpgid: {
521*fac98b93Safresh1 		pid_t pid = (pid_t)va_arg(args, long);
522*fac98b93Safresh1 		pid_t pgid = (pid_t)va_arg(args, long);
523*fac98b93Safresh1 		ret = setpgid(pid, pgid);
524*fac98b93Safresh1 		break;
525*fac98b93Safresh1 	}
526*fac98b93Safresh1 	case SYS_futex: {
527*fac98b93Safresh1 		uint32_t * f = (uint32_t *)va_arg(args, long);
528*fac98b93Safresh1 		int op = (int)va_arg(args, long);
529*fac98b93Safresh1 		int val = (int)va_arg(args, long);
530*fac98b93Safresh1 		const struct timespec * timeout = (const struct timespec *)va_arg(args, long);
531*fac98b93Safresh1 		uint32_t * g = (uint32_t *)va_arg(args, long);
532*fac98b93Safresh1 		ret = futex(f, op, val, timeout, g);
533*fac98b93Safresh1 		break;
534*fac98b93Safresh1 	}
535*fac98b93Safresh1 	case SYS_utimensat: {
536*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
537*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
538*fac98b93Safresh1 		const struct timespec * times = (const struct timespec *)va_arg(args, long);
539*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
540*fac98b93Safresh1 		ret = utimensat(fd, path, times, flag);
541*fac98b93Safresh1 		break;
542*fac98b93Safresh1 	}
543*fac98b93Safresh1 	case SYS_futimens: {
544*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
545*fac98b93Safresh1 		const struct timespec * times = (const struct timespec *)va_arg(args, long);
546*fac98b93Safresh1 		ret = futimens(fd, times);
547*fac98b93Safresh1 		break;
548*fac98b93Safresh1 	}
549*fac98b93Safresh1 	/* No signature found in headers
550*fac98b93Safresh1 	 *case SYS_kbind: {
551*fac98b93Safresh1 	 *	const struct __kbind * param = (const struct __kbind *)va_arg(args, long);
552*fac98b93Safresh1 	 *	size_t psize = (size_t)va_arg(args, long);
553*fac98b93Safresh1 	 *	int64_t proc_cookie = (int64_t)va_arg(args, long);
554*fac98b93Safresh1 	 *	ret = kbind(param, psize, proc_cookie);
555*fac98b93Safresh1 	 *	break;
556*fac98b93Safresh1 	 *}
557*fac98b93Safresh1 	 */
558*fac98b93Safresh1 	case SYS_clock_gettime: {
559*fac98b93Safresh1 		clockid_t clock_id = (clockid_t)va_arg(args, long);
560*fac98b93Safresh1 		struct timespec * tp = (struct timespec *)va_arg(args, long);
561*fac98b93Safresh1 		ret = clock_gettime(clock_id, tp);
562*fac98b93Safresh1 		break;
563*fac98b93Safresh1 	}
564*fac98b93Safresh1 	case SYS_clock_settime: {
565*fac98b93Safresh1 		clockid_t clock_id = (clockid_t)va_arg(args, long);
566*fac98b93Safresh1 		const struct timespec * tp = (const struct timespec *)va_arg(args, long);
567*fac98b93Safresh1 		ret = clock_settime(clock_id, tp);
568*fac98b93Safresh1 		break;
569*fac98b93Safresh1 	}
570*fac98b93Safresh1 	case SYS_clock_getres: {
571*fac98b93Safresh1 		clockid_t clock_id = (clockid_t)va_arg(args, long);
572*fac98b93Safresh1 		struct timespec * tp = (struct timespec *)va_arg(args, long);
573*fac98b93Safresh1 		ret = clock_getres(clock_id, tp);
574*fac98b93Safresh1 		break;
575*fac98b93Safresh1 	}
576*fac98b93Safresh1 	case SYS_dup2: {
577*fac98b93Safresh1 		int from = (int)va_arg(args, long);
578*fac98b93Safresh1 		int to = (int)va_arg(args, long);
579*fac98b93Safresh1 		ret = dup2(from, to);
580*fac98b93Safresh1 		break;
581*fac98b93Safresh1 	}
582*fac98b93Safresh1 	case SYS_nanosleep: {
583*fac98b93Safresh1 		const struct timespec * rqtp = (const struct timespec *)va_arg(args, long);
584*fac98b93Safresh1 		struct timespec * rmtp = (struct timespec *)va_arg(args, long);
585*fac98b93Safresh1 		ret = nanosleep(rqtp, rmtp);
586*fac98b93Safresh1 		break;
587*fac98b93Safresh1 	}
588*fac98b93Safresh1 	case SYS_fcntl: {
589*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
590*fac98b93Safresh1 		int cmd = (int)va_arg(args, long);
591*fac98b93Safresh1 		void * arg = (void *)va_arg(args, long);
592*fac98b93Safresh1 		ret = fcntl(fd, cmd, arg);
593*fac98b93Safresh1 		break;
594*fac98b93Safresh1 	}
595*fac98b93Safresh1 	case SYS_accept4: {
596*fac98b93Safresh1 		int s = (int)va_arg(args, long);
597*fac98b93Safresh1 		struct sockaddr * name = (struct sockaddr *)va_arg(args, long);
598*fac98b93Safresh1 		socklen_t * anamelen = (socklen_t *)va_arg(args, long);
599*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
600*fac98b93Safresh1 		ret = accept4(s, name, anamelen, flags);
601*fac98b93Safresh1 		break;
602*fac98b93Safresh1 	}
603*fac98b93Safresh1 	/* No signature found in headers
604*fac98b93Safresh1 	 *case SYS___thrsleep: {
605*fac98b93Safresh1 	 *	const volatile void * ident = (const volatile void *)va_arg(args, long);
606*fac98b93Safresh1 	 *	clockid_t clock_id = (clockid_t)va_arg(args, long);
607*fac98b93Safresh1 	 *	const struct timespec * tp = (const struct timespec *)va_arg(args, long);
608*fac98b93Safresh1 	 *	void * lock = (void *)va_arg(args, long);
609*fac98b93Safresh1 	 *	const int * abort = (const int *)va_arg(args, long);
610*fac98b93Safresh1 	 *	ret = __thrsleep(ident, clock_id, tp, lock, abort);
611*fac98b93Safresh1 	 *	break;
612*fac98b93Safresh1 	 *}
613*fac98b93Safresh1 	 */
614*fac98b93Safresh1 	case SYS_fsync:
615*fac98b93Safresh1 		ret = fsync(va_arg(args, int)); // fd
616*fac98b93Safresh1 		break;
617*fac98b93Safresh1 	case SYS_setpriority: {
618*fac98b93Safresh1 		int which = (int)va_arg(args, long);
619*fac98b93Safresh1 		id_t who = (id_t)va_arg(args, long);
620*fac98b93Safresh1 		int prio = (int)va_arg(args, long);
621*fac98b93Safresh1 		ret = setpriority(which, who, prio);
622*fac98b93Safresh1 		break;
623*fac98b93Safresh1 	}
624*fac98b93Safresh1 	case SYS_socket: {
625*fac98b93Safresh1 		int domain = (int)va_arg(args, long);
626*fac98b93Safresh1 		int type = (int)va_arg(args, long);
627*fac98b93Safresh1 		int protocol = (int)va_arg(args, long);
628*fac98b93Safresh1 		ret = socket(domain, type, protocol);
629*fac98b93Safresh1 		break;
630*fac98b93Safresh1 	}
631*fac98b93Safresh1 	case SYS_connect: {
632*fac98b93Safresh1 		int s = (int)va_arg(args, long);
633*fac98b93Safresh1 		const struct sockaddr * name = (const struct sockaddr *)va_arg(args, long);
634*fac98b93Safresh1 		socklen_t namelen = (socklen_t)va_arg(args, long);
635*fac98b93Safresh1 		ret = connect(s, name, namelen);
636*fac98b93Safresh1 		break;
637*fac98b93Safresh1 	}
638*fac98b93Safresh1 	case SYS_getdents: {
639*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
640*fac98b93Safresh1 		void * buf = (void *)va_arg(args, long);
641*fac98b93Safresh1 		size_t buflen = (size_t)va_arg(args, long);
642*fac98b93Safresh1 		ret = getdents(fd, buf, buflen);
643*fac98b93Safresh1 		break;
644*fac98b93Safresh1 	}
645*fac98b93Safresh1 	case SYS_getpriority: {
646*fac98b93Safresh1 		int which = (int)va_arg(args, long);
647*fac98b93Safresh1 		id_t who = (id_t)va_arg(args, long);
648*fac98b93Safresh1 		ret = getpriority(which, who);
649*fac98b93Safresh1 		break;
650*fac98b93Safresh1 	}
651*fac98b93Safresh1 	case SYS_pipe2: {
652*fac98b93Safresh1 		int * fdp = (int *)va_arg(args, long);
653*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
654*fac98b93Safresh1 		ret = pipe2(fdp, flags);
655*fac98b93Safresh1 		break;
656*fac98b93Safresh1 	}
657*fac98b93Safresh1 	case SYS_dup3: {
658*fac98b93Safresh1 		int from = (int)va_arg(args, long);
659*fac98b93Safresh1 		int to = (int)va_arg(args, long);
660*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
661*fac98b93Safresh1 		ret = dup3(from, to, flags);
662*fac98b93Safresh1 		break;
663*fac98b93Safresh1 	}
664*fac98b93Safresh1 	/* No signature found in headers
665*fac98b93Safresh1 	 *case SYS_sigreturn:
666*fac98b93Safresh1 	 *	ret = sigreturn(va_arg(args, struct sigcontext *)); // sigcntxp
667*fac98b93Safresh1 	 *	break;
668*fac98b93Safresh1 	 */
669*fac98b93Safresh1 	case SYS_bind: {
670*fac98b93Safresh1 		int s = (int)va_arg(args, long);
671*fac98b93Safresh1 		const struct sockaddr * name = (const struct sockaddr *)va_arg(args, long);
672*fac98b93Safresh1 		socklen_t namelen = (socklen_t)va_arg(args, long);
673*fac98b93Safresh1 		ret = bind(s, name, namelen);
674*fac98b93Safresh1 		break;
675*fac98b93Safresh1 	}
676*fac98b93Safresh1 	case SYS_setsockopt: {
677*fac98b93Safresh1 		int s = (int)va_arg(args, long);
678*fac98b93Safresh1 		int level = (int)va_arg(args, long);
679*fac98b93Safresh1 		int name = (int)va_arg(args, long);
680*fac98b93Safresh1 		const void * val = (const void *)va_arg(args, long);
681*fac98b93Safresh1 		socklen_t valsize = (socklen_t)va_arg(args, long);
682*fac98b93Safresh1 		ret = setsockopt(s, level, name, val, valsize);
683*fac98b93Safresh1 		break;
684*fac98b93Safresh1 	}
685*fac98b93Safresh1 	case SYS_listen: {
686*fac98b93Safresh1 		int s = (int)va_arg(args, long);
687*fac98b93Safresh1 		int backlog = (int)va_arg(args, long);
688*fac98b93Safresh1 		ret = listen(s, backlog);
689*fac98b93Safresh1 		break;
690*fac98b93Safresh1 	}
691*fac98b93Safresh1 	case SYS_chflagsat: {
692*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
693*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
694*fac98b93Safresh1 		u_int flags = (u_int)va_arg(args, long);
695*fac98b93Safresh1 		int atflags = (int)va_arg(args, long);
696*fac98b93Safresh1 		ret = chflagsat(fd, path, flags, atflags);
697*fac98b93Safresh1 		break;
698*fac98b93Safresh1 	}
699*fac98b93Safresh1 	case SYS_pledge: {
700*fac98b93Safresh1 		const char * promises = (const char *)va_arg(args, long);
701*fac98b93Safresh1 		const char * execpromises = (const char *)va_arg(args, long);
702*fac98b93Safresh1 		ret = pledge(promises, execpromises);
703*fac98b93Safresh1 		break;
704*fac98b93Safresh1 	}
705*fac98b93Safresh1 	case SYS_ppoll: {
706*fac98b93Safresh1 		struct pollfd * fds = (struct pollfd *)va_arg(args, long);
707*fac98b93Safresh1 		u_int nfds = (u_int)va_arg(args, long);
708*fac98b93Safresh1 		const struct timespec * ts = (const struct timespec *)va_arg(args, long);
709*fac98b93Safresh1 		const sigset_t * mask = (const sigset_t *)va_arg(args, long);
710*fac98b93Safresh1 		ret = ppoll(fds, nfds, ts, mask);
711*fac98b93Safresh1 		break;
712*fac98b93Safresh1 	}
713*fac98b93Safresh1 	case SYS_pselect: {
714*fac98b93Safresh1 		int nd = (int)va_arg(args, long);
715*fac98b93Safresh1 		fd_set * in = (fd_set *)va_arg(args, long);
716*fac98b93Safresh1 		fd_set * ou = (fd_set *)va_arg(args, long);
717*fac98b93Safresh1 		fd_set * ex = (fd_set *)va_arg(args, long);
718*fac98b93Safresh1 		const struct timespec * ts = (const struct timespec *)va_arg(args, long);
719*fac98b93Safresh1 		const sigset_t * mask = (const sigset_t *)va_arg(args, long);
720*fac98b93Safresh1 		ret = pselect(nd, in, ou, ex, ts, mask);
721*fac98b93Safresh1 		break;
722*fac98b93Safresh1 	}
723*fac98b93Safresh1 	/* Mismatched func: int sigsuspend(const sigset_t *); <signal.h>
724*fac98b93Safresh1 	 *                  int sigsuspend(int); <sys/syscall.h>
725*fac98b93Safresh1 	 *case SYS_sigsuspend:
726*fac98b93Safresh1 	 *	ret = sigsuspend(va_arg(args, int)); // mask
727*fac98b93Safresh1 	 *	break;
728*fac98b93Safresh1 	 */
729*fac98b93Safresh1 	case SYS_sendsyslog: {
730*fac98b93Safresh1 		const char * buf = (const char *)va_arg(args, long);
731*fac98b93Safresh1 		size_t nbyte = (size_t)va_arg(args, long);
732*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
733*fac98b93Safresh1 		ret = sendsyslog(buf, nbyte, flags);
734*fac98b93Safresh1 		break;
735*fac98b93Safresh1 	}
736*fac98b93Safresh1 	case SYS_unveil: {
737*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
738*fac98b93Safresh1 		const char * permissions = (const char *)va_arg(args, long);
739*fac98b93Safresh1 		ret = unveil(path, permissions);
740*fac98b93Safresh1 		break;
741*fac98b93Safresh1 	}
742*fac98b93Safresh1 	/* No signature found in headers
743*fac98b93Safresh1 	 *case SYS___realpath: {
744*fac98b93Safresh1 	 *	const char * pathname = (const char *)va_arg(args, long);
745*fac98b93Safresh1 	 *	char * resolved = (char *)va_arg(args, long);
746*fac98b93Safresh1 	 *	ret = __realpath(pathname, resolved);
747*fac98b93Safresh1 	 *	break;
748*fac98b93Safresh1 	 *}
749*fac98b93Safresh1 	 */
750*fac98b93Safresh1 	case SYS_recvmmsg: {
751*fac98b93Safresh1 		int s = (int)va_arg(args, long);
752*fac98b93Safresh1 		struct mmsghdr * mmsg = (struct mmsghdr *)va_arg(args, long);
753*fac98b93Safresh1 		unsigned int vlen = (unsigned int)va_arg(args, long);
754*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
755*fac98b93Safresh1 		struct timespec * timeout = (struct timespec *)va_arg(args, long);
756*fac98b93Safresh1 		ret = recvmmsg(s, mmsg, vlen, flags, timeout);
757*fac98b93Safresh1 		break;
758*fac98b93Safresh1 	}
759*fac98b93Safresh1 	case SYS_sendmmsg: {
760*fac98b93Safresh1 		int s = (int)va_arg(args, long);
761*fac98b93Safresh1 		struct mmsghdr * mmsg = (struct mmsghdr *)va_arg(args, long);
762*fac98b93Safresh1 		unsigned int vlen = (unsigned int)va_arg(args, long);
763*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
764*fac98b93Safresh1 		ret = sendmmsg(s, mmsg, vlen, flags);
765*fac98b93Safresh1 		break;
766*fac98b93Safresh1 	}
767*fac98b93Safresh1 	case SYS_getsockopt: {
768*fac98b93Safresh1 		int s = (int)va_arg(args, long);
769*fac98b93Safresh1 		int level = (int)va_arg(args, long);
770*fac98b93Safresh1 		int name = (int)va_arg(args, long);
771*fac98b93Safresh1 		void * val = (void *)va_arg(args, long);
772*fac98b93Safresh1 		socklen_t * avalsize = (socklen_t *)va_arg(args, long);
773*fac98b93Safresh1 		ret = getsockopt(s, level, name, val, avalsize);
774*fac98b93Safresh1 		break;
775*fac98b93Safresh1 	}
776*fac98b93Safresh1 	case SYS_thrkill: {
777*fac98b93Safresh1 		pid_t tid = (pid_t)va_arg(args, long);
778*fac98b93Safresh1 		int signum = (int)va_arg(args, long);
779*fac98b93Safresh1 		void * tcb = (void *)va_arg(args, long);
780*fac98b93Safresh1 		ret = thrkill(tid, signum, tcb);
781*fac98b93Safresh1 		break;
782*fac98b93Safresh1 	}
783*fac98b93Safresh1 	case SYS_readv: {
784*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
785*fac98b93Safresh1 		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
786*fac98b93Safresh1 		int iovcnt = (int)va_arg(args, long);
787*fac98b93Safresh1 		ret = readv(fd, iovp, iovcnt);
788*fac98b93Safresh1 		break;
789*fac98b93Safresh1 	}
790*fac98b93Safresh1 	case SYS_writev: {
791*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
792*fac98b93Safresh1 		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
793*fac98b93Safresh1 		int iovcnt = (int)va_arg(args, long);
794*fac98b93Safresh1 		ret = writev(fd, iovp, iovcnt);
795*fac98b93Safresh1 		break;
796*fac98b93Safresh1 	}
797*fac98b93Safresh1 	case SYS_kill: {
798*fac98b93Safresh1 		int pid = (int)va_arg(args, long);
799*fac98b93Safresh1 		int signum = (int)va_arg(args, long);
800*fac98b93Safresh1 		ret = kill(pid, signum);
801*fac98b93Safresh1 		break;
802*fac98b93Safresh1 	}
803*fac98b93Safresh1 	case SYS_fchown: {
804*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
805*fac98b93Safresh1 		uid_t uid = (uid_t)va_arg(args, long);
806*fac98b93Safresh1 		gid_t gid = (gid_t)va_arg(args, long);
807*fac98b93Safresh1 		ret = fchown(fd, uid, gid);
808*fac98b93Safresh1 		break;
809*fac98b93Safresh1 	}
810*fac98b93Safresh1 	case SYS_fchmod: {
811*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
812*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
813*fac98b93Safresh1 		ret = fchmod(fd, mode);
814*fac98b93Safresh1 		break;
815*fac98b93Safresh1 	}
816*fac98b93Safresh1 	case SYS_setreuid: {
817*fac98b93Safresh1 		uid_t ruid = (uid_t)va_arg(args, long);
818*fac98b93Safresh1 		uid_t euid = (uid_t)va_arg(args, long);
819*fac98b93Safresh1 		ret = setreuid(ruid, euid);
820*fac98b93Safresh1 		break;
821*fac98b93Safresh1 	}
822*fac98b93Safresh1 	case SYS_setregid: {
823*fac98b93Safresh1 		gid_t rgid = (gid_t)va_arg(args, long);
824*fac98b93Safresh1 		gid_t egid = (gid_t)va_arg(args, long);
825*fac98b93Safresh1 		ret = setregid(rgid, egid);
826*fac98b93Safresh1 		break;
827*fac98b93Safresh1 	}
828*fac98b93Safresh1 	case SYS_rename: {
829*fac98b93Safresh1 		const char * from = (const char *)va_arg(args, long);
830*fac98b93Safresh1 		const char * to = (const char *)va_arg(args, long);
831*fac98b93Safresh1 		ret = rename(from, to);
832*fac98b93Safresh1 		break;
833*fac98b93Safresh1 	}
834*fac98b93Safresh1 	case SYS_flock: {
835*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
836*fac98b93Safresh1 		int how = (int)va_arg(args, long);
837*fac98b93Safresh1 		ret = flock(fd, how);
838*fac98b93Safresh1 		break;
839*fac98b93Safresh1 	}
840*fac98b93Safresh1 	case SYS_mkfifo: {
841*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
842*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
843*fac98b93Safresh1 		ret = mkfifo(path, mode);
844*fac98b93Safresh1 		break;
845*fac98b93Safresh1 	}
846*fac98b93Safresh1 	case SYS_sendto: {
847*fac98b93Safresh1 		int s = (int)va_arg(args, long);
848*fac98b93Safresh1 		const void * buf = (const void *)va_arg(args, long);
849*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
850*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
851*fac98b93Safresh1 		const struct sockaddr * to = (const struct sockaddr *)va_arg(args, long);
852*fac98b93Safresh1 		socklen_t tolen = (socklen_t)va_arg(args, long);
853*fac98b93Safresh1 		ret = sendto(s, buf, len, flags, to, tolen);
854*fac98b93Safresh1 		break;
855*fac98b93Safresh1 	}
856*fac98b93Safresh1 	case SYS_shutdown: {
857*fac98b93Safresh1 		int s = (int)va_arg(args, long);
858*fac98b93Safresh1 		int how = (int)va_arg(args, long);
859*fac98b93Safresh1 		ret = shutdown(s, how);
860*fac98b93Safresh1 		break;
861*fac98b93Safresh1 	}
862*fac98b93Safresh1 	case SYS_socketpair: {
863*fac98b93Safresh1 		int domain = (int)va_arg(args, long);
864*fac98b93Safresh1 		int type = (int)va_arg(args, long);
865*fac98b93Safresh1 		int protocol = (int)va_arg(args, long);
866*fac98b93Safresh1 		int * rsv = (int *)va_arg(args, long);
867*fac98b93Safresh1 		ret = socketpair(domain, type, protocol, rsv);
868*fac98b93Safresh1 		break;
869*fac98b93Safresh1 	}
870*fac98b93Safresh1 	case SYS_mkdir: {
871*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
872*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
873*fac98b93Safresh1 		ret = mkdir(path, mode);
874*fac98b93Safresh1 		break;
875*fac98b93Safresh1 	}
876*fac98b93Safresh1 	case SYS_rmdir:
877*fac98b93Safresh1 		ret = rmdir(va_arg(args, const char *)); // path
878*fac98b93Safresh1 		break;
879*fac98b93Safresh1 	case SYS_adjtime: {
880*fac98b93Safresh1 		const struct timeval * delta = (const struct timeval *)va_arg(args, long);
881*fac98b93Safresh1 		struct timeval * olddelta = (struct timeval *)va_arg(args, long);
882*fac98b93Safresh1 		ret = adjtime(delta, olddelta);
883*fac98b93Safresh1 		break;
884*fac98b93Safresh1 	}
885*fac98b93Safresh1 	/* Mismatched func: int getlogin_r(char *, size_t); <unistd.h>
886*fac98b93Safresh1 	 *                  int getlogin_r(char *, u_int); <sys/syscall.h>
887*fac98b93Safresh1 	 *case SYS_getlogin_r: {
888*fac98b93Safresh1 	 *	char * namebuf = (char *)va_arg(args, long);
889*fac98b93Safresh1 	 *	u_int namelen = (u_int)va_arg(args, long);
890*fac98b93Safresh1 	 *	ret = getlogin_r(namebuf, namelen);
891*fac98b93Safresh1 	 *	break;
892*fac98b93Safresh1 	 *}
893*fac98b93Safresh1 	 */
894*fac98b93Safresh1 	case SYS_getthrname: {
895*fac98b93Safresh1 		pid_t tid = (pid_t)va_arg(args, long);
896*fac98b93Safresh1 		char * name = (char *)va_arg(args, long);
897*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
898*fac98b93Safresh1 		ret = getthrname(tid, name, len);
899*fac98b93Safresh1 		break;
900*fac98b93Safresh1 	}
901*fac98b93Safresh1 	case SYS_setthrname: {
902*fac98b93Safresh1 		pid_t tid = (pid_t)va_arg(args, long);
903*fac98b93Safresh1 		const char * name = (const char *)va_arg(args, long);
904*fac98b93Safresh1 		ret = setthrname(tid, name);
905*fac98b93Safresh1 		break;
906*fac98b93Safresh1 	}
907*fac98b93Safresh1 	/* No signature found in headers
908*fac98b93Safresh1 	 *case SYS_pinsyscall: {
909*fac98b93Safresh1 	 *	int syscall = (int)va_arg(args, long);
910*fac98b93Safresh1 	 *	void * addr = (void *)va_arg(args, long);
911*fac98b93Safresh1 	 *	size_t len = (size_t)va_arg(args, long);
912*fac98b93Safresh1 	 *	ret = pinsyscall(syscall, addr, len);
913*fac98b93Safresh1 	 *	break;
914*fac98b93Safresh1 	 *}
915*fac98b93Safresh1 	 */
916*fac98b93Safresh1 	case SYS_setsid:
917*fac98b93Safresh1 		ret = setsid();
918*fac98b93Safresh1 		break;
919*fac98b93Safresh1 	case SYS_quotactl: {
920*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
921*fac98b93Safresh1 		int cmd = (int)va_arg(args, long);
922*fac98b93Safresh1 		int uid = (int)va_arg(args, long);
923*fac98b93Safresh1 		char * arg = (char *)va_arg(args, long);
924*fac98b93Safresh1 		ret = quotactl(path, cmd, uid, arg);
925*fac98b93Safresh1 		break;
926*fac98b93Safresh1 	}
927*fac98b93Safresh1 	/* No signature found in headers
928*fac98b93Safresh1 	 *case SYS_ypconnect:
929*fac98b93Safresh1 	 *	ret = ypconnect(va_arg(args, int)); // type
930*fac98b93Safresh1 	 *	break;
931*fac98b93Safresh1 	 */
932*fac98b93Safresh1 	case SYS_nfssvc: {
933*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
934*fac98b93Safresh1 		void * argp = (void *)va_arg(args, long);
935*fac98b93Safresh1 		ret = nfssvc(flag, argp);
936*fac98b93Safresh1 		break;
937*fac98b93Safresh1 	}
938*fac98b93Safresh1 	case SYS_mimmutable: {
939*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
940*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
941*fac98b93Safresh1 		ret = mimmutable(addr, len);
942*fac98b93Safresh1 		break;
943*fac98b93Safresh1 	}
944*fac98b93Safresh1 	case SYS_waitid: {
945*fac98b93Safresh1 		int idtype = (int)va_arg(args, long);
946*fac98b93Safresh1 		id_t id = (id_t)va_arg(args, long);
947*fac98b93Safresh1 		siginfo_t * info = (siginfo_t *)va_arg(args, long);
948*fac98b93Safresh1 		int options = (int)va_arg(args, long);
949*fac98b93Safresh1 		ret = waitid(idtype, id, info, options);
950*fac98b93Safresh1 		break;
951*fac98b93Safresh1 	}
952*fac98b93Safresh1 	case SYS_getfh: {
953*fac98b93Safresh1 		const char * fname = (const char *)va_arg(args, long);
954*fac98b93Safresh1 		fhandle_t * fhp = (fhandle_t *)va_arg(args, long);
955*fac98b93Safresh1 		ret = getfh(fname, fhp);
956*fac98b93Safresh1 		break;
957*fac98b93Safresh1 	}
958*fac98b93Safresh1 	/* No signature found in headers
959*fac98b93Safresh1 	 *case SYS___tmpfd:
960*fac98b93Safresh1 	 *	ret = __tmpfd(va_arg(args, int)); // flags
961*fac98b93Safresh1 	 *	break;
962*fac98b93Safresh1 	 */
963*fac98b93Safresh1 	/* No signature found in headers
964*fac98b93Safresh1 	 *case SYS_sysarch: {
965*fac98b93Safresh1 	 *	int op = (int)va_arg(args, long);
966*fac98b93Safresh1 	 *	void * parms = (void *)va_arg(args, long);
967*fac98b93Safresh1 	 *	ret = sysarch(op, parms);
968*fac98b93Safresh1 	 *	break;
969*fac98b93Safresh1 	 *}
970*fac98b93Safresh1 	 */
971*fac98b93Safresh1 	case SYS_lseek: {
972*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
973*fac98b93Safresh1 		off_t offset = (off_t)va_arg(args, long);
974*fac98b93Safresh1 		int whence = (int)va_arg(args, long);
975*fac98b93Safresh1 		ret = lseek(fd, offset, whence);
976*fac98b93Safresh1 		break;
977*fac98b93Safresh1 	}
978*fac98b93Safresh1 	case SYS_truncate: {
979*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
980*fac98b93Safresh1 		off_t length = (off_t)va_arg(args, long);
981*fac98b93Safresh1 		ret = truncate(path, length);
982*fac98b93Safresh1 		break;
983*fac98b93Safresh1 	}
984*fac98b93Safresh1 	case SYS_ftruncate: {
985*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
986*fac98b93Safresh1 		off_t length = (off_t)va_arg(args, long);
987*fac98b93Safresh1 		ret = ftruncate(fd, length);
988*fac98b93Safresh1 		break;
989*fac98b93Safresh1 	}
990*fac98b93Safresh1 	case SYS_pread: {
991*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
992*fac98b93Safresh1 		void * buf = (void *)va_arg(args, long);
993*fac98b93Safresh1 		size_t nbyte = (size_t)va_arg(args, long);
994*fac98b93Safresh1 		off_t offset = (off_t)va_arg(args, long);
995*fac98b93Safresh1 		ret = pread(fd, buf, nbyte, offset);
996*fac98b93Safresh1 		break;
997*fac98b93Safresh1 	}
998*fac98b93Safresh1 	case SYS_pwrite: {
999*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1000*fac98b93Safresh1 		const void * buf = (const void *)va_arg(args, long);
1001*fac98b93Safresh1 		size_t nbyte = (size_t)va_arg(args, long);
1002*fac98b93Safresh1 		off_t offset = (off_t)va_arg(args, long);
1003*fac98b93Safresh1 		ret = pwrite(fd, buf, nbyte, offset);
1004*fac98b93Safresh1 		break;
1005*fac98b93Safresh1 	}
1006*fac98b93Safresh1 	case SYS_preadv: {
1007*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1008*fac98b93Safresh1 		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
1009*fac98b93Safresh1 		int iovcnt = (int)va_arg(args, long);
1010*fac98b93Safresh1 		off_t offset = (off_t)va_arg(args, long);
1011*fac98b93Safresh1 		ret = preadv(fd, iovp, iovcnt, offset);
1012*fac98b93Safresh1 		break;
1013*fac98b93Safresh1 	}
1014*fac98b93Safresh1 	case SYS_pwritev: {
1015*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1016*fac98b93Safresh1 		const struct iovec * iovp = (const struct iovec *)va_arg(args, long);
1017*fac98b93Safresh1 		int iovcnt = (int)va_arg(args, long);
1018*fac98b93Safresh1 		off_t offset = (off_t)va_arg(args, long);
1019*fac98b93Safresh1 		ret = pwritev(fd, iovp, iovcnt, offset);
1020*fac98b93Safresh1 		break;
1021*fac98b93Safresh1 	}
1022*fac98b93Safresh1 	case SYS_setgid:
1023*fac98b93Safresh1 		ret = setgid(va_arg(args, gid_t)); // gid
1024*fac98b93Safresh1 		break;
1025*fac98b93Safresh1 	case SYS_setegid:
1026*fac98b93Safresh1 		ret = setegid(va_arg(args, gid_t)); // egid
1027*fac98b93Safresh1 		break;
1028*fac98b93Safresh1 	case SYS_seteuid:
1029*fac98b93Safresh1 		ret = seteuid(va_arg(args, uid_t)); // euid
1030*fac98b93Safresh1 		break;
1031*fac98b93Safresh1 	case SYS_pathconf: {
1032*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1033*fac98b93Safresh1 		int name = (int)va_arg(args, long);
1034*fac98b93Safresh1 		ret = pathconf(path, name);
1035*fac98b93Safresh1 		break;
1036*fac98b93Safresh1 	}
1037*fac98b93Safresh1 	case SYS_fpathconf: {
1038*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1039*fac98b93Safresh1 		int name = (int)va_arg(args, long);
1040*fac98b93Safresh1 		ret = fpathconf(fd, name);
1041*fac98b93Safresh1 		break;
1042*fac98b93Safresh1 	}
1043*fac98b93Safresh1 	case SYS_swapctl: {
1044*fac98b93Safresh1 		int cmd = (int)va_arg(args, long);
1045*fac98b93Safresh1 		const void * arg = (const void *)va_arg(args, long);
1046*fac98b93Safresh1 		int misc = (int)va_arg(args, long);
1047*fac98b93Safresh1 		ret = swapctl(cmd, arg, misc);
1048*fac98b93Safresh1 		break;
1049*fac98b93Safresh1 	}
1050*fac98b93Safresh1 	case SYS_getrlimit: {
1051*fac98b93Safresh1 		int which = (int)va_arg(args, long);
1052*fac98b93Safresh1 		struct rlimit * rlp = (struct rlimit *)va_arg(args, long);
1053*fac98b93Safresh1 		ret = getrlimit(which, rlp);
1054*fac98b93Safresh1 		break;
1055*fac98b93Safresh1 	}
1056*fac98b93Safresh1 	case SYS_setrlimit: {
1057*fac98b93Safresh1 		int which = (int)va_arg(args, long);
1058*fac98b93Safresh1 		const struct rlimit * rlp = (const struct rlimit *)va_arg(args, long);
1059*fac98b93Safresh1 		ret = setrlimit(which, rlp);
1060*fac98b93Safresh1 		break;
1061*fac98b93Safresh1 	}
1062*fac98b93Safresh1 	case SYS_sysctl: {
1063*fac98b93Safresh1 		const int * name = (const int *)va_arg(args, long);
1064*fac98b93Safresh1 		u_int namelen = (u_int)va_arg(args, long);
1065*fac98b93Safresh1 		void * old = (void *)va_arg(args, long);
1066*fac98b93Safresh1 		size_t * oldlenp = (size_t *)va_arg(args, long);
1067*fac98b93Safresh1 		void * new = (void *)va_arg(args, long);
1068*fac98b93Safresh1 		size_t newlen = (size_t)va_arg(args, long);
1069*fac98b93Safresh1 		ret = sysctl(name, namelen, old, oldlenp, new, newlen);
1070*fac98b93Safresh1 		break;
1071*fac98b93Safresh1 	}
1072*fac98b93Safresh1 	case SYS_mlock: {
1073*fac98b93Safresh1 		const void * addr = (const void *)va_arg(args, long);
1074*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
1075*fac98b93Safresh1 		ret = mlock(addr, len);
1076*fac98b93Safresh1 		break;
1077*fac98b93Safresh1 	}
1078*fac98b93Safresh1 	case SYS_munlock: {
1079*fac98b93Safresh1 		const void * addr = (const void *)va_arg(args, long);
1080*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
1081*fac98b93Safresh1 		ret = munlock(addr, len);
1082*fac98b93Safresh1 		break;
1083*fac98b93Safresh1 	}
1084*fac98b93Safresh1 	case SYS_getpgid:
1085*fac98b93Safresh1 		ret = getpgid(va_arg(args, pid_t)); // pid
1086*fac98b93Safresh1 		break;
1087*fac98b93Safresh1 	case SYS_utrace: {
1088*fac98b93Safresh1 		const char * label = (const char *)va_arg(args, long);
1089*fac98b93Safresh1 		const void * addr = (const void *)va_arg(args, long);
1090*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
1091*fac98b93Safresh1 		ret = utrace(label, addr, len);
1092*fac98b93Safresh1 		break;
1093*fac98b93Safresh1 	}
1094*fac98b93Safresh1 	case SYS_semget: {
1095*fac98b93Safresh1 		key_t key = (key_t)va_arg(args, long);
1096*fac98b93Safresh1 		int nsems = (int)va_arg(args, long);
1097*fac98b93Safresh1 		int semflg = (int)va_arg(args, long);
1098*fac98b93Safresh1 		ret = semget(key, nsems, semflg);
1099*fac98b93Safresh1 		break;
1100*fac98b93Safresh1 	}
1101*fac98b93Safresh1 	case SYS_msgget: {
1102*fac98b93Safresh1 		key_t key = (key_t)va_arg(args, long);
1103*fac98b93Safresh1 		int msgflg = (int)va_arg(args, long);
1104*fac98b93Safresh1 		ret = msgget(key, msgflg);
1105*fac98b93Safresh1 		break;
1106*fac98b93Safresh1 	}
1107*fac98b93Safresh1 	case SYS_msgsnd: {
1108*fac98b93Safresh1 		int msqid = (int)va_arg(args, long);
1109*fac98b93Safresh1 		const void * msgp = (const void *)va_arg(args, long);
1110*fac98b93Safresh1 		size_t msgsz = (size_t)va_arg(args, long);
1111*fac98b93Safresh1 		int msgflg = (int)va_arg(args, long);
1112*fac98b93Safresh1 		ret = msgsnd(msqid, msgp, msgsz, msgflg);
1113*fac98b93Safresh1 		break;
1114*fac98b93Safresh1 	}
1115*fac98b93Safresh1 	case SYS_msgrcv: {
1116*fac98b93Safresh1 		int msqid = (int)va_arg(args, long);
1117*fac98b93Safresh1 		void * msgp = (void *)va_arg(args, long);
1118*fac98b93Safresh1 		size_t msgsz = (size_t)va_arg(args, long);
1119*fac98b93Safresh1 		long msgtyp = (long)va_arg(args, long);
1120*fac98b93Safresh1 		int msgflg = (int)va_arg(args, long);
1121*fac98b93Safresh1 		ret = msgrcv(msqid, msgp, msgsz, msgtyp, msgflg);
1122*fac98b93Safresh1 		break;
1123*fac98b93Safresh1 	}
1124*fac98b93Safresh1 	case SYS_shmat: {
1125*fac98b93Safresh1 		int shmid = (int)va_arg(args, long);
1126*fac98b93Safresh1 		const void * shmaddr = (const void *)va_arg(args, long);
1127*fac98b93Safresh1 		int shmflg = (int)va_arg(args, long);
1128*fac98b93Safresh1 		ret = (long)shmat(shmid, shmaddr, shmflg);
1129*fac98b93Safresh1 		break;
1130*fac98b93Safresh1 	}
1131*fac98b93Safresh1 	case SYS_shmdt:
1132*fac98b93Safresh1 		ret = shmdt(va_arg(args, const void *)); // shmaddr
1133*fac98b93Safresh1 		break;
1134*fac98b93Safresh1 	case SYS_minherit: {
1135*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
1136*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
1137*fac98b93Safresh1 		int inherit = (int)va_arg(args, long);
1138*fac98b93Safresh1 		ret = minherit(addr, len, inherit);
1139*fac98b93Safresh1 		break;
1140*fac98b93Safresh1 	}
1141*fac98b93Safresh1 	case SYS_poll: {
1142*fac98b93Safresh1 		struct pollfd * fds = (struct pollfd *)va_arg(args, long);
1143*fac98b93Safresh1 		u_int nfds = (u_int)va_arg(args, long);
1144*fac98b93Safresh1 		int timeout = (int)va_arg(args, long);
1145*fac98b93Safresh1 		ret = poll(fds, nfds, timeout);
1146*fac98b93Safresh1 		break;
1147*fac98b93Safresh1 	}
1148*fac98b93Safresh1 	case SYS_issetugid:
1149*fac98b93Safresh1 		ret = issetugid();
1150*fac98b93Safresh1 		break;
1151*fac98b93Safresh1 	case SYS_lchown: {
1152*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1153*fac98b93Safresh1 		uid_t uid = (uid_t)va_arg(args, long);
1154*fac98b93Safresh1 		gid_t gid = (gid_t)va_arg(args, long);
1155*fac98b93Safresh1 		ret = lchown(path, uid, gid);
1156*fac98b93Safresh1 		break;
1157*fac98b93Safresh1 	}
1158*fac98b93Safresh1 	case SYS_getsid:
1159*fac98b93Safresh1 		ret = getsid(va_arg(args, pid_t)); // pid
1160*fac98b93Safresh1 		break;
1161*fac98b93Safresh1 	case SYS_msync: {
1162*fac98b93Safresh1 		void * addr = (void *)va_arg(args, long);
1163*fac98b93Safresh1 		size_t len = (size_t)va_arg(args, long);
1164*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
1165*fac98b93Safresh1 		ret = msync(addr, len, flags);
1166*fac98b93Safresh1 		break;
1167*fac98b93Safresh1 	}
1168*fac98b93Safresh1 	case SYS_pipe:
1169*fac98b93Safresh1 		ret = pipe(va_arg(args, int *)); // fdp
1170*fac98b93Safresh1 		break;
1171*fac98b93Safresh1 	case SYS_fhopen: {
1172*fac98b93Safresh1 		const fhandle_t * fhp = (const fhandle_t *)va_arg(args, long);
1173*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
1174*fac98b93Safresh1 		ret = fhopen(fhp, flags);
1175*fac98b93Safresh1 		break;
1176*fac98b93Safresh1 	}
1177*fac98b93Safresh1 	case SYS_kqueue:
1178*fac98b93Safresh1 		ret = kqueue();
1179*fac98b93Safresh1 		break;
1180*fac98b93Safresh1 	case SYS_mlockall:
1181*fac98b93Safresh1 		ret = mlockall(va_arg(args, int)); // flags
1182*fac98b93Safresh1 		break;
1183*fac98b93Safresh1 	case SYS_munlockall:
1184*fac98b93Safresh1 		ret = munlockall();
1185*fac98b93Safresh1 		break;
1186*fac98b93Safresh1 	case SYS_getresuid: {
1187*fac98b93Safresh1 		uid_t * ruid = (uid_t *)va_arg(args, long);
1188*fac98b93Safresh1 		uid_t * euid = (uid_t *)va_arg(args, long);
1189*fac98b93Safresh1 		uid_t * suid = (uid_t *)va_arg(args, long);
1190*fac98b93Safresh1 		ret = getresuid(ruid, euid, suid);
1191*fac98b93Safresh1 		break;
1192*fac98b93Safresh1 	}
1193*fac98b93Safresh1 	case SYS_setresuid: {
1194*fac98b93Safresh1 		uid_t ruid = (uid_t)va_arg(args, long);
1195*fac98b93Safresh1 		uid_t euid = (uid_t)va_arg(args, long);
1196*fac98b93Safresh1 		uid_t suid = (uid_t)va_arg(args, long);
1197*fac98b93Safresh1 		ret = setresuid(ruid, euid, suid);
1198*fac98b93Safresh1 		break;
1199*fac98b93Safresh1 	}
1200*fac98b93Safresh1 	case SYS_getresgid: {
1201*fac98b93Safresh1 		gid_t * rgid = (gid_t *)va_arg(args, long);
1202*fac98b93Safresh1 		gid_t * egid = (gid_t *)va_arg(args, long);
1203*fac98b93Safresh1 		gid_t * sgid = (gid_t *)va_arg(args, long);
1204*fac98b93Safresh1 		ret = getresgid(rgid, egid, sgid);
1205*fac98b93Safresh1 		break;
1206*fac98b93Safresh1 	}
1207*fac98b93Safresh1 	case SYS_setresgid: {
1208*fac98b93Safresh1 		gid_t rgid = (gid_t)va_arg(args, long);
1209*fac98b93Safresh1 		gid_t egid = (gid_t)va_arg(args, long);
1210*fac98b93Safresh1 		gid_t sgid = (gid_t)va_arg(args, long);
1211*fac98b93Safresh1 		ret = setresgid(rgid, egid, sgid);
1212*fac98b93Safresh1 		break;
1213*fac98b93Safresh1 	}
1214*fac98b93Safresh1 	case SYS_closefrom:
1215*fac98b93Safresh1 		ret = closefrom(va_arg(args, int)); // fd
1216*fac98b93Safresh1 		break;
1217*fac98b93Safresh1 	case SYS_sigaltstack: {
1218*fac98b93Safresh1 		const struct sigaltstack * nss = (const struct sigaltstack *)va_arg(args, long);
1219*fac98b93Safresh1 		struct sigaltstack * oss = (struct sigaltstack *)va_arg(args, long);
1220*fac98b93Safresh1 		ret = sigaltstack(nss, oss);
1221*fac98b93Safresh1 		break;
1222*fac98b93Safresh1 	}
1223*fac98b93Safresh1 	case SYS_shmget: {
1224*fac98b93Safresh1 		key_t key = (key_t)va_arg(args, long);
1225*fac98b93Safresh1 		size_t size = (size_t)va_arg(args, long);
1226*fac98b93Safresh1 		int shmflg = (int)va_arg(args, long);
1227*fac98b93Safresh1 		ret = shmget(key, size, shmflg);
1228*fac98b93Safresh1 		break;
1229*fac98b93Safresh1 	}
1230*fac98b93Safresh1 	case SYS_semop: {
1231*fac98b93Safresh1 		int semid = (int)va_arg(args, long);
1232*fac98b93Safresh1 		struct sembuf * sops = (struct sembuf *)va_arg(args, long);
1233*fac98b93Safresh1 		size_t nsops = (size_t)va_arg(args, long);
1234*fac98b93Safresh1 		ret = semop(semid, sops, nsops);
1235*fac98b93Safresh1 		break;
1236*fac98b93Safresh1 	}
1237*fac98b93Safresh1 	case SYS_fhstat: {
1238*fac98b93Safresh1 		const fhandle_t * fhp = (const fhandle_t *)va_arg(args, long);
1239*fac98b93Safresh1 		struct stat * sb = (struct stat *)va_arg(args, long);
1240*fac98b93Safresh1 		ret = fhstat(fhp, sb);
1241*fac98b93Safresh1 		break;
1242*fac98b93Safresh1 	}
1243*fac98b93Safresh1 	case SYS___semctl: {
1244*fac98b93Safresh1 		int semid = (int)va_arg(args, long);
1245*fac98b93Safresh1 		int semnum = (int)va_arg(args, long);
1246*fac98b93Safresh1 		int cmd = (int)va_arg(args, long);
1247*fac98b93Safresh1 		union semun * arg = (union semun *)va_arg(args, long);
1248*fac98b93Safresh1 		ret = __semctl(semid, semnum, cmd, arg);
1249*fac98b93Safresh1 		break;
1250*fac98b93Safresh1 	}
1251*fac98b93Safresh1 	case SYS_shmctl: {
1252*fac98b93Safresh1 		int shmid = (int)va_arg(args, long);
1253*fac98b93Safresh1 		int cmd = (int)va_arg(args, long);
1254*fac98b93Safresh1 		struct shmid_ds * buf = (struct shmid_ds *)va_arg(args, long);
1255*fac98b93Safresh1 		ret = shmctl(shmid, cmd, buf);
1256*fac98b93Safresh1 		break;
1257*fac98b93Safresh1 	}
1258*fac98b93Safresh1 	case SYS_msgctl: {
1259*fac98b93Safresh1 		int msqid = (int)va_arg(args, long);
1260*fac98b93Safresh1 		int cmd = (int)va_arg(args, long);
1261*fac98b93Safresh1 		struct msqid_ds * buf = (struct msqid_ds *)va_arg(args, long);
1262*fac98b93Safresh1 		ret = msgctl(msqid, cmd, buf);
1263*fac98b93Safresh1 		break;
1264*fac98b93Safresh1 	}
1265*fac98b93Safresh1 	case SYS_sched_yield:
1266*fac98b93Safresh1 		ret = sched_yield();
1267*fac98b93Safresh1 		break;
1268*fac98b93Safresh1 	case SYS_getthrid:
1269*fac98b93Safresh1 		ret = getthrid();
1270*fac98b93Safresh1 		break;
1271*fac98b93Safresh1 	/* No signature found in headers
1272*fac98b93Safresh1 	 *case SYS___thrwakeup: {
1273*fac98b93Safresh1 	 *	const volatile void * ident = (const volatile void *)va_arg(args, long);
1274*fac98b93Safresh1 	 *	int n = (int)va_arg(args, long);
1275*fac98b93Safresh1 	 *	ret = __thrwakeup(ident, n);
1276*fac98b93Safresh1 	 *	break;
1277*fac98b93Safresh1 	 *}
1278*fac98b93Safresh1 	 */
1279*fac98b93Safresh1 	/* No signature found in headers
1280*fac98b93Safresh1 	 *case SYS___threxit:
1281*fac98b93Safresh1 	 *	__threxit(va_arg(args, pid_t *)); // notdead
1282*fac98b93Safresh1 	 *	break;
1283*fac98b93Safresh1 	 */
1284*fac98b93Safresh1 	/* No signature found in headers
1285*fac98b93Safresh1 	 *case SYS___thrsigdivert: {
1286*fac98b93Safresh1 	 *	sigset_t sigmask = (sigset_t)va_arg(args, long);
1287*fac98b93Safresh1 	 *	siginfo_t * info = (siginfo_t *)va_arg(args, long);
1288*fac98b93Safresh1 	 *	const struct timespec * timeout = (const struct timespec *)va_arg(args, long);
1289*fac98b93Safresh1 	 *	ret = __thrsigdivert(sigmask, info, timeout);
1290*fac98b93Safresh1 	 *	break;
1291*fac98b93Safresh1 	 *}
1292*fac98b93Safresh1 	 */
1293*fac98b93Safresh1 	/* No signature found in headers
1294*fac98b93Safresh1 	 *case SYS___getcwd: {
1295*fac98b93Safresh1 	 *	char * buf = (char *)va_arg(args, long);
1296*fac98b93Safresh1 	 *	size_t len = (size_t)va_arg(args, long);
1297*fac98b93Safresh1 	 *	ret = __getcwd(buf, len);
1298*fac98b93Safresh1 	 *	break;
1299*fac98b93Safresh1 	 *}
1300*fac98b93Safresh1 	 */
1301*fac98b93Safresh1 	case SYS_adjfreq: {
1302*fac98b93Safresh1 		const int64_t * freq = (const int64_t *)va_arg(args, long);
1303*fac98b93Safresh1 		int64_t * oldfreq = (int64_t *)va_arg(args, long);
1304*fac98b93Safresh1 		ret = adjfreq(freq, oldfreq);
1305*fac98b93Safresh1 		break;
1306*fac98b93Safresh1 	}
1307*fac98b93Safresh1 	case SYS_setrtable:
1308*fac98b93Safresh1 		ret = setrtable(va_arg(args, int)); // rtableid
1309*fac98b93Safresh1 		break;
1310*fac98b93Safresh1 	case SYS_getrtable:
1311*fac98b93Safresh1 		ret = getrtable();
1312*fac98b93Safresh1 		break;
1313*fac98b93Safresh1 	case SYS_faccessat: {
1314*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1315*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1316*fac98b93Safresh1 		int amode = (int)va_arg(args, long);
1317*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
1318*fac98b93Safresh1 		ret = faccessat(fd, path, amode, flag);
1319*fac98b93Safresh1 		break;
1320*fac98b93Safresh1 	}
1321*fac98b93Safresh1 	case SYS_fchmodat: {
1322*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1323*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1324*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
1325*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
1326*fac98b93Safresh1 		ret = fchmodat(fd, path, mode, flag);
1327*fac98b93Safresh1 		break;
1328*fac98b93Safresh1 	}
1329*fac98b93Safresh1 	case SYS_fchownat: {
1330*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1331*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1332*fac98b93Safresh1 		uid_t uid = (uid_t)va_arg(args, long);
1333*fac98b93Safresh1 		gid_t gid = (gid_t)va_arg(args, long);
1334*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
1335*fac98b93Safresh1 		ret = fchownat(fd, path, uid, gid, flag);
1336*fac98b93Safresh1 		break;
1337*fac98b93Safresh1 	}
1338*fac98b93Safresh1 	case SYS_linkat: {
1339*fac98b93Safresh1 		int fd1 = (int)va_arg(args, long);
1340*fac98b93Safresh1 		const char * path1 = (const char *)va_arg(args, long);
1341*fac98b93Safresh1 		int fd2 = (int)va_arg(args, long);
1342*fac98b93Safresh1 		const char * path2 = (const char *)va_arg(args, long);
1343*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
1344*fac98b93Safresh1 		ret = linkat(fd1, path1, fd2, path2, flag);
1345*fac98b93Safresh1 		break;
1346*fac98b93Safresh1 	}
1347*fac98b93Safresh1 	case SYS_mkdirat: {
1348*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1349*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1350*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
1351*fac98b93Safresh1 		ret = mkdirat(fd, path, mode);
1352*fac98b93Safresh1 		break;
1353*fac98b93Safresh1 	}
1354*fac98b93Safresh1 	case SYS_mkfifoat: {
1355*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1356*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1357*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
1358*fac98b93Safresh1 		ret = mkfifoat(fd, path, mode);
1359*fac98b93Safresh1 		break;
1360*fac98b93Safresh1 	}
1361*fac98b93Safresh1 	case SYS_mknodat: {
1362*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1363*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1364*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
1365*fac98b93Safresh1 		dev_t dev = (dev_t)va_arg(args, long);
1366*fac98b93Safresh1 		ret = mknodat(fd, path, mode, dev);
1367*fac98b93Safresh1 		break;
1368*fac98b93Safresh1 	}
1369*fac98b93Safresh1 	case SYS_openat: {
1370*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1371*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1372*fac98b93Safresh1 		int flags = (int)va_arg(args, long);
1373*fac98b93Safresh1 		mode_t mode = (mode_t)va_arg(args, long);
1374*fac98b93Safresh1 		ret = openat(fd, path, flags, mode);
1375*fac98b93Safresh1 		break;
1376*fac98b93Safresh1 	}
1377*fac98b93Safresh1 	case SYS_readlinkat: {
1378*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1379*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1380*fac98b93Safresh1 		char * buf = (char *)va_arg(args, long);
1381*fac98b93Safresh1 		size_t count = (size_t)va_arg(args, long);
1382*fac98b93Safresh1 		ret = readlinkat(fd, path, buf, count);
1383*fac98b93Safresh1 		break;
1384*fac98b93Safresh1 	}
1385*fac98b93Safresh1 	case SYS_renameat: {
1386*fac98b93Safresh1 		int fromfd = (int)va_arg(args, long);
1387*fac98b93Safresh1 		const char * from = (const char *)va_arg(args, long);
1388*fac98b93Safresh1 		int tofd = (int)va_arg(args, long);
1389*fac98b93Safresh1 		const char * to = (const char *)va_arg(args, long);
1390*fac98b93Safresh1 		ret = renameat(fromfd, from, tofd, to);
1391*fac98b93Safresh1 		break;
1392*fac98b93Safresh1 	}
1393*fac98b93Safresh1 	case SYS_symlinkat: {
1394*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1395*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1396*fac98b93Safresh1 		const char * link = (const char *)va_arg(args, long);
1397*fac98b93Safresh1 		ret = symlinkat(path, fd, link);
1398*fac98b93Safresh1 		break;
1399*fac98b93Safresh1 	}
1400*fac98b93Safresh1 	case SYS_unlinkat: {
1401*fac98b93Safresh1 		int fd = (int)va_arg(args, long);
1402*fac98b93Safresh1 		const char * path = (const char *)va_arg(args, long);
1403*fac98b93Safresh1 		int flag = (int)va_arg(args, long);
1404*fac98b93Safresh1 		ret = unlinkat(fd, path, flag);
1405*fac98b93Safresh1 		break;
1406*fac98b93Safresh1 	}
1407*fac98b93Safresh1 	case SYS___set_tcb:
1408*fac98b93Safresh1 		__set_tcb(va_arg(args, void *)); // tcb
1409*fac98b93Safresh1 		break;
1410*fac98b93Safresh1 	case SYS___get_tcb:
1411*fac98b93Safresh1 		ret = (long)__get_tcb();
1412*fac98b93Safresh1 		break;
1413*fac98b93Safresh1 	default:
1414*fac98b93Safresh1 		ret = -1;
1415*fac98b93Safresh1 		errno = ENOSYS;
1416*fac98b93Safresh1 	}
1417*fac98b93Safresh1 	va_end(args);
1418*fac98b93Safresh1 
1419*fac98b93Safresh1 	return ret;
1420*fac98b93Safresh1 }
1421