PERFORCE change 117972 for review

Peter Wemm peter at FreeBSD.org
Thu Apr 12 18:46:09 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=117972

Change 117972 by peter at peter_overcee on 2007/04/12 18:45:43

	Add pad-free syscall stubs.  For now, they just wrap the old syscalls but
	with the reformatted args.  Doing it this way avoids breaking libc.
	See lib/libc/sys/mmap.c for an example of why the old way sucks.  It turns a
	6 arg syscall (which is an abi-compliant 6-arg max regparm call) into a bogus
	8-arg syscall (which is not abi-compliant for syscalls).  Args spill over onto
	the stack.

Affected files ...

.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_misc.c#45 edit
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_proto.h#45 edit
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_syscall.h#42 edit
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_syscalls.c#42 edit
.. //depot/projects/hammer/sys/compat/freebsd32/freebsd32_sysent.c#42 edit
.. //depot/projects/hammer/sys/compat/freebsd32/syscalls.master#46 edit
.. //depot/projects/hammer/sys/kern/init_sysent.c#58 edit
.. //depot/projects/hammer/sys/kern/sys_generic.c#30 edit
.. //depot/projects/hammer/sys/kern/syscalls.c#56 edit
.. //depot/projects/hammer/sys/kern/syscalls.master#57 edit
.. //depot/projects/hammer/sys/kern/systrace_args.c#2 edit
.. //depot/projects/hammer/sys/kern/vfs_syscalls.c#65 edit
.. //depot/projects/hammer/sys/sys/syscall.h#55 edit
.. //depot/projects/hammer/sys/sys/syscall.mk#55 edit
.. //depot/projects/hammer/sys/sys/sysproto.h#56 edit
.. //depot/projects/hammer/sys/vm/vm_mmap.c#40 edit

Differences ...

==== //depot/projects/hammer/sys/compat/freebsd32/freebsd32_misc.c#45 (text+ko) ====

@@ -483,6 +483,22 @@
 	return (mmap(td, &ap));
 }
 
+int
+freebsd32_new_mmap(struct thread *td, struct freebsd32_new_mmap_args *uap)
+{
+	struct freebsd32_mmap_args ap;
+
+	ap.addr = uap->addr;
+	ap.len = uap->len;
+	ap.prot = uap->prot;
+	ap.flags = uap->flags;
+	ap.fd = uap->fd;
+	ap.poslo = uap->poslo;
+	ap.poshi = uap->poshi;
+
+	return (freebsd32_mmap(td, &ap));
+}
+
 struct itimerval32 {
 	struct timeval32 it_interval;
 	struct timeval32 it_value;
@@ -1624,6 +1640,69 @@
 	return (ftruncate(td, &ap));
 }
 
+/* versions without the 'int pad' argument */
+int
+freebsd32_new_pread(struct thread *td, struct freebsd32_new_pread_args *uap)
+{
+	struct pread_args ap;
+
+	ap.fd = uap->fd;
+	ap.buf = uap->buf;
+	ap.nbyte = uap->nbyte;
+	ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32));
+	return (pread(td, &ap));
+}
+
+int
+freebsd32_new_pwrite(struct thread *td, struct freebsd32_new_pwrite_args *uap)
+{
+	struct pwrite_args ap;
+
+	ap.fd = uap->fd;
+	ap.buf = uap->buf;
+	ap.nbyte = uap->nbyte;
+	ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32));
+	return (pwrite(td, &ap));
+}
+
+int
+freebsd32_new_lseek(struct thread *td, struct freebsd32_new_lseek_args *uap)
+{
+	int error;
+	struct lseek_args ap;
+	off_t pos;
+
+	ap.fd = uap->fd;
+	ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32));
+	ap.whence = uap->whence;
+	error = lseek(td, &ap);
+	/* Expand the quad return into two parts for eax and edx */
+	pos = *(off_t *)(td->td_retval);
+	td->td_retval[0] = pos & 0xffffffff;	/* %eax */
+	td->td_retval[1] = pos >> 32;		/* %edx */
+	return error;
+}
+
+int
+freebsd32_new_truncate(struct thread *td, struct freebsd32_new_truncate_args *uap)
+{
+	struct truncate_args ap;
+
+	ap.path = uap->path;
+	ap.length = (uap->lengthlo | ((off_t)uap->lengthhi << 32));
+	return (truncate(td, &ap));
+}
+
+int
+freebsd32_new_ftruncate(struct thread *td, struct freebsd32_new_ftruncate_args *uap)
+{
+	struct ftruncate_args ap;
+
+	ap.fd = uap->fd;
+	ap.length = (uap->lengthlo | ((off_t)uap->lengthhi << 32));
+	return (ftruncate(td, &ap));
+}
+
 struct sf_hdtr32 {
 	uint32_t headers;
 	int hdr_cnt;

==== //depot/projects/hammer/sys/compat/freebsd32/freebsd32_proto.h#45 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.76 2006/12/20 19:39:10 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.88 2006/12/20 19:36:03 jkim Exp 
  */
 
@@ -322,6 +322,45 @@
 	char param_l_[PADL_(struct thr_param32 *)]; struct thr_param32 * param; char param_r_[PADR_(struct thr_param32 *)];
 	char param_size_l_[PADL_(int)]; int param_size; char param_size_r_[PADR_(int)];
 };
