I'm pretty sure nothing in userspace needs the old sys_opipe() system
call entry point.
sys_pipe is still implemented using it, so just rename it to "opipe()"
and continue using in the kernel. As a bonus, this made me notice
that linux_sys_pipe() was reimplementing sys_pipe() (except without
correct file descriptor table locking), so we can just get rid of that
function and have compat_linux use sys_pipe() directly.
Shrinks an i386 kernel by 190 bytes!!
ok?
Index: kern/syscalls.master
===================================================================
RCS file: /cvs/src/sys/kern/syscalls.master,v
retrieving revision 1.111
diff -u -p -r1.111 syscalls.master
--- kern/syscalls.master 7 Jul 2011 23:45:00 -0000 1.111
+++ kern/syscalls.master 8 Jul 2011 02:37:03 -0000
@@ -110,7 +110,7 @@
39 STD { pid_t sys_getppid(void); }
40 OBSOL lstat43
41 STD { int sys_dup(int fd); }
-42 STD { int sys_opipe(void); }
+42 OBSOL opipe
43 STD { gid_t sys_getegid(void); }
44 STD { int sys_profil(caddr_t samples, size_t size, \
u_long offset, u_int scale); }
Index: kern/sys_pipe.c
===================================================================
RCS file: /cvs/src/sys/kern/sys_pipe.c,v
retrieving revision 1.59
diff -u -p -r1.59 sys_pipe.c
--- kern/sys_pipe.c 27 May 2011 08:53:15 -0000 1.59
+++ kern/sys_pipe.c 8 Jul 2011 02:37:03 -0000
@@ -99,9 +99,8 @@ int pipespace(struct pipe *, u_int);
* The pipe system call for the DTYPE_PIPE type of pipes
*/
-/* ARGSUSED */
int
-sys_opipe(struct proc *p, void *v, register_t *retval)
+opipe(struct proc *p, int *retval)
{
struct filedesc *fdp = p->p_fd;
struct file *rf, *wf;
Index: kern/uipc_syscalls.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_syscalls.c,v
retrieving revision 1.79
diff -u -p -r1.79 uipc_syscalls.c
--- kern/uipc_syscalls.c 4 Apr 2011 12:44:10 -0000 1.79
+++ kern/uipc_syscalls.c 8 Jul 2011 02:37:03 -0000
@@ -47,6 +47,7 @@
#include <sys/signalvar.h>
#include <sys/unpcb.h>
#include <sys/un.h>
+#include <sys/pipe.h>
#ifdef KTRACE
#include <sys/ktrace.h>
#endif
@@ -893,14 +894,11 @@ sys_pipe(struct proc *p, void *v, regist
syscallarg(int *) fdp;
} */ *uap = v;
int error, fds[2];
- register_t rval[2];
- if ((error = sys_opipe(p, v, rval)) != 0)
+ if ((error = opipe(p, fds)) != 0)
return (error);
- fds[0] = rval[0];
- fds[1] = rval[1];
- error = copyout(fds, SCARG(uap, fdp), 2 * sizeof (int));
+ error = copyout(fds, SCARG(uap, fdp), sizeof(fds));
if (error) {
fdplock(p->p_fd);
fdrelease(p, fds[0]);
Index: sys/pipe.h
===================================================================
RCS file: /cvs/src/sys/sys/pipe.h,v
retrieving revision 1.13
diff -u -p -r1.13 pipe.h
--- sys/pipe.h 21 Nov 2005 18:16:46 -0000 1.13
+++ sys/pipe.h 8 Jul 2011 02:37:03 -0000
@@ -85,6 +85,7 @@ struct pipe {
#ifdef _KERNEL
void pipe_init(void);
+int opipe(struct proc *p, int *);
#endif /* _KERNEL */
#endif /* !_SYS_PIPE_H_ */
Index: compat/linux/syscalls.master
===================================================================
RCS file: /cvs/src/sys/compat/linux/syscalls.master,v
retrieving revision 1.57
diff -u -p -r1.57 syscalls.master
--- compat/linux/syscalls.master 7 Jul 2011 06:15:47 -0000 1.57
+++ compat/linux/syscalls.master 8 Jul 2011 02:37:03 -0000
@@ -97,7 +97,7 @@
39 STD { int linux_sys_mkdir(char *path, int mode); }
40 STD { int linux_sys_rmdir(char *path); }
41 NOARGS { int sys_dup(u_int fd); }
-42 STD { int linux_sys_pipe(int *pfds); }
+42 NOARGS { int sys_pipe(int *fdp); }
43 STD { int linux_sys_times(struct times *tms); }
44 STD { int linux_sys_prof(void); }
45 STD { int linux_sys_brk(char *nsize); }
Index: compat/linux/linux_misc.c
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_misc.c,v
retrieving revision 1.69
diff -u -p -r1.69 linux_misc.c
--- compat/linux/linux_misc.c 7 Jul 2011 01:19:39 -0000 1.69
+++ compat/linux/linux_misc.c 8 Jul 2011 02:37:03 -0000
@@ -765,52 +765,6 @@ linux_sys_times(p, v, retval)
}
/*
- * OpenBSD passes fd[0] in retval[0], and fd[1] in retval[1].
- * Linux directly passes the pointer.
- */
-int
-linux_sys_pipe(p, v, retval)
- struct proc *p;
- void *v;
- register_t *retval;
-{
- struct linux_sys_pipe_args /* {
- syscallarg(int *) pfds;
- } */ *uap = v;
- int error;
- int pfds[2];
-#ifdef __i386__
- int reg_edx = retval[1];
-#endif /* __i386__ */
-
- if ((error = sys_opipe(p, 0, retval))) {
-#ifdef __i386__
- retval[1] = reg_edx;
-#endif /* __i386__ */
- return error;
- }
-
- /* Assumes register_t is an int */
-
- pfds[0] = retval[0];
- pfds[1] = retval[1];
- if ((error = copyout(pfds, SCARG(uap, pfds), 2 * sizeof (int)))) {
-#ifdef __i386__
- retval[1] = reg_edx;
-#endif /* __i386__ */
- fdrelease(p, retval[0]);
- fdrelease(p, retval[1]);
- return error;
- }
-
- retval[0] = 0;
-#ifdef __i386__
- retval[1] = reg_edx;
-#endif /* __i386__ */
- return 0;
-}
-
-/*
* Alarm. This is a libc call which uses setitimer(2) in OpenBSD.
* Fiddle with the timers to make it work.
*/