Module Name: src Committed By: njoly Date: Sat Dec 14 10:29:45 UTC 2013
Modified Files: src/sys/rump/kern/lib/libsys_linux: Makefile syscalls.master Added Files: src/sys/rump/kern/lib/libsys_linux: linux_rump.c Log Message: Add syscall wrapper for mknodat(2) to deal with PAD argument difference between rump and linux versions. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/rump/kern/lib/libsys_linux/Makefile cvs rdiff -u -r0 -r1.1 src/sys/rump/kern/lib/libsys_linux/linux_rump.c cvs rdiff -u -r1.8 -r1.9 src/sys/rump/kern/lib/libsys_linux/syscalls.master Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/rump/kern/lib/libsys_linux/Makefile diff -u src/sys/rump/kern/lib/libsys_linux/Makefile:1.2 src/sys/rump/kern/lib/libsys_linux/Makefile:1.3 --- src/sys/rump/kern/lib/libsys_linux/Makefile:1.2 Thu Mar 7 18:53:39 2013 +++ src/sys/rump/kern/lib/libsys_linux/Makefile Sat Dec 14 10:29:45 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.2 2013/03/07 18:53:39 pooka Exp $ +# $NetBSD: Makefile,v 1.3 2013/12/14 10:29:45 njoly Exp $ # .PATH: ${.CURDIR}/../../../../compat/linux/common @@ -10,7 +10,7 @@ SRCS= linux_blkio.c linux_cdrom.c linux_ 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 +SRCS+= rump_linux_sysent.c component.c linux_rump.c # XXX CPPFLAGS+= -I${.CURDIR} -I${RUMPTOP}/librump/rumpkern Index: src/sys/rump/kern/lib/libsys_linux/syscalls.master diff -u src/sys/rump/kern/lib/libsys_linux/syscalls.master:1.8 src/sys/rump/kern/lib/libsys_linux/syscalls.master:1.9 --- src/sys/rump/kern/lib/libsys_linux/syscalls.master:1.8 Sun Dec 8 08:54:48 2013 +++ src/sys/rump/kern/lib/libsys_linux/syscalls.master Sat Dec 14 10:29:45 2013 @@ -1,4 +1,4 @@ - $NetBSD: syscalls.master,v 1.8 2013/12/08 08:54:48 njoly Exp $ + $NetBSD: syscalls.master,v 1.9 2013/12/14 10:29:45 njoly Exp $ ; @(#)syscalls.master 8.2 (Berkeley) 1/13/94 @@ -589,8 +589,8 @@ 458 NOARGS { int|sys||renameat(int fromfd, const char *from, \ int tofd, const char *to); } 459 UNIMPL mkfifoat -460 NODEF { int|linux_sys||mknodat(int fd, const char *path, \ - mode_t mode, unsigned dev); } +460 STD { int|rump_linux_sys||mknodat(int fd, const char *path, \ + mode_t mode, int PAD, unsigned dev); } 461 NOARGS { int|sys||mkdirat(int fd, const char *path, \ mode_t mode); } 462 NODEF { int|linux_sys||faccessat(int fd, const char *path, \ Added files: Index: src/sys/rump/kern/lib/libsys_linux/linux_rump.c diff -u /dev/null src/sys/rump/kern/lib/libsys_linux/linux_rump.c:1.1 --- /dev/null Sat Dec 14 10:29:45 2013 +++ src/sys/rump/kern/lib/libsys_linux/linux_rump.c Sat Dec 14 10:29:45 2013 @@ -0,0 +1,45 @@ +/* $NetBSD: linux_rump.c,v 1.1 2013/12/14 10:29:45 njoly Exp $ */ + +#include <sys/param.h> + +#include <compat/linux/common/linux_types.h> +#include <compat/linux/common/linux_signal.h> + +#include "rump_linux_syscallargs.h" + +/* + compat/linux/arch/.../syscallargs.h and rump_linux_syscallargs.h + define the same syscall arguments and prototypes, thus cannot be + both used. Just copy needed linux stuff for now to avoid conflicts. +*/ + +struct linux_sys_mknodat_args { + syscallarg(int) fd; + syscallarg(const char *) path; + syscallarg(mode_t) mode; + syscallarg(unsigned) dev; +}; +check_syscall_args(linux_sys_mknodat) + +int linux_sys_mknodat(struct lwp *, const struct linux_sys_mknodat_args *, register_t *); + +int +rump_linux_sys_mknodat(struct lwp *l, + const struct rump_linux_sys_mknodat_args *uap, register_t *retval) +{ + /* { + syscallarg(int) fd; + syscallarg(const char *) path; + syscallarg(mode_t) mode; + syscallarg(int) PAD; + syscallarg(dev_t) dev; + } */ + struct linux_sys_mknodat_args ua; + + SCARG(&ua, fd) = SCARG(uap, fd); + SCARG(&ua, path) = SCARG(uap, path); + SCARG(&ua, mode) = SCARG(uap, mode); + SCARG(&ua, dev) = SCARG(uap, dev); + + return linux_sys_mknodat(l, &ua, retval); +}