+struct freebsd32_new_pread_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char buf_l_[PADL_(void *)]; void * buf; char buf_r_[PADR_(void *)];
+	char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
+	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
+	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+};
+struct freebsd32_new_pwrite_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char buf_l_[PADL_(const void *)]; const void * buf; char buf_r_[PADR_(const void *)];
+	char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
+	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
+	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+};
+struct freebsd32_new_mmap_args {
+	char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)];
+	char len_l_[PADL_(size_t)]; size_t len; char len_r_[PADR_(size_t)];
+	char prot_l_[PADL_(int)]; int prot; char prot_r_[PADR_(int)];
+	char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char poslo_l_[PADL_(u_int32_t)]; u_int32_t poslo; char poslo_r_[PADR_(u_int32_t)];
+	char poshi_l_[PADL_(u_int32_t)]; u_int32_t poshi; char poshi_r_[PADR_(u_int32_t)];
+};
+struct freebsd32_new_lseek_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char offsetlo_l_[PADL_(u_int32_t)]; u_int32_t offsetlo; char offsetlo_r_[PADR_(u_int32_t)];
+	char offsethi_l_[PADL_(u_int32_t)]; u_int32_t offsethi; char offsethi_r_[PADR_(u_int32_t)];
+	char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
+};
+struct freebsd32_new_truncate_args {
+	char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+	char lengthlo_l_[PADL_(u_int32_t)]; u_int32_t lengthlo; char lengthlo_r_[PADR_(u_int32_t)];
+	char lengthhi_l_[PADL_(u_int32_t)]; u_int32_t lengthhi; char lengthhi_r_[PADR_(u_int32_t)];
+};
+struct freebsd32_new_ftruncate_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char lengthlo_l_[PADL_(u_int32_t)]; u_int32_t lengthlo; char lengthlo_r_[PADR_(u_int32_t)];
+	char lengthhi_l_[PADL_(u_int32_t)]; u_int32_t lengthhi; char lengthhi_r_[PADR_(u_int32_t)];
+};
 int	freebsd32_wait4(struct thread *, struct freebsd32_wait4_args *);
 int	freebsd32_recvmsg(struct thread *, struct freebsd32_recvmsg_args *);
 int	freebsd32_sendmsg(struct thread *, struct freebsd32_sendmsg_args *);
@@ -377,6 +416,12 @@
 int	freebsd32_thr_suspend(struct thread *, struct freebsd32_thr_suspend_args *);
 int	freebsd32_umtx_op(struct thread *, struct freebsd32_umtx_op_args *);
 int	freebsd32_thr_new(struct thread *, struct freebsd32_thr_new_args *);
+int	freebsd32_new_pread(struct thread *, struct freebsd32_new_pread_args *);
+int	freebsd32_new_pwrite(struct thread *, struct freebsd32_new_pwrite_args *);
+int	freebsd32_new_mmap(struct thread *, struct freebsd32_new_mmap_args *);
+int	freebsd32_new_lseek(struct thread *, struct freebsd32_new_lseek_args *);
+int	freebsd32_new_truncate(struct thread *, struct freebsd32_new_truncate_args *);
+int	freebsd32_new_ftruncate(struct thread *, struct freebsd32_new_ftruncate_args *);
 
 #ifdef COMPAT_43
 
