Wed Sep 19 21:45:41 2012 UTC ()
Add the first attempt at rump kernel support for Linux clients.  This has
been lightly tested with unmodified networking applications with both
the client and server on a 64bit le host.  Unlike the standard Linux
compat libs where args and syscalls are swizzled around, this compat
lib only massages the arg data types due to the assumption that syscall
numbers come from librumpclient (via librumphijack) and therefore match
the native NetBSD numbers.


(pooka)
diff -r0 -r1.1 src/sys/rump/kern/lib/libsys_linux/Makefile
diff -r0 -r1.1 src/sys/rump/kern/lib/libsys_linux/component.c
diff -r0 -r1.1 src/sys/rump/kern/lib/libsys_linux/shlib_version
diff -r0 -r1.1 src/sys/rump/kern/lib/libsys_linux/syscalls.conf
diff -r0 -r1.1 src/sys/rump/kern/lib/libsys_linux/syscalls.master

File Added: src/sys/rump/kern/lib/libsys_linux/Makefile
#	$NetBSD: Makefile,v 1.1 2012/09/19 21:45:40 pooka Exp $
#

.PATH:	${.CURDIR}/../../../../compat/linux/common

LIB=	rumpkern_sys_linux

SRCS=	linux_blkio.c linux_cdrom.c linux_errno.c linux_fdio.c		\
	linux_file.c linux_hdio.c linux_ioctl.c linux_ipc.c linux_misc.c\
	linux_mtio.c linux_signal.c linux_signo.c linux_socket.c	\
	linux_sysctl.c linux_termios.c linux_time.c linux_file64.c

SRCS+=	rump_linux_sysent.c component.c

# XXX
CPPFLAGS+= -I${.CURDIR}

.include <bsd.lib.mk>
.include <bsd.klinks.mk>

File Added: src/sys/rump/kern/lib/libsys_linux/Attic/component.c
/*	$NetBSD: component.c,v 1.1 2012/09/19 21:45:40 pooka Exp $	*/

#include <sys/param.h>
#include <sys/proc.h>

#include "rump_private.h"

extern struct sysent rump_linux_sysent[];

struct emul emul_rump_sys_linux = {
	.e_name = "linux-rump",
	.e_sysent = rump_linux_sysent,
	.e_vm_default_addr = uvm_default_mapaddr,
#ifdef __HAVE_SYSCALL_INTERN
	.e_syscall_intern = syscall_intern,
#endif
};

/*
 * XXX: the linux emulation code is not split into factions
 */
void rumplinux__stub(void);
void rumplinux__stub(void) {panic("unavailable");}
__weak_alias(rumpns_linux_machdepioctl,rumplinux__stub);
__weak_alias(rumpns_nanosleep1,rumplinux__stub);
__weak_alias(rumpns_vm_map_unlock,rumplinux__stub);
__weak_alias(rumpns_compat_50_sys_settimeofday,rumplinux__stub);
__weak_alias(rumpns_oss_ioctl_mixer,rumplinux__stub);
__weak_alias(rumpns_linux_ioctl_sg,rumplinux__stub);
__weak_alias(rumpns_oss_ioctl_sequencer,rumplinux__stub);
__weak_alias(rumpns_uvm_mremap,rumplinux__stub);
__weak_alias(rumpns_sysent,rumplinux__stub);
__weak_alias(rumpns_sys_swapctl,rumplinux__stub);
__weak_alias(rumpns_vm_map_lock,rumplinux__stub);
__weak_alias(rumpns_compat_50_sys_gettimeofday,rumplinux__stub);
__weak_alias(rumpns_rusage_to_rusage50,rumplinux__stub);
__weak_alias(rumpns_sys_obreak,rumplinux__stub);
__weak_alias(rumpns_do_sys_wait,rumplinux__stub);
__weak_alias(rumpns_sys_mmap,rumplinux__stub);
__weak_alias(rumpns_oss_ioctl_audio,rumplinux__stub);
__weak_alias(rumpns_clock_gettime1,rumplinux__stub);
__weak_alias(rumpns_uvm_map_lookup_entry,rumplinux__stub);
__weak_alias(rumpns_clock_settime1,rumplinux__stub);
__weak_alias(rumpns_clock_getres1,rumplinux__stub);