@@ -521,6 +566,12 @@
 #define	FREEBSD32_SYS_AUE_freebsd32_thr_suspend	AUE_NULL
 #define	FREEBSD32_SYS_AUE_freebsd32_umtx_op	AUE_NULL
 #define	FREEBSD32_SYS_AUE_freebsd32_thr_new	AUE_NULL
+#define	FREEBSD32_SYS_AUE_freebsd32_new_pread	AUE_PREAD
+#define	FREEBSD32_SYS_AUE_freebsd32_new_pwrite	AUE_PWRITE
+#define	FREEBSD32_SYS_AUE_freebsd32_new_mmap	AUE_MMAP
+#define	FREEBSD32_SYS_AUE_freebsd32_new_lseek	AUE_LSEEK
+#define	FREEBSD32_SYS_AUE_freebsd32_new_truncate	AUE_TRUNCATE
+#define	FREEBSD32_SYS_AUE_freebsd32_new_ftruncate	AUE_FTRUNCATE
 
 #undef PAD_
 #undef PADL_

==== //depot/projects/hammer/sys/compat/freebsd32/freebsd32_syscall.h#42 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.74 2006/12/20 19:39:10 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.88 2006/12/20 19:36:03 jkim Exp 
  */
 
@@ -331,4 +331,10 @@
 #define	FREEBSD32_SYS_sctp_generic_sendmsg	472
 #define	FREEBSD32_SYS_sctp_generic_sendmsg_iov	473
 #define	FREEBSD32_SYS_sctp_generic_recvmsg	474
-#define	FREEBSD32_SYS_MAXSYSCALL	475
+#define	FREEBSD32_SYS_freebsd32_new_pread	475
+#define	FREEBSD32_SYS_freebsd32_new_pwrite	476
+#define	FREEBSD32_SYS_freebsd32_new_mmap	477
+#define	FREEBSD32_SYS_freebsd32_new_lseek	478
+#define	FREEBSD32_SYS_freebsd32_new_truncate	479
+#define	FREEBSD32_SYS_freebsd32_new_ftruncate	480
+#define	FREEBSD32_SYS_MAXSYSCALL	481

==== //depot/projects/hammer/sys/compat/freebsd32/freebsd32_syscalls.c#42 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call names.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.65 2006/12/20 19:39:10 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.88 2006/12/20 19:36:03 jkim Exp 
  */
 
@@ -482,4 +482,10 @@
 	"sctp_generic_sendmsg",			/* 472 = sctp_generic_sendmsg */
 	"sctp_generic_sendmsg_iov",			/* 473 = sctp_generic_sendmsg_iov */
 	"sctp_generic_recvmsg",			/* 474 = sctp_generic_recvmsg */
+	"freebsd32_new_pread",			/* 475 = freebsd32_new_pread */
+	"freebsd32_new_pwrite",			/* 476 = freebsd32_new_pwrite */
+	"freebsd32_new_mmap",			/* 477 = freebsd32_new_mmap */
+	"freebsd32_new_lseek",			/* 478 = freebsd32_new_lseek */
+	"freebsd32_new_truncate",			/* 479 = freebsd32_new_truncate */
+	"freebsd32_new_ftruncate",			/* 480 = freebsd32_new_ftruncate */
 };

==== //depot/projects/hammer/sys/compat/freebsd32/freebsd32_sysent.c#42 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_sysent.c,v 1.75 2006/12/20 19:39:10 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.88 2006/12/20 19:36:03 jkim Exp 
  */
 
@@ -507,4 +507,10 @@
 	{ AS(sctp_generic_sendmsg_args), (sy_call_t *)sctp_generic_sendmsg, AUE_NULL, NULL, 0, 0 },	/* 472 = sctp_generic_sendmsg */
 	{ AS(sctp_generic_sendmsg_iov_args), (sy_call_t *)sctp_generic_sendmsg_iov, AUE_NULL, NULL, 0, 0 },	/* 473 = sctp_generic_sendmsg_iov */
 	{ AS(sctp_generic_recvmsg_args), (sy_call_t *)sctp_generic_recvmsg, AUE_NULL, NULL, 0, 0 },	/* 474 = sctp_generic_recvmsg */
+	{ AS(freebsd32_new_pread_args), (sy_call_t *)freebsd32_new_pread, AUE_PREAD, NULL, 0, 0 },	/* 475 = freebsd32_new_pread */
+	{ AS(freebsd32_new_pwrite_args), (sy_call_t *)freebsd32_new_pwrite, AUE_PWRITE, NULL, 0, 0 },	/* 476 = freebsd32_new_pwrite */
+	{ AS(freebsd32_new_mmap_args), (sy_call_t *)freebsd32_new_mmap, AUE_MMAP, NULL, 0, 0 },	/* 477 = freebsd32_new_mmap */
+	{ AS(freebsd32_new_lseek_args), (sy_call_t *)freebsd32_new_lseek, AUE_LSEEK, NULL, 0, 0 },	/* 478 = freebsd32_new_lseek */
+	{ AS(freebsd32_new_truncate_args), (sy_call_t *)freebsd32_new_truncate, AUE_TRUNCATE, NULL, 0, 0 },	/* 479 = freebsd32_new_truncate */
+	{ AS(freebsd32_new_ftruncate_args), (sy_call_t *)freebsd32_new_ftruncate, AUE_FTRUNCATE, NULL, 0, 0 },	/* 480 = freebsd32_new_ftruncate */
 };

==== //depot/projects/hammer/sys/compat/freebsd32/syscalls.master#46 (text+ko) ====

@@ -781,3 +781,19 @@
 474	AUE_NULL	NOPROTO	{ int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
 				    struct sockaddr * from, __socklen_t *fromlenaddr, \
 				    struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+475	AUE_PREAD	STD	{ ssize_t freebsd32_new_pread(int fd, \
+				    void *buf,size_t nbyte, \
+				    u_int32_t offsetlo, u_int32_t offsethi); }
+476	AUE_PWRITE	STD	{ ssize_t freebsd32_new_pwrite(int fd, \
+				    const void *buf, size_t nbyte, \
+				    u_int32_t offsetlo, u_int32_t offsethi); }
+477	AUE_MMAP	STD 	{ caddr_t freebsd32_new_mmap(caddr_t addr, \
+				    size_t len, int prot, int flags, int fd, \
+				    u_int32_t poslo, u_int32_t poshi); }
+478	AUE_LSEEK	STD	{ off_t freebsd32_new_lseek(int fd, \
+				    u_int32_t offsetlo, u_int32_t offsethi, \
+				    int whence); }
+479	AUE_TRUNCATE	STD	{ int freebsd32_new_truncate(char *path, \
+				    u_int32_t lengthlo, u_int32_t lengthhi); }
+480	AUE_FTRUNCATE	STD	{ int freebsd32_new_ftruncate(int fd, \
+				    u_int32_t lengthlo, u_int32_t lengthhi); }

==== //depot/projects/hammer/sys/kern/init_sysent.c#58 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/init_sysent.c,v 1.228 2006/11/11 22:01:25 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -504,4 +504,10 @@
 	{ AS(sctp_generic_sendmsg_args), (sy_call_t *)sctp_generic_sendmsg, AUE_NULL, NULL, 0, 0 },	/* 472 = sctp_generic_sendmsg */
 	{ AS(sctp_generic_sendmsg_iov_args), (sy_call_t *)sctp_generic_sendmsg_iov, AUE_NULL, NULL, 0, 0 },	/* 473 = sctp_generic_sendmsg_iov */
 	{ AS(sctp_generic_recvmsg_args), (sy_call_t *)sctp_generic_recvmsg, AUE_NULL, NULL, 0, 0 },	/* 474 = sctp_generic_recvmsg */
+	{ AS(_new_pread_args), (sy_call_t *)_new_pread, AUE_PREAD, NULL, 0, 0 },	/* 475 = _new_pread */
+	{ AS(_new_pwrite_args), (sy_call_t *)_new_pwrite, AUE_PWRITE, NULL, 0, 0 },	/* 476 = _new_pwrite */
+	{ AS(_new_mmap_args), (sy_call_t *)_new_mmap, AUE_MMAP, NULL, 0, 0 },	/* 477 = _new_mmap */
+	{ AS(_new_lseek_args), (sy_call_t *)_new_lseek, AUE_LSEEK, NULL, 0, 0 },	/* 478 = _new_lseek */
+	{ AS(_new_truncate_args), (sy_call_t *)_new_truncate, AUE_TRUNCATE, NULL, 0, 0 },	/* 479 = _new_truncate */
+	{ AS(_new_ftruncate_args), (sy_call_t *)_new_ftruncate, AUE_FTRUNCATE, NULL, 0, 0 },	/* 480 = _new_ftruncate */
 };