File Added: src/sys/rump/kern/lib/libsys_linux/Attic/shlib_version
#	$NetBSD: shlib_version,v 1.1 2012/09/19 21:45:40 pooka Exp $
#
major=0
minor=0

File Added: src/sys/rump/kern/lib/libsys_linux/syscalls.conf
#	$NetBSD: syscalls.conf,v 1.1 2012/09/19 21:45:40 pooka Exp $
#

sysnames="rump_linux_syscalls.c"
sysnumhdr="/dev/null"
syssw="rump_linux_sysent.c"
sysarghdr="rump_linux_syscallargs.h"
compatopts=""
libcompatopts=""

switchname="rump_linux_sysent"
namesname="rump_linux_syscallnames"
constprefix="RUMP_LINUX_SYS_"
nsysent=512

sys_nosys="linux_sys_nosys"

File Added: src/sys/rump/kern/lib/libsys_linux/syscalls.master
	$NetBSD: syscalls.master,v 1.1 2012/09/19 21:45:40 pooka Exp $

;	@(#)syscalls.master	8.2 (Berkeley) 1/13/94

; NetBSD system call name/number "master" file.
; (See syscalls.conf to see what it is processed into.)
;
; Fields: number type [type-dependent ...]
;	number	system call number, must be in order
;	type	one of NODEF, UNIMPL, or NOARGS
;
; types:
;	NODEF	always included
;	UNIMPL	unimplemented, not included in system
;	NODEF	included, but don't define the syscall number
;	NOARGS	included, but don't define the syscall args structure
;
; arguments:
;	PAD	argument not part of the C interface, used only for padding
;
;
; The purpose of this syscalls.master is to map to the Linux types which
; are marshalled into the arg structure by the clientside rump_syscalls.c
; code in librumpclient.
;

#include <sys/param.h>
#include <sys/systm.h>
#include <sys/signal.h>
#include <sys/socket.h>
#include <sys/mount.h>
#include <sys/sched.h>
#include <sys/syscallargs.h>

#include <compat/linux/common/linux_types.h>
#include <compat/linux/common/linux_signal.h>

#include "rump_linux_syscallargs.h"

%%

0	NOARGS		{ int|linux_sys||nosys(void); }
1	UNIMPL 		exit
2	UNIMPL 		fork
3	NOARGS		{ ssize_t|sys||read(int fd, void *buf, size_t nbyte); }
4	NOARGS		{ ssize_t|sys||write(int fd, const void *buf, \
			    size_t nbyte); }
5	NODEF		{ int|linux_sys||open(const char *path, \
			    int flags, int mode); }
6	NOARGS	 	{ int|sys||close(int fd); }
7	UNIMPL		wait4
8	UNIMPL		creat
9	NOARGS 		{ int|sys||link(const char *path, const char *link); }
10	NODEF 	 	{ int|linux_sys||unlink(const char *path); }
11	UNIMPL		execv
12	NOARGS 	 	{ int|sys||chdir(const char *path); }
13	NOARGS 	 	{ int|sys||fchdir(int fd); }
14	UNIMPL		mknod
15	NOARGS 	 	{ int|sys||chmod(const char *path, mode_t mode); }
16	NOARGS 	 	{ int|sys||__posix_chown(const char *path, uid_t uid, \
			    gid_t gid); }
17	UNIMPL		obreak
18	UNIMPL		getfsstat
19	UNIMPL		lseek
20	NOARGS 		{ pid_t|sys||getpid_with_ppid(void); } getpid
21	UNIMPL		mount
22	UNIMPL		unmount
23	NOARGS		{ int|sys||setuid(uid_t uid); }
24	NOARGS		{ uid_t|sys||getuid_with_euid(void); } getuid
25	NOARGS		{ uid_t|sys||geteuid(void); }
26	UNIMPL 		ptrace
27	NODEF 		{ ssize_t|linux_sys||recvmsg(int s, \
			    struct linux_msghdr *msg, int flags); }
28	NODEF 		{ ssize_t|linux_sys||sendmsg(int s, \
			    const struct linux_msghdr *msg, int flags); }
29	NODEF 		{ ssize_t|linux_sys||recvfrom(int s, void *buf, \
			    int len, int flags, struct osockaddr *from, \
			    int *fromlenaddr); }
30	NODEF		{ int|linux_sys||accept(int s, struct osockaddr *name, \
			    int *anamelen); }
31	NODEF		{ int|linux_sys||getpeername(int fdes, \
			    struct osockaddr *asa, int *alen); }
32	NODEF		{ int|linux_sys||getsockname(int fdes, \
			    struct osockaddr *asa, int *alen); }
33	NOARGS 		{ int|sys||access(const char *path, int flags); }
34	UNIMPL		chflags
35	UNIMPL		fchflags
36	NOARGS		{ void|sys||sync(void); }
37	UNIMPL 		kill
38	UNIMPL		stat
39	UNIMPL		getppid
40	UNIMPL		lstat
41	NOARGS 		{ int|sys||dup(int fd); }

; we mimic the librumpclient calling convention, therefore no linux_sys_pipe
42	NOARGS 		{ int|sys||pipe(void); }

43	UNIMPL		getegid
44	UNIMPL 		profil
45	UNIMPL 		ktrace
46	UNIMPL		sigaction
47	NOARGS 		{ gid_t|sys||getgid_with_egid(void); } getgid
48	UNIMPL		sigprocmask
49	UNIMPL		__getlogin
50	UNIMPL		__setlogin
51	UNIMPL		acct
52	UNIMPL  	sigpending
53	UNIMPL  	sigaltstack
54	NODEF		{ int|linux_sys||ioctl(int fd, \
			    u_long com, void *data); }
55	UNIMPL		reboot
56	UNIMPL		revoke
57	NOARGS 	 	{ int|sys||symlink(const char *path, \
			    const char *link); }
58	NOARGS 	 	{ ssize_t|sys||readlink(const char *path, char *buf, \
			    int count); }
59	UNIMPL 		execve
60	NOARGS 	 	{ mode_t|sys||umask(mode_t newmask); }
61	NOARGS 	 	{ int|sys||chroot(const char *path); }
62	UNIMPL		fstat43
63	UNIMPL		getkerninfo
64	UNIMPL		getpagesize
65	UNIMPL		msync
66	UNIMPL 		vfork
67	UNIMPL		vread
68	UNIMPL		vwrite
69	UNIMPL 		sbrk
70	UNIMPL 		sstk
71	UNIMPL  	mmap
72	UNIMPL 		ovadvise
73	UNIMPL 		munmap
74	UNIMPL 		mprotect
75	UNIMPL 		madvise
76	UNIMPL		vhangup
77	UNIMPL		vlimit
78	UNIMPL 		mincore
79	NOARGS 		{ int|sys||getgroups(int gidsetsize, \
			    int *gidset); }
80	NOARGS 		{ int|sys||setgroups(int gidsetsize, \
			    const int *gidset); }
81	NOARGS 		{ int|sys||getpgrp(void); }
82	NOARGS 		{ int|sys||setpgid(int pid, int pgid); }
83	UNIMPL		setitimer
84	UNIMPL		wait
85	UNIMPL		swapon
86	UNIMPL		getitimer
87	UNIMPL		gethostname
88	UNIMPL		sethostname
89	UNIMPL		getdtablesize
90	NOARGS 	 	{ int|sys||dup2(int from, int to); }
91	UNIMPL		getdopt
92	NODEF		{ int|linux_sys||fcntl(int fd, int cmd, void *arg); }
93	UNIMPL		select
94	UNIMPL		setdopt
95	NOARGS		{ int|sys||fsync(int fd); }
96	UNIMPL		setpriority
97	UNIMPL		socket
98	NODEF		{ int|linux_sys||connect(int s, \
			    const struct osockaddr *name, \
			    unsigned int namelen); }
99	UNIMPL		accept
100	UNIMPL 		getpriority

101	UNIMPL		send
102	UNIMPL		recv

103	UNIMPL		sigreturn
104	NODEF		{ int|linux_sys||bind(int s, \
			    const struct osockaddr *name, unsigned namelen); }
105	NODEF		{ int|linux_sys||setsockopt(int s, int level, \
			    int name, const void *val, int optlen); }
106	NOARGS		{ int|sys||listen(int s, int backlog); }
107	UNIMPL		vtimes
108	UNIMPL		sigvec
109	UNIMPL		sigblock
110	UNIMPL		sigsetmask
111	UNIMPL		sigsuspend
112	UNIMPL		sigstack
113	UNIMPL		orecvmsg
114	UNIMPL		osendmsg
115	UNIMPL		vtrace
116	UNIMPL		gettimeofday
117	UNIMPL 		getrusage
118	NODEF		{ int|linux_sys||getsockopt(int s, int level, \
			    int name, void *val, int *avalsize); }
119	UNIMPL		resuba
120	NOARGS 		{ ssize_t|sys||readv(int fd, \
			    const struct iovec *iovp, int iovcnt); }
121	NOARGS 		{ ssize_t|sys||writev(int fd, \
			    const struct iovec *iovp, int iovcnt); }
122	UNIMPL		settimeofday
123	NOARGS 	 	{ int|sys||__posix_fchown(int fd, int uid, int gid); }
124	NOARGS 	 	{ int|sys||fchmod(int fd, mode_t mode); }
125	UNIMPL		orecvfrom
126	NOARGS 		{ int|sys||setreuid(uid_t ruid, uid_t euid); }
127	NOARGS 		{ int|sys||setregid(gid_t rgid, gid_t egid); }
128	NOARGS 	 	{ int|sys||__posix_rename(const char *from, \
			    const char *to); }
129	UNIMPL		otruncate
130	UNIMPL		oftruncate
131	NOARGS 	 	{ int|sys||flock(int fd, int how); }
132	UNIMPL 	 	mkfifo
133	NODEF 	 	{ int|linux_sys||sendto(int s, void *buf, \
			    int len, int flags, const struct osockaddr *to, \
			    int tolen); }
134	NOARGS	 	{ int|sys||shutdown(int s, int how); }
135	NODEF	 	{ int|linux_sys||socketpair(int domain, int type, \
			    int protocol, int *rsv); }
136	NOARGS 	 	{ int|sys||mkdir(const char *path, mode_t mode); }
137	NOARGS 	 	{ int|sys||rmdir(const char *path); }
138	UNIMPL		utimes

139	UNIMPL		4.2 sigreturn
140	UNIMPL		adjtime
141	UNIMPL		ogetpeername
142	UNIMPL		ogethostid
143	UNIMPL		osethostid
144	UNIMPL		ogetrlimit
145	UNIMPL		osetrlimit
146	UNIMPL		okillpg
147	NOARGS 		{ int|sys||setsid(void); }
148	UNIMPL		quotactl
149	UNIMPL		oquota
150	UNIMPL		ogetsockname

; Syscalls 151-180 inclusive are reserved for vendor-specific
; system calls.  (This includes various calls added for compatibity
; with other Unix variants.)
; Some of these calls are now supported by BSD...
151	UNIMPL
152	UNIMPL
153	UNIMPL
154	UNIMPL
155	UNIMPL		nfssvc
156	UNIMPL		ogetdirentries
157	UNIMPL		statfs12
158	UNIMPL		fstatfs12
159	UNIMPL
160	UNIMPL
161	UNIMPL		getfh30
162	UNIMPL		ogetdomainname
163	UNIMPL		osetdomainname
164	UNIMPL		ouname
165	UNIMPL 		sysarch
166	UNIMPL
167	UNIMPL
168	UNIMPL
169	UNIMPL		1.0 semsys
170	UNIMPL		1.0 msgsys
171	UNIMPL		1.0 shmsys
172	UNIMPL
173	NODEF 	 	{ ssize_t|linux_sys||pread(int fd, char *buf, \
			    size_t nbyte, int PAD, linux_off_t offset); }
174	NODEF 	 	{ ssize_t|linux_sys||pwrite(int fd, char *buf, \
			    size_t nbyte, int PAD, linux_off_t offset); }
175	UNIMPL		ntp_gettime
176	UNIMPL		ntp_adjtime
177	UNIMPL
178	UNIMPL
179	UNIMPL
180	UNIMPL

; Syscalls 180-199 are used by/reserved for BSD
181	NOARGS 		{ int|sys||setgid(gid_t gid); }
182	NOARGS 		{ int|sys||setegid(gid_t egid); }
183	NOARGS 		{ int|sys||seteuid(uid_t euid); }
184	UNIMPL		lfs_bmapv
185	UNIMPL		lfs_markv
186	UNIMPL		lfs_segclean
187	UNIMPL		lfs_segwait
188	UNIMPL		stat12
189	UNIMPL		fstat12
190	UNIMPL		lstat12
191	UNIMPL 		pathconf
192	UNIMPL 		fpathconf
193	UNIMPL
194	NODEF 		{ int|linux_sys||getrlimit(int which, \
			    struct orlimit *rlp); }
195	NODEF 		{ int|linux_sys||setrlimit(int which, \
			    const struct orlimit *rlp); }
196	UNIMPL		getdirentries
197	UNIMPL		mmap
198	UNIMPL		__syscall
199	NOARGS 	 	{ off_t|sys||lseek(int fd, int PAD, off_t offset, \
			    int whence); }
200	NOARGS 	 	{ int|sys||truncate(const char *path, int PAD, \
			    off_t length); }
201	NOARGS 	 	{ int|sys||ftruncate(int fd, int PAD, off_t length); }
202	UNIMPL		__sysctl
203	UNIMPL		mlock
204	UNIMPL		munlock
205	UNIMPL		undelete
206	UNIMPL		futimes
207	NOARGS 	 	{ pid_t|sys||getpgid(pid_t pid); }
208	UNIMPL	 	reboot
209	NOARGS 	 	{ int|sys||poll(struct pollfd *fds, u_int nfds, \
			    int timeout); }
;
; Syscalls 210-219 are reserved for dynamically loaded syscalls
;
210	UNIMPL	 	afssys
211	UNIMPL
212	UNIMPL
213	UNIMPL
214	UNIMPL
215	UNIMPL
216	UNIMPL
217	UNIMPL
218	UNIMPL
219	UNIMPL
220	UNIMPL		compat_14_semctl
221	UNIMPL		semget
222	UNIMPL		semop
223	UNIMPL		semconfig
224	UNIMPL 		compat_14_msgctl
225	UNIMPL 		msgget
226	UNIMPL 		msgsnd
227	UNIMPL 		msgrcv
228	UNIMPL		shmat
229	UNIMPL		compat_14_shmctl
230	UNIMPL		shmdt
231	UNIMPL		shmget

232	UNIMPL		clock_gettime
233	UNIMPL		clock_settime
234	UNIMPL		clock_getres
235	UNIMPL		timer_create
236	UNIMPL		timer_delete
237	UNIMPL		timer_settime
238	UNIMPL		timer_gettime
239	UNIMPL		timer_getoverrun
;
; Syscalls 240-269 are reserved for other IEEE Std1003.1b syscalls
;
240	UNIMPL		nanosleep
241	NODEF 	 	{ int|linux_sys||fdatasync(int fd); }
242	UNIMPL		mlockall
243	UNIMPL		munlockall
244	UNIMPL		__sigtimedwait
245	UNIMPL		sigqueueinfo
246	UNIMPL		modctl
247	UNIMPL		_ksem_init
248	UNIMPL		_ksem_open
249	UNIMPL		_ksem_unlink
250	UNIMPL		_ksem_close
251	UNIMPL		_ksem_post
252	UNIMPL		_ksem_wait
253	UNIMPL		_ksem_trywait
254	UNIMPL		_ksem_getvalue
255	UNIMPL		_ksem_destroy
256	UNIMPL		_ksem_timedwait

257	UNIMPL		mq_open
258	UNIMPL		mq_close
259	UNIMPL		mq_unlink
260	UNIMPL		mq_getattr
261	UNIMPL		mq_setattr
262	UNIMPL		mq_notify
263	UNIMPL		mq_send
264	UNIMPL		mq_receive
265	UNIMPL		mq_timedsend
266	UNIMPL		mq_timedreceive
267	UNIMPL
268	UNIMPL
269	UNIMPL
270	UNIMPL		__posix_rename
271	UNIMPL		swapctl
272	UNIMPL		getdents
273	UNIMPL		minherit
274	UNIMPL 	 	lchmod
275	UNIMPL 	 	lchown
276	UNIMPL		lutimes
277	UNIMPL		msync
278	UNIMPL		stat
279	UNIMPL		fstat
280	UNIMPL		lstat
281	UNIMPL		sigaltstack
282	UNIMPL		vfork
283	UNIMPL		__posix_chown
284	UNIMPL		__posix_fchown
285	UNIMPL		__posix_lchown
286	NOARGS 		{ pid_t|sys||getsid(pid_t pid); }

287	UNIMPL		__clone
288	UNIMPL		fktrace
289	UNIMPL 		{ ssize_t|sys||preadv(int fd, \
			    const struct iovec *iovp, int iovcnt, \
			    int PAD, off_t offset); }
290	UNIMPL 		{ ssize_t|sys||pwritev(int fd, \
			    const struct iovec *iovp, int iovcnt, \
			    int PAD, off_t offset); }
291	UNIMPL		sigaction
292	UNIMPL		sigpending
293	UNIMPL		sigprocmask
294	UNIMPL		sigsuspend
295	UNIMPL		sigreturn
296	NOARGS 	 	{ int|sys||__getcwd(char *bufp, size_t length); }
297	NOARGS 	 	{ int|sys||fchroot(int fd); }
298	UNIMPL		fhopen
299	UNIMPL		fhstat
300	UNIMPL		fhstatfs
301	UNIMPL		____semctl13
302	UNIMPL		__msgctl13
303	UNIMPL		__shmctl13
304	UNIMPL 	 	lchflags
305	UNIMPL		issetugid
306	UNIMPL		utrace
307	UNIMPL		getcontext
308	UNIMPL		setcontext
309	UNIMPL		_lwp_create
310	UNIMPL		_lwp_exit
311	UNIMPL		_lwp_self
312	UNIMPL		_lwp_wait
313	UNIMPL		_lwp_suspend
314	UNIMPL		_lwp_continue
315	UNIMPL		_lwp_wakeup
316	UNIMPL		_lwp_getprivate
317	UNIMPL		_lwp_setprivate
318	UNIMPL		_lwp_kill
319	UNIMPL		_lwp_detach
320	UNIMPL		_lwp_park
321	UNIMPL		_lwp_unpark
322	UNIMPL		_lwp_unpark_all
323	UNIMPL		_lwp_setname
324	UNIMPL		_lwp_getname
325	UNIMPL		_lwp_ctl

; Syscalls 326-339 reserved for LWP syscalls.
326	UNIMPL
327	UNIMPL
328	UNIMPL
329	UNIMPL
; SA system calls.
330	UNIMPL		sa_register
331	UNIMPL		sa_stacks
332	UNIMPL		sa_enable
333	UNIMPL		sa_setconcurrency
334	UNIMPL		sa_yield
335	UNIMPL		sa_preempt
336	UNIMPL 		sys_sa_unblockyield
;
; Syscalls 337-339 are reserved for other scheduler activation syscalls.
;
337	UNIMPL
338	UNIMPL
339	UNIMPL

340	UNIMPL		__sigaction_sigtramp
341	UNIMPL		pmc_get_info
342	UNIMPL		pmc_control
343	UNIMPL		rasctl
344	UNIMPL		kqueue
345	UNIMPL		kevent

; Scheduling system calls.
346	UNIMPL		_sched_setparam
347	UNIMPL		_sched_getparam
348	UNIMPL		_sched_setaffinity
349	UNIMPL		_sched_getaffinity
350	UNIMPL		sched_yield
351	UNIMPL
352	UNIMPL
353	UNIMPL

354	UNIMPL		fsync_range
355	UNIMPL		uuidgen
356	UNIMPL		getvfsstat
357	UNIMPL		statvfs1
358	UNIMPL		fstatvfs1
359	UNIMPL		fhstatvfs1
360	UNIMPL		extattrctl
361	UNIMPL		extattr_set_file
362	UNIMPL		extattr_get_file
363	UNIMPL		extattr_delete_file
364	UNIMPL		extattr_set_fd
365	UNIMPL		extattr_get_fd
366	UNIMPL		extattr_delete_fd
367	UNIMPL		extattr_set_link
368	UNIMPL		extattr_get_link
369	UNIMPL		extattr_delete_link
370	UNIMPL		extattr_list_fd
371	UNIMPL		extattr_list_file
372	UNIMPL		extattr_list_link
373	UNIMPL		pselect
374	UNIMPL		pollts
375	UNIMPL		setxattr
376	UNIMPL		lsetxattr
377	UNIMPL		fsetxattr
378	UNIMPL		getxattr
379	UNIMPL		lgetxattr
380	UNIMPL		fgetxattr
381	UNIMPL		listxattr
382	UNIMPL		llistxattr
383	UNIMPL		flistxattr
384	UNIMPL		removexattr
385	UNIMPL		lremovexattr
386	UNIMPL		fremovexattr
387	UNIMPL		stat30
388	UNIMPL		fstat30
389	UNIMPL		lstat30
390	NODEF		{ int|linux_sys||getdents(int fd, \
			    struct linux_dirent *dent, unsigned int count); }
391	UNIMPL		old posix_fadvise
392	UNIMPL		fhstat
393	UNIMPL		ntp_gettime
394	NODEF	 	{ int|linux_sys||socket(int domain, \
			    int type, int protocol); }
395	UNIMPL		getfh
396	UNIMPL		fhopen
397	UNIMPL		fhstatvfs1
398	UNIMPL		fhstat

; Asynchronous I/O system calls
399	UNIMPL		aio_cancel
400	UNIMPL		aio_error
401	UNIMPL		aio_fsync
402	UNIMPL		aio_read
403	UNIMPL		aio_return
404	UNIMPL		aio_suspend
405	UNIMPL		aio_write
406	UNIMPL		lio_listio

407	UNIMPL
408	UNIMPL
409	UNIMPL

410	UNIMPL		mount
411	UNIMPL		mremap

; Processor-sets system calls
412	UNIMPL		pset_create
413	UNIMPL		pset_destroy
414	UNIMPL		pset_assign
415	UNIMPL		_pset_bind
416	UNIMPL		fadvise
417	NODEF  		{ int|linux_sys||select(int nd, \
			    fd_set *in, fd_set *ou, fd_set *ex, \
			    struct timeval50 *tv); }
418	UNIMPL		gettimeofday
419	UNIMPL		settimeofday
420	UNIMPL		utimes
421	UNIMPL		adjtime
422	UNIMPL		lfs_segwait
423	UNIMPL		futimes
424	UNIMPL		lutimes
425	UNIMPL		setitimer
426	UNIMPL		getitimer
427	UNIMPL		clock_gettime
428	UNIMPL		clock_settime
429	UNIMPL		clock_getres
430	UNIMPL		nanosleep
431	UNIMPL		__sigtimedwait
432	UNIMPL		mq_timedsend
433	UNIMPL		mq_timedreceive
434	UNIMPL		_lwp_park
435	UNIMPL		kevent
436	UNIMPL		pselect
437	NODEF		{ int|linux_sys||ppoll(struct pollfd *fds, \
			    u_int nfds, const struct linux_timespec *timeout, \
			    const linux_sigset_t *mask);}
438	UNIMPL		aio_suspend
439	NODEF  		{ int|linux_sys||stat64(const char *path, \
			    struct linux_stat64 *sp); }
440	NODEF  		{ int|linux_sys||fstat64(int fd, \
			    struct linux_stat64 *sp); }
441	UNIMPL		lstat
442	UNIMPL		__semctl
443	UNIMPL		shmctl
444	UNIMPL		msgctl
445	UNIMPL		getrusage
446	UNIMPL		timer_settime
447	UNIMPL		timer_gettime
448	UNIMPL		ntp_gettime
449	UNIMPL		wait4
450	NODEF  		{ int|linux_sys||mknod(const char *path, mode_t mode, \
			    int dev); }
451	UNIMPL		fhstat

; 452 only ever appeared in 5.99.x and can be reused after netbsd-7
452	UNIMPL		5.99 quotactl
453	UNIMPL		pipe2
454	UNIMPL		dup3
455	UNIMPL		kqueue1
456	UNIMPL		paccept
457	UNIMPL		linkat
458	UNIMPL		renameat
459	UNIMPL		mkfifoat
460	UNIMPL		mknodat
461	UNIMPL		mkdirat
462	UNIMPL		faccessat
463	UNIMPL		fchmodat
464	UNIMPL		fchownat
465	UNIMPL		fexecve
466	UNIMPL		fstatat
467	UNIMPL		utimensat
468	UNIMPL		openat
469	UNIMPL		readlinkat
470	UNIMPL		symlinkat
471	UNIMPL		unlinkat
472	UNIMPL		futimens
473	UNIMPL		__quotactl
474	UNIMPL		posix_spawn
475	UNIMPL		recvmmsg
476	UNIMPL		sendmmsg