==== //depot/projects/hammer/sys/kern/sys_generic.c#30 (text+ko) ====

@@ -144,6 +144,21 @@
 	return(error);
 }
 
+int
+_new_pread(td, uap)
+	struct thread *td;
+	struct _new_pread_args *uap;
+{
+	struct pread_args oargs;
+
+	oargs.fd = uap->fd;
+	oargs.buf = uap->buf;
+	oargs.nbyte = uap->nbyte;
+	oargs.pad = 0;
+	oargs.offset = uap->offset;
+	return (pread(td, &oargs));
+}
+
 /*
  * Scatter read system call.
  */
@@ -339,6 +354,21 @@
 	return(error);
 }
 
+int
+_new_pwrite(td, uap)
+	struct thread *td;
+	struct _new_pwrite_args *uap;
+{
+	struct pwrite_args oargs;
+
+	oargs.fd = uap->fd;
+	oargs.buf = uap->buf;
+	oargs.nbyte = uap->nbyte;
+	oargs.pad = 0;
+	oargs.offset = uap->offset;
+	return (pwrite(td, &oargs));
+}
+
 /*
  * Gather write system call.
  */

==== //depot/projects/hammer/sys/kern/syscalls.c#56 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call names.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/syscalls.c,v 1.212 2006/11/11 22:01:25 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -482,4 +482,10 @@
 	"sctp_generic_sendmsg",			/* 472 = sctp_generic_sendmsg */
 	"sctp_generic_sendmsg_iov",			/* 473 = sctp_generic_sendmsg_iov */
 	"sctp_generic_recvmsg",			/* 474 = sctp_generic_recvmsg */
+	"_new_pread",			/* 475 = _new_pread */
+	"_new_pwrite",			/* 476 = _new_pwrite */
+	"_new_mmap",			/* 477 = _new_mmap */
+	"_new_lseek",			/* 478 = _new_lseek */
+	"_new_truncate",			/* 479 = _new_truncate */
+	"_new_ftruncate",			/* 480 = _new_ftruncate */
 };

==== //depot/projects/hammer/sys/kern/syscalls.master#57 (text+ko) ====

@@ -835,5 +835,15 @@
 474     AUE_NULL        STD    { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
 				    struct sockaddr * from, __socklen_t *fromlenaddr, \
 				    struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+475	AUE_PREAD	STD	{ ssize_t _new_pread(int fd, void *buf, \
+				    size_t nbyte, off_t offset); }
+476	AUE_PWRITE	STD	{ ssize_t _new_pwrite(int fd, const void *buf, \
+				    size_t nbyte, off_t offset); }
+477	AUE_MMAP	STD	{ caddr_t _new_mmap(caddr_t addr, size_t len, \
+				    int prot, int flags, int fd, off_t pos); }
+478	AUE_LSEEK	STD	{ off_t _new_lseek(int fd, off_t offset, \
+				    int whence); }
+479	AUE_TRUNCATE	STD	{ int _new_truncate(char *path, off_t length); }
+480	AUE_FTRUNCATE	STD	{ int _new_ftruncate(int fd, off_t length); }
 ; Please copy any additions and changes to the following compatability tables:
 ; sys/compat/freebsd32/syscalls.master

==== //depot/projects/hammer/sys/kern/systrace_args.c#2 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call argument to DTrace register array converstion.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/systrace_args.c,v 1.12 2006/11/11 22:01:25 ru Exp $
+ * $FreeBSD$
  * This file is part of the DTrace syscall provider.
  */
 
@@ -2805,6 +2805,63 @@
 		*n_args = 7;
 		break;
 	}
+	/* _new_pread */
+	case 475: {
+		struct _new_pread_args *p = params;
+		iarg[0] = p->fd; /* int */
+		uarg[1] = (intptr_t) p->buf; /* void * */
+		uarg[2] = p->nbyte; /* size_t */
+		iarg[3] = p->offset; /* off_t */
+		*n_args = 4;
+		break;
+	}
+	/* _new_pwrite */
+	case 476: {
+		struct _new_pwrite_args *p = params;
+		iarg[0] = p->fd; /* int */
+		uarg[1] = (intptr_t) p->buf; /* const void * */
+		uarg[2] = p->nbyte; /* size_t */
+		iarg[3] = p->offset; /* off_t */
+		*n_args = 4;
+		break;
+	}
+	/* _new_mmap */
+	case 477: {
+		struct _new_mmap_args *p = params;
+		uarg[0] = (intptr_t) p->addr; /* caddr_t */
+		uarg[1] = p->len; /* size_t */
+		iarg[2] = p->prot; /* int */
+		iarg[3] = p->flags; /* int */
+		iarg[4] = p->fd; /* int */
+		iarg[5] = p->pos; /* off_t */
+		*n_args = 6;
+		break;
+	}
+	/* _new_lseek */
+	case 478: {
+		struct _new_lseek_args *p = params;
+		iarg[0] = p->fd; /* int */
+		iarg[1] = p->offset; /* off_t */
+		iarg[2] = p->whence; /* int */
+		*n_args = 3;
+		break;
+	}
+	/* _new_truncate */
+	case 479: {
+		struct _new_truncate_args *p = params;
+		uarg[0] = (intptr_t) p->path; /* char * */
+		iarg[1] = p->length; /* off_t */
+		*n_args = 2;
+		break;
+	}
+	/* _new_ftruncate */
+	case 480: {
+		struct _new_ftruncate_args *p = params;
+		iarg[0] = p->fd; /* int */
+		iarg[1] = p->length; /* off_t */
+		*n_args = 2;
+		break;
+	}
 	default:
 		*n_args = 0;
 		break;

==== //depot/projects/hammer/sys/kern/vfs_syscalls.c#65 (text+ko) ====

@@ -1788,16 +1788,29 @@
 		off_t offset;
 		int whence;
 	} */ nuap;
-	int error;
 
 	nuap.fd = uap->fd;
 	nuap.offset = uap->offset;
 	nuap.whence = uap->whence;
-	error = lseek(td, &nuap);
-	return (error);
+	return (lseek(td, &nuap));
 }
 #endif /* COMPAT_43 */
 
+/* Skip the 'pad' argument */
+int
+_new_lseek(td, uap)
+	struct thread *td;
+	register struct _new_lseek_args *uap;
+{
+	struct lseek_args ouap;
+
+	ouap.fd = uap->fd;
+	ouap.pad = 0;
+	ouap.offset = uap->offset;
+	ouap.whence = uap->whence;
+	return (lseek(td, &ouap));
+}
+
 /*
  * Check access permissions using passed credentials.
  */
@@ -3154,6 +3167,33 @@
 }
 #endif /* COMPAT_43 */
 
+/* Versions without the pad argument */
+int
+_new_truncate(td, uap)
+	struct thread *td;
+	register struct _new_truncate_args *uap;
+{
+	struct truncate_args ouap;
+
+	ouap.path = uap->path;
+	ouap.pad = 0;
+	ouap.length = uap->length;
+	return (truncate(td, &ouap));
+}
+
+int
+_new_ftruncate(td, uap)
+	struct thread *td;
+	register struct _new_ftruncate_args *uap;
+{
+	struct ftruncate_args ouap;
+
+	ouap.fd = uap->fd;
+	ouap.pad = 0;
+	ouap.length = uap->length;
+	return (ftruncate(td, &ouap));
+}
+
 /*
  * Sync an open file.
  */

==== //depot/projects/hammer/sys/sys/syscall.h#55 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/sys/syscall.h,v 1.209 2006/11/11 22:01:24 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -394,4 +394,10 @@
 #define	SYS_sctp_generic_sendmsg	472
 #define	SYS_sctp_generic_sendmsg_iov	473
 #define	SYS_sctp_generic_recvmsg	474
-#define	SYS_MAXSYSCALL	475
+#define	SYS__new_pread	475
+#define	SYS__new_pwrite	476
+#define	SYS__new_mmap	477
+#define	SYS__new_lseek	478
+#define	SYS__new_truncate	479
+#define	SYS__new_ftruncate	480
+#define	SYS_MAXSYSCALL	481

==== //depot/projects/hammer/sys/sys/syscall.mk#55 (text+ko) ====

@@ -1,6 +1,6 @@
 # FreeBSD system call names.
 # DO NOT EDIT-- this file is automatically generated.
-# $FreeBSD: src/sys/sys/syscall.mk,v 1.164 2006/11/11 22:01:24 ru Exp $
+# $FreeBSD$
 # created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
 MIASM =  \
 	syscall.o \
@@ -335,4 +335,10 @@
 	sctp_peeloff.o \
 	sctp_generic_sendmsg.o \
 	sctp_generic_sendmsg_iov.o \
-	sctp_generic_recvmsg.o
+	sctp_generic_recvmsg.o \
+	_new_pread.o \
+	_new_pwrite.o \
+	_new_mmap.o \
+	_new_lseek.o \
+	_new_truncate.o \
+	_new_ftruncate.o

==== //depot/projects/hammer/sys/sys/sysproto.h#56 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/sys/sysproto.h,v 1.213 2006/11/11 22:01:24 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -1482,6 +1482,39 @@
 	char sinfo_l_[PADL_(struct sctp_sndrcvinfo *)]; struct sctp_sndrcvinfo * sinfo; char sinfo_r_[PADR_(struct sctp_sndrcvinfo *)];
 	char msg_flags_l_[PADL_(int *)]; int * msg_flags; char msg_flags_r_[PADR_(int *)];
 };
+struct _new_pread_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char buf_l_[PADL_(void *)]; void * buf; char buf_r_[PADR_(void *)];
+	char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
+	char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)];
+};
+struct _new_pwrite_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char buf_l_[PADL_(const void *)]; const void * buf; char buf_r_[PADR_(const void *)];
+	char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
+	char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)];
+};
+struct _new_mmap_args {
+	char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)];
+	char len_l_[PADL_(size_t)]; size_t len; char len_r_[PADR_(size_t)];
+	char prot_l_[PADL_(int)]; int prot; char prot_r_[PADR_(int)];
+	char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char pos_l_[PADL_(off_t)]; off_t pos; char pos_r_[PADR_(off_t)];
+};
+struct _new_lseek_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)];
+	char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
+};
+struct _new_truncate_args {
+	char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+	char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)];
+};
+struct _new_ftruncate_args {
+	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+	char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)];
+};
 int	nosys(struct thread *, struct nosys_args *);
 void	sys_exit(struct thread *, struct sys_exit_args *);
 int	fork(struct thread *, struct fork_args *);
@@ -1814,6 +1847,12 @@
 int	sctp_generic_sendmsg(struct thread *, struct sctp_generic_sendmsg_args *);
 int	sctp_generic_sendmsg_iov(struct thread *, struct sctp_generic_sendmsg_iov_args *);
 int	sctp_generic_recvmsg(struct thread *, struct sctp_generic_recvmsg_args *);
+int	_new_pread(struct thread *, struct _new_pread_args *);
+int	_new_pwrite(struct thread *, struct _new_pwrite_args *);
+int	_new_mmap(struct thread *, struct _new_mmap_args *);
+int	_new_lseek(struct thread *, struct _new_lseek_args *);
+int	_new_truncate(struct thread *, struct _new_truncate_args *);
+int	_new_ftruncate(struct thread *, struct _new_ftruncate_args *);
 
 #ifdef COMPAT_43
 
@@ -2365,6 +2404,12 @@
 #define	SYS_AUE_sctp_generic_sendmsg	AUE_NULL
 #define	SYS_AUE_sctp_generic_sendmsg_iov	AUE_NULL
 #define	SYS_AUE_sctp_generic_recvmsg	AUE_NULL
+#define	SYS_AUE__new_pread	AUE_PREAD
+#define	SYS_AUE__new_pwrite	AUE_PWRITE
+#define	SYS_AUE__new_mmap	AUE_MMAP
+#define	SYS_AUE__new_lseek	AUE_LSEEK
+#define	SYS_AUE__new_truncate	AUE_TRUNCATE
+#define	SYS_AUE__new_ftruncate	AUE_FTRUNCATE
 
 #undef PAD_
 #undef PADL_

==== //depot/projects/hammer/sys/vm/vm_mmap.c#40 (text+ko) ====

@@ -392,6 +392,23 @@
 	return (error);
 }
 
+int
+_new_mmap(td, uap)
+	struct thread *td;
+	struct _new_mmap_args *uap;
+{
+	struct mmap_args oargs;
+
+	oargs.addr = uap->addr;
+	oargs.len = uap->len;
+	oargs.prot = uap->prot;
+	oargs.flags = uap->flags;
+	oargs.fd = uap->fd;
+	oargs.pad = 0;
+	oargs.pos = uap->pos;
+	return (mmap(td, &oargs));
+}
+
 #ifdef COMPAT_43
 #ifndef _SYS_SYSPROTO_H_
 struct ommap_args {


More information about the p4-projects mailing list