Index: lib/libc/amd64/sys/Makefile.inc =========================================================================== --- lib/libc/amd64/sys/Makefile.inc 2007/07/01 19:30:52 #4 +++ lib/libc/amd64/sys/Makefile.inc 2007/07/01 19:30:52 @@ -7,8 +7,10 @@ reboot.S sbrk.S setlogin.S sigreturn.S # Don't generate default code for these syscalls: -NOASM= break.o exit.o ftruncate.o getdomainname.o getlogin.o \ - lseek.o mmap.o openbsd_poll.o pread.o \ - pwrite.o setdomainname.o sstk.o truncate.o uname.o vfork.o yield.o +NOASM= break.o exit.o getdomainname.o getlogin.o openbsd_poll.o \ + setdomainname.o sstk.o uname.o vfork.o yield.o PSEUDO= _getlogin.o _exit.o +.if !defined(WITHOUT_SYSCALL_COMPAT) +PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o +.endif Index: lib/libc/arm/sys/Makefile.inc =========================================================================== --- lib/libc/arm/sys/Makefile.inc 2007/07/01 19:30:52 #2 +++ lib/libc/arm/sys/Makefile.inc 2007/07/01 19:30:52 @@ -3,7 +3,10 @@ MDASM= Ovfork.S brk.S cerror.S pipe.S ptrace.S sbrk.S shmat.S sigreturn.S syscall.S # Don't generate default code for these syscalls: -NOASM= break.o exit.o ftruncate.o getdomainname.o getlogin.o \ - lseek.o mmap.o openbsd_poll.o pread.o \ - pwrite.o setdomainname.o sstk.o truncate.o uname.o vfork.o yield.o +NOASM= break.o exit.o getdomainname.o getlogin.o openbsd_poll.o \ + setdomainname.o sstk.o uname.o vfork.o yield.o + PSEUDO= _exit.o _getlogin.o +.if !defined(WITHOUT_SYSCALL_COMPAT) +PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o +.endif Index: lib/libc/gen/Makefile.inc =========================================================================== --- lib/libc/gen/Makefile.inc 2007/07/01 19:30:52 #48 +++ lib/libc/gen/Makefile.inc 2007/07/01 19:30:52 @@ -4,7 +4,8 @@ # machine-independent gen sources .PATH: ${.CURDIR}/${MACHINE_ARCH}/gen ${.CURDIR}/gen -SRCS+= __xuname.c _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \ +SRCS+= __getosreldate.c __xuname.c \ + _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \ alarm.c arc4random.c assert.c basename.c check_utility_compat.c \ clock.c closedir.c confstr.c \ crypt.c ctermid.c daemon.c devname.c dirname.c disklabel.c \ Index: lib/libc/gen/__getosreldate.c =========================================================================== *** /dev/null Sun Jul 1 19:22:01 2007 --- lib/libc/gen/__getosreldate.c Sun Jul 1 19:30:59 2007 *************** *** 0 **** --- 1,61 ---- + /*- + * Copyright (c) 2007 Peter Wemm + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + + #include + __FBSDID("$FreeBSD$"); + + #include + #include + + /* + * This is private to libc. It is intended for wrapping syscall stubs in order + * to avoid having to put SIGSYS signal handlers in place to test for presence + * of new syscalls. This caches the result in order to be as quick as possible. + * + * Use getosreldate(3) for public use as it respects the $OSVERSION environment + * variable. + */ + + int + __getosreldate(void) + { + static int osreldate; + size_t len; + int oid[2]; + int error, osrel; + + if (osreldate != 0) + return (osreldate); + + oid[0] = CTL_KERN; + oid[1] = KERN_OSRELDATE; + osrel = 0; + len = sizeof(osrel); + error = sysctl(oid, 2, &osrel, &len, NULL, 0); + if (error == 0 && osrel > 0 && len == sizeof(osrel)) + osreldate = osrel; + return (osreldate); + } Index: lib/libc/i386/sys/Makefile.inc =========================================================================== --- lib/libc/i386/sys/Makefile.inc 2007/07/01 19:30:52 #9 +++ lib/libc/i386/sys/Makefile.inc 2007/07/01 19:30:52 @@ -12,11 +12,13 @@ reboot.S sbrk.S setlogin.S sigreturn.S syscall.S # Don't generate default code for these syscalls: -NOASM= break.o exit.o ftruncate.o getdomainname.o getlogin.o \ - lseek.o mmap.o openbsd_poll.o pread.o \ - pwrite.o setdomainname.o sstk.o truncate.o uname.o vfork.o yield.o +NOASM= break.o exit.o getdomainname.o getlogin.o openbsd_poll.o \ + setdomainname.o sstk.o uname.o vfork.o yield.o PSEUDO= _getlogin.o _exit.o +.if !defined(WITHOUT_SYSCALL_COMPAT) +PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o +.endif MAN+= i386_get_ioperm.2 i386_get_ldt.2 i386_vm86.2 MAN+= i386_set_watch.3 Index: lib/libc/ia64/sys/Makefile.inc =========================================================================== --- lib/libc/ia64/sys/Makefile.inc 2007/07/01 19:30:52 #5 +++ lib/libc/ia64/sys/Makefile.inc 2007/07/01 19:30:52 @@ -4,8 +4,10 @@ sbrk.S setlogin.S sigreturn.S swapcontext.S # Don't generate default code for these syscalls: -NOASM= break.o exit.o ftruncate.o getdomainname.o getlogin.o \ - lseek.o mmap.o openbsd_poll.o pread.o \ - pwrite.o setdomainname.o sstk.o truncate.o uname.o vfork.o yield.o +NOASM= break.o exit.o getdomainname.o getlogin.o openbsd_poll.o \ + setdomainname.o sstk.o uname.o vfork.o yield.o PSEUDO= _getlogin.o _exit.o +.if !defined(WITHOUT_SYSCALL_COMPAT) +PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o +.endif Index: lib/libc/include/libc_private.h =========================================================================== --- lib/libc/include/libc_private.h 2007/07/01 19:30:52 #11 +++ lib/libc/include/libc_private.h 2007/07/01 19:30:52 @@ -169,4 +169,27 @@ */ extern void (*__cleanup)(void); +/* + * Get kern.osreldate to detect ABI revisions. Explicitly + * ignores value of $OSVERSION and caches result. Prototypes + * for the wrapped "new" pad-less syscalls are here for now. + */ +extern int __getosreldate(void); +#include +/* Without pad */ +extern __off_t __sys_lseek(int, __off_t, int); +extern int __sys_ftruncate(int, __off_t); +extern int __sys_truncate(const char *, __off_t); +extern __ssize_t __sys_pread(int, void *, __size_t, __off_t); +extern __ssize_t __sys_pwrite(int, const void *, __size_t, __off_t); +extern void * __sys_mmap(void *, __size_t, int, int, int, __off_t); + +/* With pad */ +extern __off_t __sys_freebsd6_lseek(int, int, __off_t, int); +extern int __sys_freebsd6_ftruncate(int, int, __off_t); +extern int __sys_freebsd6_truncate(const char *, int, __off_t); +extern __ssize_t __sys_freebsd6_pread(int, void *, __size_t, int, __off_t); +extern __ssize_t __sys_freebsd6_pwrite(int, const void *, __size_t, int, __off_t); +extern void * __sys_freebsd6_mmap(void *, __size_t, int, int, int, int, __off_t); + #endif /* _LIBC_PRIVATE_H_ */ Index: lib/libc/powerpc/sys/Makefile.inc =========================================================================== --- lib/libc/powerpc/sys/Makefile.inc 2007/07/01 19:30:52 #2 +++ lib/libc/powerpc/sys/Makefile.inc 2007/07/01 19:30:52 @@ -3,9 +3,10 @@ MDASM+= brk.S cerror.S exect.S pipe.S ptrace.S sbrk.S setlogin.S # Don't generate default code for these syscalls: -NOASM= break.o exit.o ftruncate.o getdomainname.o getlogin.o \ - lseek.o mmap.o openbsd_poll.o pread.o \ - pwrite.o setdomainname.o sstk.o truncate.o uname.o yield.o +NOASM= break.o exit.o getdomainname.o getlogin.o openbsd_poll.o \ + setdomainname.o sstk.o uname.o yield.o PSEUDO= _getlogin.o _exit.o - +.if !defined(WITHOUT_SYSCALL_COMPAT) +PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o +.endif Index: lib/libc/sparc64/sys/Makefile.inc =========================================================================== --- lib/libc/sparc64/sys/Makefile.inc 2007/07/01 19:30:52 #10 +++ lib/libc/sparc64/sys/Makefile.inc 2007/07/01 19:30:52 @@ -18,9 +18,10 @@ MDASM+= brk.S cerror.S exect.S pipe.S ptrace.S sbrk.S setlogin.S sigaction.S # Don't generate default code for these syscalls: -NOASM= break.o exit.o ftruncate.o getdomainname.o getlogin.o \ - lseek.o mmap.o openbsd_poll.o pread.o \ - pwrite.o setdomainname.o sstk.o truncate.o uname.o yield.o +NOASM= break.o exit.o getdomainname.o getlogin.o openbsd_poll.o \ + setdomainname.o sstk.o uname.o yield.o PSEUDO= _getlogin.o _exit.o - +.if !defined(WITHOUT_SYSCALL_COMPAT) +PSEUDO+= _pread.o _pwrite.o _lseek.o _mmap.o _ftruncate.o _truncate.o +.endif Index: lib/libc/sys/Makefile.inc =========================================================================== --- lib/libc/sys/Makefile.inc 2007/07/01 19:30:52 #37 +++ lib/libc/sys/Makefile.inc 2007/07/01 19:30:52 @@ -18,8 +18,10 @@ .endif # Sources common to both syscall interfaces: -SRCS+= ftruncate.c lseek.c mmap.c pread.c pwrite.c stack_protector.c \ - truncate.c __error.c +SRCS+= stack_protector.c __error.c +.if !defined(WITHOUT_SYSCALL_COMPAT) +SRCS+= ftruncate.c lseek.c mmap.c pread.c pwrite.c truncate.c +.endif # Add machine dependent asm sources: SRCS+=${MDASM} Index: lib/libc/sys/ftruncate.c =========================================================================== --- lib/libc/sys/ftruncate.c 2007/07/01 19:30:52 #3 +++ lib/libc/sys/ftruncate.c 2007/07/01 19:30:52 @@ -36,6 +36,7 @@ #include #include #include +#include "libc_private.h" /* * This function provides 64-bit offset padding that @@ -47,5 +48,8 @@ off_t length; { - return(__syscall((quad_t)SYS_ftruncate, fd, 0, length)); + if (__getosreldate() >= 700049) + return(__sys_ftruncate(fd, length)); + else + return(__sys_freebsd6_ftruncate(fd, 0, length)); } Index: lib/libc/sys/lseek.c =========================================================================== --- lib/libc/sys/lseek.c 2007/07/01 19:30:52 #3 +++ lib/libc/sys/lseek.c 2007/07/01 19:30:52 @@ -36,6 +36,7 @@ #include #include #include +#include "libc_private.h" /* * This function provides 64-bit offset padding that @@ -47,5 +48,9 @@ off_t offset; int whence; { - return(__syscall((quad_t)SYS_lseek, fd, 0, offset, whence)); + + if (__getosreldate() >= 700049) + return(__sys_lseek(fd, offset, whence)); + else + return(__sys_freebsd6_lseek(fd, 0, offset, whence)); } Index: lib/libc/sys/mmap.c =========================================================================== --- lib/libc/sys/mmap.c 2007/07/01 19:30:52 #4 +++ lib/libc/sys/mmap.c 2007/07/01 19:30:52 @@ -37,6 +37,7 @@ #include #include #include +#include "libc_private.h" /* * This function provides 64-bit offset padding that @@ -52,6 +53,9 @@ off_t offset; { - return ((void *)(intptr_t)__syscall((quad_t)SYS_mmap, addr, len, prot, - flags, fd, 0, offset)); + if (__getosreldate() >= 700049) + return (__sys_mmap(addr, len, prot, flags, fd, offset)); + else + + return (__sys_freebsd6_mmap(addr, len, prot, flags, fd, 0, offset)); } Index: lib/libc/sys/pread.c =========================================================================== --- lib/libc/sys/pread.c 2007/07/01 19:30:52 #3 +++ lib/libc/sys/pread.c 2007/07/01 19:30:52 @@ -36,6 +36,7 @@ #include #include #include +#include "libc_private.h" /* * This function provides 64-bit offset padding that @@ -48,5 +49,9 @@ size_t nbyte; off_t offset; { - return ((ssize_t)__syscall((quad_t)SYS_pread, fd, buf, nbyte, 0, offset)); + + if (__getosreldate() >= 700049) + return (__sys_pread(fd, buf, nbyte, offset)); + else + return (__sys_freebsd6_pread(fd, buf, nbyte, 0, offset)); } Index: lib/libc/sys/pwrite.c =========================================================================== --- lib/libc/sys/pwrite.c 2007/07/01 19:30:52 #3 +++ lib/libc/sys/pwrite.c 2007/07/01 19:30:52 @@ -36,6 +36,7 @@ #include #include #include +#include "libc_private.h" /* * This function provides 64-bit offset padding that @@ -48,5 +49,8 @@ size_t nbyte; off_t offset; { - return ((ssize_t)__syscall((quad_t)SYS_pwrite, fd, buf, nbyte, 0, offset)); + if (__getosreldate() >= 700049) + return (__sys_pwrite(fd, buf, nbyte, offset)); + else + return (__sys_freebsd6_pwrite(fd, buf, nbyte, 0, offset)); } Index: lib/libc/sys/truncate.c =========================================================================== --- lib/libc/sys/truncate.c 2007/07/01 19:30:52 #3 +++ lib/libc/sys/truncate.c 2007/07/01 19:30:52 @@ -35,8 +35,8 @@ #include #include - #include +#include "libc_private.h" /* * This function provides 64-bit offset padding that @@ -48,5 +48,8 @@ off_t length; { - return(__syscall((quad_t)SYS_truncate, path, 0, length)); + if (__getosreldate() >= 700049) + return(__sys_truncate(path, length)); + else + return(__sys_freebsd6_truncate(path, 0, length)); } Index: sys/compat/freebsd32/freebsd32_misc.c =========================================================================== --- sys/compat/freebsd32/freebsd32_misc.c 2007/07/01 19:30:52 #55 +++ sys/compat/freebsd32/freebsd32_misc.c 2007/07/01 19:30:52 @@ -475,6 +475,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; @@ -1616,6 +1632,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; Index: sys/compat/freebsd32/freebsd32_proto.h =========================================================================== --- sys/compat/freebsd32/freebsd32_proto.h 2007/07/01 19:30:52 #66 +++ sys/compat/freebsd32/freebsd32_proto.h 2007/07/01 19:30:52 @@ -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_ Index: sys/compat/freebsd32/freebsd32_syscall.h =========================================================================== --- sys/compat/freebsd32/freebsd32_syscall.h 2007/07/01 19:30:52 #64 +++ sys/compat/freebsd32/freebsd32_syscall.h 2007/07/01 19:30:52 @@ -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 Index: sys/compat/freebsd32/freebsd32_syscalls.c =========================================================================== --- sys/compat/freebsd32/freebsd32_syscalls.c 2007/07/01 19:30:52 #64 +++ sys/compat/freebsd32/freebsd32_syscalls.c 2007/07/01 19:30:52 @@ -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 */ }; Index: sys/compat/freebsd32/freebsd32_sysent.c =========================================================================== --- sys/compat/freebsd32/freebsd32_sysent.c 2007/07/01 19:30:52 #64 +++ sys/compat/freebsd32/freebsd32_sysent.c 2007/07/01 19:30:52 @@ -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 */ }; Index: sys/compat/freebsd32/syscalls.master =========================================================================== --- sys/compat/freebsd32/syscalls.master 2007/07/01 19:30:52 #66 +++ sys/compat/freebsd32/syscalls.master 2007/07/01 19:30:52 @@ -778,3 +778,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); } Index: sys/kern/init_sysent.c =========================================================================== --- sys/kern/init_sysent.c 2007/07/01 19:30:52 #126 +++ sys/kern/init_sysent.c 2007/07/01 19:30:52 @@ -27,6 +27,12 @@ #define compat4(n, name) 0, (sy_call_t *)nosys #endif +#ifdef COMPAT_FREEBSD6 +#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name) +#else +#define compat6(n, name) 0, (sy_call_t *)nosys +#endif + /* The casts are bogus but will do for now. */ struct sysent sysent[] = { { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 0 = syscall */ @@ -202,8 +208,8 @@ { AS(msgsys_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0 }, /* 170 = msgsys */ { AS(shmsys_args), (sy_call_t *)lkmressys, AUE_NULL, NULL, 0, 0 }, /* 171 = shmsys */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 172 = nosys */ - { AS(pread_args), (sy_call_t *)pread, AUE_PREAD, NULL, 0, 0 }, /* 173 = pread */ - { AS(pwrite_args), (sy_call_t *)pwrite, AUE_PWRITE, NULL, 0, 0 }, /* 174 = pwrite */ + { compat6(AS(freebsd6_pread_args),pread), AUE_PREAD, NULL, 0, 0 }, /* 173 = old pread */ + { compat6(AS(freebsd6_pwrite_args),pwrite), AUE_PWRITE, NULL, 0, 0 }, /* 174 = old pwrite */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 175 = nosys */ { AS(ntp_adjtime_args), (sy_call_t *)ntp_adjtime, AUE_NTP_ADJTIME, NULL, 0, 0 }, /* 176 = ntp_adjtime */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 177 = sfork */ @@ -226,11 +232,11 @@ { AS(__getrlimit_args), (sy_call_t *)getrlimit, AUE_GETRLIMIT, NULL, 0, 0 }, /* 194 = getrlimit */ { AS(__setrlimit_args), (sy_call_t *)setrlimit, AUE_SETRLIMIT, NULL, 0, 0 }, /* 195 = setrlimit */ { AS(getdirentries_args), (sy_call_t *)getdirentries, AUE_GETDIRENTRIES, NULL, 0, 0 }, /* 196 = getdirentries */ - { AS(mmap_args), (sy_call_t *)mmap, AUE_MMAP, NULL, 0, 0 }, /* 197 = mmap */ + { compat6(AS(freebsd6_mmap_args),mmap), AUE_MMAP, NULL, 0, 0 }, /* 197 = old mmap */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 198 = __syscall */ - { AS(lseek_args), (sy_call_t *)lseek, AUE_LSEEK, NULL, 0, 0 }, /* 199 = lseek */ - { AS(truncate_args), (sy_call_t *)truncate, AUE_TRUNCATE, NULL, 0, 0 }, /* 200 = truncate */ - { AS(ftruncate_args), (sy_call_t *)ftruncate, AUE_FTRUNCATE, NULL, 0, 0 }, /* 201 = ftruncate */ + { compat6(AS(freebsd6_lseek_args),lseek), AUE_LSEEK, NULL, 0, 0 }, /* 199 = old lseek */ + { compat6(AS(freebsd6_truncate_args),truncate), AUE_TRUNCATE, NULL, 0, 0 }, /* 200 = old truncate */ + { compat6(AS(freebsd6_ftruncate_args),ftruncate), AUE_FTRUNCATE, NULL, 0, 0 }, /* 201 = old ftruncate */ { AS(sysctl_args), (sy_call_t *)__sysctl, AUE_SYSCTL, NULL, 0, 0 }, /* 202 = __sysctl */ { AS(mlock_args), (sy_call_t *)mlock, AUE_MLOCK, NULL, 0, 0 }, /* 203 = mlock */ { AS(munlock_args), (sy_call_t *)munlock, AUE_MUNLOCK, NULL, 0, 0 }, /* 204 = munlock */ @@ -504,4 +510,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(pread_args), (sy_call_t *)pread, AUE_PREAD, NULL, 0, 0 }, /* 475 = pread */ + { AS(pwrite_args), (sy_call_t *)pwrite, AUE_PWRITE, NULL, 0, 0 }, /* 476 = pwrite */ + { AS(mmap_args), (sy_call_t *)mmap, AUE_MMAP, NULL, 0, 0 }, /* 477 = mmap */ + { AS(lseek_args), (sy_call_t *)lseek, AUE_LSEEK, NULL, 0, 0 }, /* 478 = lseek */ + { AS(truncate_args), (sy_call_t *)truncate, AUE_TRUNCATE, NULL, 0, 0 }, /* 479 = truncate */ + { AS(ftruncate_args), (sy_call_t *)ftruncate, AUE_FTRUNCATE, NULL, 0, 0 }, /* 480 = ftruncate */ }; Index: sys/kern/makesyscalls.sh =========================================================================== --- sys/kern/makesyscalls.sh 2007/07/01 19:30:52 #24 +++ sys/kern/makesyscalls.sh 2007/07/01 19:30:52 @@ -6,6 +6,7 @@ # name of compat options: compat=COMPAT_43 +compat6=COMPAT_FREEBSD6 compat4=COMPAT_FREEBSD4 # output files: @@ -27,14 +28,16 @@ syscompatdcl="sysent.compatdcl.$$" syscompat4="sysent.compat4.$$" syscompat4dcl="sysent.compat4dcl.$$" +syscompat6="sysent.compat6.$$" +syscompat6dcl="sysent.compat6dcl.$$" sysent="sysent.switch.$$" sysinc="sysinc.switch.$$" sysarg="sysarg.switch.$$" sysprotoend="sysprotoend.$$" -trap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $sysent $sysinc $sysarg $sysprotoend" 0 +trap "rm $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend" 0 -touch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $sysent $sysinc $sysarg $sysprotoend +touch $sysaue $sysdcl $syscompat $syscompatdcl $syscompat4 $syscompat4dcl $syscompat6 $syscompat6dcl $sysent $sysinc $sysarg $sysprotoend case $# in 0) echo "usage: $0 input-file " 1>&2 @@ -69,6 +72,8 @@ syscompatdcl = \"$syscompatdcl\" syscompat4 = \"$syscompat4\" syscompat4dcl = \"$syscompat4dcl\" + syscompat6 = \"$syscompat6\" + syscompat6dcl = \"$syscompat6dcl\" sysent = \"$sysent\" syssw = \"$syssw\" sysinc = \"$sysinc\" @@ -79,6 +84,7 @@ systrace = \"$systrace\" compat = \"$compat\" compat4 = \"$compat4\" + compat6 = \"$compat6\" syscallprefix = \"$syscallprefix\" switchname = \"$switchname\" namesname = \"$namesname\" @@ -95,6 +101,7 @@ printf "\n#ifdef %s\n\n", compat > syscompat printf "\n#ifdef %s\n\n", compat4 > syscompat4 + printf "\n#ifdef %s\n\n", compat6 > syscompat6 printf "/*\n * System call names.\n *\n" > sysnames printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames @@ -167,6 +174,7 @@ print > sysarg print > syscompat print > syscompat4 + print > syscompat6 print > sysnames savesyscall = syscall next @@ -177,6 +185,7 @@ print > sysarg print > syscompat print > syscompat4 + print > syscompat6 print > sysnames syscall = savesyscall next @@ -187,6 +196,7 @@ print > sysarg print > syscompat print > syscompat4 + print > syscompat6 print > sysnames next } @@ -255,6 +265,8 @@ argalias = "o" argalias if ($3 == "COMPAT4") argalias = "freebsd4_" argalias + if ($3 == "COMPAT6") + argalias = "freebsd6_" argalias } f++ @@ -377,7 +389,7 @@ syscall++ next } - $3 == "COMPAT" || $3 == "COMPAT4" || $3 == "CPT_NOA" { + $3 == "COMPAT" || $3 == "COMPAT4" || $3 == "COMPAT6" || $3 == "CPT_NOA" { if ($3 == "COMPAT" || $3 == "CPT_NOA") { ncompat++ out = syscompat @@ -390,6 +402,12 @@ outdcl = syscompat4dcl wrap = "compat4" prefix = "freebsd4_" + } else if ($3 == "COMPAT6") { + ncompat6++ + out = syscompat6 + outdcl = syscompat6dcl + wrap = "compat6" + prefix = "freebsd6_" } parseline() if (argc != 0 && $3 != "CPT_NOA") { @@ -412,10 +430,16 @@ align_sysent_comment(8 + 9 + \ length(argssize) + 1 + length(funcname) + length(auditev) + 4) printf("/* %d = old %s */\n", syscall, funcalias) > sysent - printf("\t\"old.%s\",\t\t/* %d = old %s */\n", - funcalias, syscall, funcalias) > sysnames - printf("\t\t\t\t/* %d is old %s */\n", - syscall, funcalias) > syshdr + printf("\t\"%s.%s\",\t\t/* %d = old %s */\n", + wrap, funcalias, syscall, funcalias) > sysnames + if ($3 == "COMPAT" || $3 == "CPT_NOA") { + printf("\t\t\t\t/* %d is old %s */\n", + syscall, funcalias) > syshdr + } else { + printf("#define\t%s%s%s\t%d\n", syscallprefix, + prefix, funcalias, syscall) > syshdr + printf(" \\\n\t%s%s.o", prefix, funcalias) > sysmk + } syscall++ next } @@ -462,7 +486,7 @@ END { printf "\n#define AS(name) (sizeof(struct name) / sizeof(register_t))\n" > sysinc - if (ncompat != 0 || ncompat4 != 0) + if (ncompat != 0 || ncompat4 != 0 || ncompat6 != 0) printf "#include \"opt_compat.h\"\n\n" > syssw printf "#include \\n" > syssw @@ -482,9 +506,17 @@ printf "#endif\n" > sysinc } + if (ncompat6 != 0) { + printf "\n#ifdef %s\n", compat6 > sysinc + printf "#define compat6(n, name) n, (sy_call_t *)__CONCAT(freebsd6_,name)\n" > sysinc + printf "#else\n" > sysinc + printf "#define compat6(n, name) 0, (sy_call_t *)nosys\n" > sysinc + printf "#endif\n" > sysinc + } + printf("\n#endif /* %s */\n\n", compat) > syscompatdcl - printf("\n#endif /* %s */\n\n", compat4) > syscompat4dcl + printf("\n#endif /* %s */\n\n", compat6) > syscompat6dcl printf("\n#undef PAD_\n") > sysprotoend printf("#undef PADL_\n") > sysprotoend @@ -503,5 +535,6 @@ cat $sysarg $sysdcl \ $syscompat $syscompatdcl \ $syscompat4 $syscompat4dcl \ + $syscompat6 $syscompat6dcl \ $sysaue $sysprotoend > $sysproto Index: sys/kern/sys_generic.c =========================================================================== --- sys/kern/sys_generic.c 2007/07/01 19:30:52 #78 +++ sys/kern/sys_generic.c 2007/07/01 19:30:52 @@ -142,6 +142,22 @@ return(error); } +#ifdef COMPAT_FREEBSD6 +int +freebsd6_pread(td, uap) + struct thread *td; + struct freebsd6_pread_args *uap; +{ + struct pread_args oargs; + + oargs.fd = uap->fd; + oargs.buf = uap->buf; + oargs.nbyte = uap->nbyte; + oargs.offset = uap->offset; + return (pread(td, &oargs)); +} +#endif + /* * Scatter read system call. */ @@ -337,6 +353,22 @@ return(error); } +#ifdef COMPAT_FREEBSD6 +int +freebsd6_pwrite(td, uap) + struct thread *td; + struct freebsd6_pwrite_args *uap; +{ + struct pwrite_args oargs; + + oargs.fd = uap->fd; + oargs.buf = uap->buf; + oargs.nbyte = uap->nbyte; + oargs.offset = uap->offset; + return (pwrite(td, &oargs)); +} +#endif + /* * Gather write system call. */ Index: sys/kern/syscalls.c =========================================================================== --- sys/kern/syscalls.c 2007/07/01 19:30:52 #122 +++ sys/kern/syscalls.c 2007/07/01 19:30:52 @@ -15,7 +15,7 @@ "open", /* 5 = open */ "close", /* 6 = close */ "wait4", /* 7 = wait4 */ - "old.creat", /* 8 = old creat */ + "compat.creat", /* 8 = old creat */ "link", /* 9 = link */ "unlink", /* 10 = unlink */ "obs_execv", /* 11 = obsolete execv */ @@ -25,8 +25,8 @@ "chmod", /* 15 = chmod */ "chown", /* 16 = chown */ "break", /* 17 = break */ - "old.getfsstat", /* 18 = old getfsstat */ - "old.lseek", /* 19 = old lseek */ + "compat4.getfsstat", /* 18 = old getfsstat */ + "compat.lseek", /* 19 = old lseek */ "getpid", /* 20 = getpid */ "mount", /* 21 = mount */ "unmount", /* 22 = unmount */ @@ -45,21 +45,21 @@ "fchflags", /* 35 = fchflags */ "sync", /* 36 = sync */ "kill", /* 37 = kill */ - "old.stat", /* 38 = old stat */ + "compat.stat", /* 38 = old stat */ "getppid", /* 39 = getppid */ - "old.lstat", /* 40 = old lstat */ + "compat.lstat", /* 40 = old lstat */ "dup", /* 41 = dup */ "pipe", /* 42 = pipe */ "getegid", /* 43 = getegid */ "profil", /* 44 = profil */ "ktrace", /* 45 = ktrace */ - "old.sigaction", /* 46 = old sigaction */ + "compat.sigaction", /* 46 = old sigaction */ "getgid", /* 47 = getgid */ - "old.sigprocmask", /* 48 = old sigprocmask */ + "compat.sigprocmask", /* 48 = old sigprocmask */ "getlogin", /* 49 = getlogin */ "setlogin", /* 50 = setlogin */ "acct", /* 51 = acct */ - "old.sigpending", /* 52 = old sigpending */ + "compat.sigpending", /* 52 = old sigpending */ "sigaltstack", /* 53 = sigaltstack */ "ioctl", /* 54 = ioctl */ "reboot", /* 55 = reboot */ @@ -69,16 +69,16 @@ "execve", /* 59 = execve */ "umask", /* 60 = umask */ "chroot", /* 61 = chroot */ - "old.fstat", /* 62 = old fstat */ - "old.getkerninfo", /* 63 = old getkerninfo */ - "old.getpagesize", /* 64 = old getpagesize */ + "compat.fstat", /* 62 = old fstat */ + "compat.getkerninfo", /* 63 = old getkerninfo */ + "compat.getpagesize", /* 64 = old getpagesize */ "msync", /* 65 = msync */ "vfork", /* 66 = vfork */ "obs_vread", /* 67 = obsolete vread */ "obs_vwrite", /* 68 = obsolete vwrite */ "sbrk", /* 69 = sbrk */ "sstk", /* 70 = sstk */ - "old.mmap", /* 71 = old mmap */ + "compat.mmap", /* 71 = old mmap */ "vadvise", /* 72 = vadvise */ "munmap", /* 73 = munmap */ "mprotect", /* 74 = mprotect */ @@ -91,11 +91,11 @@ "getpgrp", /* 81 = getpgrp */ "setpgid", /* 82 = setpgid */ "setitimer", /* 83 = setitimer */ - "old.wait", /* 84 = old wait */ + "compat.wait", /* 84 = old wait */ "swapon", /* 85 = swapon */ "getitimer", /* 86 = getitimer */ - "old.gethostname", /* 87 = old gethostname */ - "old.sethostname", /* 88 = old sethostname */ + "compat.gethostname", /* 87 = old gethostname */ + "compat.sethostname", /* 88 = old sethostname */ "getdtablesize", /* 89 = getdtablesize */ "dup2", /* 90 = dup2 */ "#91", /* 91 = getdopt */ @@ -106,22 +106,22 @@ "setpriority", /* 96 = setpriority */ "socket", /* 97 = socket */ "connect", /* 98 = connect */ - "old.accept", /* 99 = old accept */ + "compat.accept", /* 99 = old accept */ "getpriority", /* 100 = getpriority */ - "old.send", /* 101 = old send */ - "old.recv", /* 102 = old recv */ - "old.sigreturn", /* 103 = old sigreturn */ + "compat.send", /* 101 = old send */ + "compat.recv", /* 102 = old recv */ + "compat.sigreturn", /* 103 = old sigreturn */ "bind", /* 104 = bind */ "setsockopt", /* 105 = setsockopt */ "listen", /* 106 = listen */ "obs_vtimes", /* 107 = obsolete vtimes */ - "old.sigvec", /* 108 = old sigvec */ - "old.sigblock", /* 109 = old sigblock */ - "old.sigsetmask", /* 110 = old sigsetmask */ - "old.sigsuspend", /* 111 = old sigsuspend */ - "old.sigstack", /* 112 = old sigstack */ - "old.recvmsg", /* 113 = old recvmsg */ - "old.sendmsg", /* 114 = old sendmsg */ + "compat.sigvec", /* 108 = old sigvec */ + "compat.sigblock", /* 109 = old sigblock */ + "compat.sigsetmask", /* 110 = old sigsetmask */ + "compat.sigsuspend", /* 111 = old sigsuspend */ + "compat.sigstack", /* 112 = old sigstack */ + "compat.recvmsg", /* 113 = old recvmsg */ + "compat.sendmsg", /* 114 = old sendmsg */ "obs_vtrace", /* 115 = obsolete vtrace */ "gettimeofday", /* 116 = gettimeofday */ "getrusage", /* 117 = getrusage */ @@ -132,12 +132,12 @@ "settimeofday", /* 122 = settimeofday */ "fchown", /* 123 = fchown */ "fchmod", /* 124 = fchmod */ - "old.recvfrom", /* 125 = old recvfrom */ + "compat.recvfrom", /* 125 = old recvfrom */ "setreuid", /* 126 = setreuid */ "setregid", /* 127 = setregid */ "rename", /* 128 = rename */ - "old.truncate", /* 129 = old truncate */ - "old.ftruncate", /* 130 = old ftruncate */ + "compat.truncate", /* 129 = old truncate */ + "compat.ftruncate", /* 130 = old ftruncate */ "flock", /* 131 = flock */ "mkfifo", /* 132 = mkfifo */ "sendto", /* 133 = sendto */ @@ -148,24 +148,24 @@ "utimes", /* 138 = utimes */ "obs_4.2", /* 139 = obsolete 4.2 sigreturn */ "adjtime", /* 140 = adjtime */ - "old.getpeername", /* 141 = old getpeername */ - "old.gethostid", /* 142 = old gethostid */ - "old.sethostid", /* 143 = old sethostid */ - "old.getrlimit", /* 144 = old getrlimit */ - "old.setrlimit", /* 145 = old setrlimit */ - "old.killpg", /* 146 = old killpg */ + "compat.getpeername", /* 141 = old getpeername */ + "compat.gethostid", /* 142 = old gethostid */ + "compat.sethostid", /* 143 = old sethostid */ + "compat.getrlimit", /* 144 = old getrlimit */ + "compat.setrlimit", /* 145 = old setrlimit */ + "compat.killpg", /* 146 = old killpg */ "setsid", /* 147 = setsid */ "quotactl", /* 148 = quotactl */ - "old.quota", /* 149 = old quota */ - "old.getsockname", /* 150 = old getsockname */ + "compat.quota", /* 149 = old quota */ + "compat.getsockname", /* 150 = old getsockname */ "#151", /* 151 = sem_lock */ "#152", /* 152 = sem_wakeup */ "#153", /* 153 = asyncdaemon */ "#154", /* 154 = nosys */ "nfssvc", /* 155 = nfssvc */ - "old.getdirentries", /* 156 = old getdirentries */ - "old.statfs", /* 157 = old statfs */ - "old.fstatfs", /* 158 = old fstatfs */ + "compat.getdirentries", /* 156 = old getdirentries */ + "compat4.statfs", /* 157 = old statfs */ + "compat4.fstatfs", /* 158 = old fstatfs */ "#159", /* 159 = nosys */ "lgetfh", /* 160 = lgetfh */ "getfh", /* 161 = getfh */ @@ -180,8 +180,8 @@ "msgsys", /* 170 = msgsys */ "shmsys", /* 171 = shmsys */ "#172", /* 172 = nosys */ - "pread", /* 173 = pread */ - "pwrite", /* 174 = pwrite */ + "compat6.pread", /* 173 = old pread */ + "compat6.pwrite", /* 174 = old pwrite */ "#175", /* 175 = nosys */ "ntp_adjtime", /* 176 = ntp_adjtime */ "#177", /* 177 = sfork */ @@ -204,11 +204,11 @@ "getrlimit", /* 194 = getrlimit */ "setrlimit", /* 195 = setrlimit */ "getdirentries", /* 196 = getdirentries */ - "mmap", /* 197 = mmap */ + "compat6.mmap", /* 197 = old mmap */ "__syscall", /* 198 = __syscall */ - "lseek", /* 199 = lseek */ - "truncate", /* 200 = truncate */ - "ftruncate", /* 201 = ftruncate */ + "compat6.lseek", /* 199 = old lseek */ + "compat6.truncate", /* 200 = old truncate */ + "compat6.ftruncate", /* 201 = old ftruncate */ "__sysctl", /* 202 = __sysctl */ "mlock", /* 203 = mlock */ "munlock", /* 204 = munlock */ @@ -304,7 +304,7 @@ "#294", /* 294 = nosys */ "#295", /* 295 = nosys */ "#296", /* 296 = nosys */ - "old.fhstatfs", /* 297 = old fhstatfs */ + "compat4.fhstatfs", /* 297 = old fhstatfs */ "fhopen", /* 298 = fhopen */ "fhstat", /* 299 = fhstat */ "modnext", /* 300 = modnext */ @@ -343,15 +343,15 @@ "sched_get_priority_min", /* 333 = sched_get_priority_min */ "sched_rr_get_interval", /* 334 = sched_rr_get_interval */ "utrace", /* 335 = utrace */ - "old.sendfile", /* 336 = old sendfile */ + "compat4.sendfile", /* 336 = old sendfile */ "kldsym", /* 337 = kldsym */ "jail", /* 338 = jail */ "#339", /* 339 = pioctl */ "sigprocmask", /* 340 = sigprocmask */ "sigsuspend", /* 341 = sigsuspend */ - "old.sigaction", /* 342 = old sigaction */ + "compat4.sigaction", /* 342 = old sigaction */ "sigpending", /* 343 = sigpending */ - "old.sigreturn", /* 344 = old sigreturn */ + "compat4.sigreturn", /* 344 = old sigreturn */ "sigtimedwait", /* 345 = sigtimedwait */ "sigwaitinfo", /* 346 = sigwaitinfo */ "__acl_get_file", /* 347 = __acl_get_file */ @@ -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 */ + "pread", /* 475 = pread */ + "pwrite", /* 476 = pwrite */ + "mmap", /* 477 = mmap */ + "lseek", /* 478 = lseek */ + "truncate", /* 479 = truncate */ + "ftruncate", /* 480 = ftruncate */ }; Index: sys/kern/syscalls.master =========================================================================== --- sys/kern/syscalls.master 2007/07/01 19:30:52 #138 +++ sys/kern/syscalls.master 2007/07/01 19:30:52 @@ -334,9 +334,9 @@ int a4); } ; XXX should be { int shmsys(int which, ...); } 172 AUE_NULL UNIMPL nosys -173 AUE_PREAD STD { ssize_t pread(int fd, void *buf, \ +173 AUE_PREAD COMPAT6 { ssize_t pread(int fd, void *buf, \ size_t nbyte, int pad, off_t offset); } -174 AUE_PWRITE STD { ssize_t pwrite(int fd, const void *buf, \ +174 AUE_PWRITE COMPAT6 { ssize_t pwrite(int fd, const void *buf, \ size_t nbyte, int pad, off_t offset); } 175 AUE_NULL UNIMPL nosys 176 AUE_NTP_ADJTIME STD { int ntp_adjtime(struct timex *tp); } @@ -367,16 +367,16 @@ __setrlimit_args int 196 AUE_GETDIRENTRIES STD { int getdirentries(int fd, char *buf, \ u_int count, long *basep); } -197 AUE_MMAP STD { caddr_t mmap(caddr_t addr, size_t len, \ +197 AUE_MMAP COMPAT6 { caddr_t mmap(caddr_t addr, size_t len, \ int prot, int flags, int fd, int pad, \ off_t pos); } 198 AUE_NULL STD { int nosys(void); } __syscall \ __syscall_args int -199 AUE_LSEEK STD { off_t lseek(int fd, int pad, off_t offset, \ +199 AUE_LSEEK COMPAT6 { off_t lseek(int fd, int pad, off_t offset, \ int whence); } -200 AUE_TRUNCATE STD { int truncate(char *path, int pad, \ +200 AUE_TRUNCATE COMPAT6 { int truncate(char *path, int pad, \ off_t length); } -201 AUE_FTRUNCATE STD { int ftruncate(int fd, int pad, \ +201 AUE_FTRUNCATE COMPAT6 { int ftruncate(int fd, int pad, \ off_t length); } 202 AUE_SYSCTL STD { int __sysctl(int *name, u_int namelen, \ void *old, size_t *oldlenp, void *new, \ @@ -835,5 +838,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 pread(int fd, void *buf, \ + size_t nbyte, off_t offset); } +476 AUE_PWRITE STD { ssize_t pwrite(int fd, const void *buf, \ + size_t nbyte, off_t offset); } +477 AUE_MMAP STD { caddr_t mmap(caddr_t addr, size_t len, \ + int prot, int flags, int fd, off_t pos); } +478 AUE_LSEEK STD { off_t lseek(int fd, off_t offset, \ + int whence); } +479 AUE_TRUNCATE STD { int truncate(char *path, off_t length); } +480 AUE_FTRUNCATE STD { int ftruncate(int fd, off_t length); } ; Please copy any additions and changes to the following compatability tables: ; sys/compat/freebsd32/syscalls.master Index: sys/kern/systrace_args.c =========================================================================== --- sys/kern/systrace_args.c 2007/07/01 19:30:52 #12 +++ sys/kern/systrace_args.c 2007/07/01 19:30:52 @@ -927,28 +927,6 @@ *n_args = 4; break; } - /* pread */ - case 173: { - struct 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->pad; /* int */ - iarg[4] = p->offset; /* off_t */ - *n_args = 5; - break; - } - /* pwrite */ - case 174: { - struct 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->pad; /* int */ - iarg[4] = p->offset; /* off_t */ - *n_args = 5; - break; - } /* ntp_adjtime */ case 176: { struct ntp_adjtime_args *p = params; @@ -1043,52 +1021,11 @@ *n_args = 4; break; } - /* mmap */ - case 197: { - struct 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->pad; /* int */ - iarg[6] = p->pos; /* off_t */ - *n_args = 7; - break; - } /* nosys */ case 198: { *n_args = 0; break; } - /* lseek */ - case 199: { - struct lseek_args *p = params; - iarg[0] = p->fd; /* int */ - iarg[1] = p->pad; /* int */ - iarg[2] = p->offset; /* off_t */ - iarg[3] = p->whence; /* int */ - *n_args = 4; - break; - } - /* truncate */ - case 200: { - struct truncate_args *p = params; - uarg[0] = (intptr_t) p->path; /* char * */ - iarg[1] = p->pad; /* int */ - iarg[2] = p->length; /* off_t */ - *n_args = 3; - break; - } - /* ftruncate */ - case 201: { - struct ftruncate_args *p = params; - iarg[0] = p->fd; /* int */ - iarg[1] = p->pad; /* int */ - iarg[2] = p->length; /* off_t */ - *n_args = 3; - break; - } /* __sysctl */ case 202: { struct sysctl_args *p = params; @@ -2805,6 +2769,63 @@ *n_args = 7; break; } + /* pread */ + case 475: { + struct 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; + } + /* pwrite */ + case 476: { + struct 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; + } + /* mmap */ + case 477: { + struct 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; + } + /* lseek */ + case 478: { + struct lseek_args *p = params; + iarg[0] = p->fd; /* int */ + iarg[1] = p->offset; /* off_t */ + iarg[2] = p->whence; /* int */ + *n_args = 3; + break; + } + /* truncate */ + case 479: { + struct truncate_args *p = params; + uarg[0] = (intptr_t) p->path; /* char * */ + iarg[1] = p->length; /* off_t */ + *n_args = 2; + break; + } + /* ftruncate */ + case 480: { + struct ftruncate_args *p = params; + iarg[0] = p->fd; /* int */ + iarg[1] = p->length; /* off_t */ + *n_args = 2; + break; + } default: *n_args = 0; break; Index: sys/kern/vfs_syscalls.c =========================================================================== --- sys/kern/vfs_syscalls.c 2007/07/01 19:30:52 #239 +++ sys/kern/vfs_syscalls.c 2007/07/01 19:30:52 @@ -1785,16 +1785,30 @@ 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 */ +#if defined(COMPAT_FREEBSD6) +/* Ignore the 'pad' argument */ +int +freebsd6_lseek(td, uap) + struct thread *td; + register struct freebsd6_lseek_args *uap; +{ + struct lseek_args ouap; + + ouap.fd = uap->fd; + ouap.offset = uap->offset; + ouap.whence = uap->whence; + return (lseek(td, &ouap)); +} +#endif + /* * Check access permissions using passed credentials. */ @@ -3150,6 +3239,33 @@ } #endif /* COMPAT_43 */ +#if defined(COMPAT_FREEBSD6) +/* Versions with the pad argument */ +int +freebsd6_truncate(td, uap) + struct thread *td; + register struct freebsd6_truncate_args *uap; +{ + struct truncate_args ouap; + + ouap.path = uap->path; + ouap.length = uap->length; + return (truncate(td, &ouap)); +} + +int +freebsd6_ftruncate(td, uap) + struct thread *td; + register struct freebsd6_ftruncate_args *uap; +{ + struct ftruncate_args ouap; + + ouap.fd = uap->fd; + ouap.length = uap->length; + return (ftruncate(td, &ouap)); +} +#endif + /* * Sync an open file. */ Index: sys/sys/param.h =========================================================================== --- sys/sys/param.h 2007/07/01 19:30:52 #207 +++ sys/sys/param.h 2007/07/01 19:30:52 @@ -57,7 +57,7 @@ * is created, otherwise 1. */ #undef __FreeBSD_version -#define __FreeBSD_version 700048 /* Master, propagated to newvers */ +#define __FreeBSD_version 700049 /* Master, propagated to newvers */ #ifndef LOCORE #include Index: sys/sys/syscall.h =========================================================================== --- sys/sys/syscall.h 2007/07/01 19:30:52 #121 +++ sys/sys/syscall.h 2007/07/01 19:30:52 @@ -24,7 +24,7 @@ #define SYS_chmod 15 #define SYS_chown 16 #define SYS_break 17 - /* 18 is old getfsstat */ +#define SYS_freebsd4_getfsstat 18 /* 19 is old lseek */ #define SYS_getpid 20 #define SYS_mount 21 @@ -156,8 +156,8 @@ /* 150 is old getsockname */ #define SYS_nfssvc 155 /* 156 is old getdirentries */ - /* 157 is old statfs */ - /* 158 is old fstatfs */ +#define SYS_freebsd4_statfs 157 +#define SYS_freebsd4_fstatfs 158 #define SYS_lgetfh 160 #define SYS_getfh 161 #define SYS_getdomainname 162 @@ -168,8 +168,8 @@ #define SYS_semsys 169 #define SYS_msgsys 170 #define SYS_shmsys 171 -#define SYS_pread 173 -#define SYS_pwrite 174 +#define SYS_freebsd6_pread 173 +#define SYS_freebsd6_pwrite 174 #define SYS_ntp_adjtime 176 #define SYS_setgid 181 #define SYS_setegid 182 @@ -182,11 +182,11 @@ #define SYS_getrlimit 194 #define SYS_setrlimit 195 #define SYS_getdirentries 196 -#define SYS_mmap 197 +#define SYS_freebsd6_mmap 197 #define SYS___syscall 198 -#define SYS_lseek 199 -#define SYS_truncate 200 -#define SYS_ftruncate 201 +#define SYS_freebsd6_lseek 199 +#define SYS_freebsd6_truncate 200 +#define SYS_freebsd6_ftruncate 201 #define SYS___sysctl 202 #define SYS_mlock 203 #define SYS_munlock 204 @@ -233,7 +233,7 @@ #define SYS_nlstat 280 #define SYS_preadv 289 #define SYS_pwritev 290 - /* 297 is old fhstatfs */ +#define SYS_freebsd4_fhstatfs 297 #define SYS_fhopen 298 #define SYS_fhstat 299 #define SYS_modnext 300 @@ -272,14 +272,14 @@ #define SYS_sched_get_priority_min 333 #define SYS_sched_rr_get_interval 334 #define SYS_utrace 335 - /* 336 is old sendfile */ +#define SYS_freebsd4_sendfile 336 #define SYS_kldsym 337 #define SYS_jail 338 #define SYS_sigprocmask 340 #define SYS_sigsuspend 341 - /* 342 is old sigaction */ +#define SYS_freebsd4_sigaction 342 #define SYS_sigpending 343 - /* 344 is old sigreturn */ +#define SYS_freebsd4_sigreturn 344 #define SYS_sigtimedwait 345 #define SYS_sigwaitinfo 346 #define SYS___acl_get_file 347 @@ -394,4 +397,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_pread 475 +#define SYS_pwrite 476 +#define SYS_mmap 477 +#define SYS_lseek 478 +#define SYS_truncate 479 +#define SYS_ftruncate 480 +#define SYS_MAXSYSCALL 481 Index: sys/sys/syscall.mk =========================================================================== --- sys/sys/syscall.mk 2007/07/01 19:30:52 #122 +++ sys/sys/syscall.mk 2007/07/01 19:30:52 @@ -19,6 +19,7 @@ chmod.o \ chown.o \ break.o \ + freebsd4_getfsstat.o \ getpid.o \ mount.o \ unmount.o \ @@ -107,6 +108,8 @@ setsid.o \ quotactl.o \ nfssvc.o \ + freebsd4_statfs.o \ + freebsd4_fstatfs.o \ lgetfh.o \ getfh.o \ getdomainname.o \ @@ -117,8 +120,8 @@ semsys.o \ msgsys.o \ shmsys.o \ - pread.o \ - pwrite.o \ + freebsd6_pread.o \ + freebsd6_pwrite.o \ ntp_adjtime.o \ setgid.o \ setegid.o \ @@ -131,11 +134,11 @@ getrlimit.o \ setrlimit.o \ getdirentries.o \ - mmap.o \ + freebsd6_mmap.o \ __syscall.o \ - lseek.o \ - truncate.o \ - ftruncate.o \ + freebsd6_lseek.o \ + freebsd6_truncate.o \ + freebsd6_ftruncate.o \ __sysctl.o \ mlock.o \ munlock.o \ @@ -182,6 +185,7 @@ nlstat.o \ preadv.o \ pwritev.o \ + freebsd4_fhstatfs.o \ fhopen.o \ fhstat.o \ modnext.o \ @@ -217,11 +221,14 @@ sched_get_priority_min.o \ sched_rr_get_interval.o \ utrace.o \ + freebsd4_sendfile.o \ kldsym.o \ jail.o \ sigprocmask.o \ sigsuspend.o \ + freebsd4_sigaction.o \ sigpending.o \ + freebsd4_sigreturn.o \ sigtimedwait.o \ sigwaitinfo.o \ __acl_get_file.o \ @@ -335,4 +345,10 @@ sctp_peeloff.o \ sctp_generic_sendmsg.o \ sctp_generic_sendmsg_iov.o \ - sctp_generic_recvmsg.o + sctp_generic_recvmsg.o \ + pread.o \ + pwrite.o \ + mmap.o \ + lseek.o \ + truncate.o \ + ftruncate.o Index: sys/sys/sysproto.h =========================================================================== --- sys/sys/sysproto.h 2007/07/01 19:30:52 #135 +++ sys/sys/sysproto.h 2007/07/01 19:30:52 @@ -534,20 +534,6 @@ char a3_l_[PADL_(int)]; int a3; char a3_r_[PADR_(int)]; char a4_l_[PADL_(int)]; int a4; char a4_r_[PADR_(int)]; }; -struct 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 pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; - char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)]; -}; -struct 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 pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; - char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)]; -}; struct ntp_adjtime_args { char tp_l_[PADL_(struct timex *)]; struct timex * tp; char tp_r_[PADR_(struct timex *)]; }; @@ -594,31 +580,6 @@ char count_l_[PADL_(u_int)]; u_int count; char count_r_[PADR_(u_int)]; char basep_l_[PADL_(long *)]; long * basep; char basep_r_[PADR_(long *)]; }; -struct 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 pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; - char pos_l_[PADL_(off_t)]; off_t pos; char pos_r_[PADR_(off_t)]; -}; -struct lseek_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char pad_l_[PADL_(int)]; int pad; char pad_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 truncate_args { - char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; - char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; - char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)]; -}; -struct ftruncate_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; - char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; - char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)]; -}; struct sysctl_args { char name_l_[PADL_(int *)]; int * name; char name_r_[PADR_(int *)]; char namelen_l_[PADL_(u_int)]; u_int namelen; char namelen_r_[PADR_(u_int)]; @@ -1482,6 +1458,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 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 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 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 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 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 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 *); @@ -1596,8 +1605,6 @@ int semsys(struct thread *, struct semsys_args *); int msgsys(struct thread *, struct msgsys_args *); int shmsys(struct thread *, struct shmsys_args *); -int pread(struct thread *, struct pread_args *); -int pwrite(struct thread *, struct pwrite_args *); int ntp_adjtime(struct thread *, struct ntp_adjtime_args *); int setgid(struct thread *, struct setgid_args *); int setegid(struct thread *, struct setegid_args *); @@ -1610,10 +1617,6 @@ int getrlimit(struct thread *, struct __getrlimit_args *); int setrlimit(struct thread *, struct __setrlimit_args *); int getdirentries(struct thread *, struct getdirentries_args *); -int mmap(struct thread *, struct mmap_args *); -int lseek(struct thread *, struct lseek_args *); -int truncate(struct thread *, struct truncate_args *); -int ftruncate(struct thread *, struct ftruncate_args *); int __sysctl(struct thread *, struct sysctl_args *); int mlock(struct thread *, struct mlock_args *); int munlock(struct thread *, struct munlock_args *); @@ -1814,6 +1820,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 pread(struct thread *, struct pread_args *); +int pwrite(struct thread *, struct pwrite_args *); +int mmap(struct thread *, struct mmap_args *); +int lseek(struct thread *, struct lseek_args *); +int truncate(struct thread *, struct truncate_args *); +int ftruncate(struct thread *, struct ftruncate_args *); #ifdef COMPAT_43 @@ -2033,6 +2045,57 @@ #endif /* COMPAT_FREEBSD4 */ + +#ifdef COMPAT_FREEBSD6 + +struct freebsd6_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 pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; + char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)]; +}; +struct freebsd6_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 pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; + char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)]; +}; +struct freebsd6_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 pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; + char pos_l_[PADL_(off_t)]; off_t pos; char pos_r_[PADR_(off_t)]; +}; +struct freebsd6_lseek_args { + char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; + char pad_l_[PADL_(int)]; int pad; char pad_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 freebsd6_truncate_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; + char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)]; +}; +struct freebsd6_ftruncate_args { + char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; + char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; + char length_l_[PADL_(off_t)]; off_t length; char length_r_[PADR_(off_t)]; +}; +int freebsd6_pread(struct thread *, struct freebsd6_pread_args *); +int freebsd6_pwrite(struct thread *, struct freebsd6_pwrite_args *); +int freebsd6_mmap(struct thread *, struct freebsd6_mmap_args *); +int freebsd6_lseek(struct thread *, struct freebsd6_lseek_args *); +int freebsd6_truncate(struct thread *, struct freebsd6_truncate_args *); +int freebsd6_ftruncate(struct thread *, struct freebsd6_ftruncate_args *); + +#endif /* COMPAT_FREEBSD6 */ + #define SYS_AUE_syscall AUE_NULL #define SYS_AUE_exit AUE_EXIT #define SYS_AUE_fork AUE_FORK @@ -2147,8 +2210,6 @@ #define SYS_AUE_semsys AUE_SEMSYS #define SYS_AUE_msgsys AUE_MSGSYS #define SYS_AUE_shmsys AUE_SHMSYS -#define SYS_AUE_pread AUE_PREAD -#define SYS_AUE_pwrite AUE_PWRITE #define SYS_AUE_ntp_adjtime AUE_NTP_ADJTIME #define SYS_AUE_setgid AUE_SETGID #define SYS_AUE_setegid AUE_SETEGID @@ -2161,10 +2222,6 @@ #define SYS_AUE_getrlimit AUE_GETRLIMIT #define SYS_AUE_setrlimit AUE_SETRLIMIT #define SYS_AUE_getdirentries AUE_GETDIRENTRIES -#define SYS_AUE_mmap AUE_MMAP -#define SYS_AUE_lseek AUE_LSEEK -#define SYS_AUE_truncate AUE_TRUNCATE -#define SYS_AUE_ftruncate AUE_FTRUNCATE #define SYS_AUE___sysctl AUE_SYSCTL #define SYS_AUE_mlock AUE_MLOCK #define SYS_AUE_munlock AUE_MUNLOCK @@ -2365,6 +2425,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_pread AUE_PREAD +#define SYS_AUE_pwrite AUE_PWRITE +#define SYS_AUE_mmap AUE_MMAP +#define SYS_AUE_lseek AUE_LSEEK +#define SYS_AUE_truncate AUE_TRUNCATE +#define SYS_AUE_ftruncate AUE_FTRUNCATE #undef PAD_ #undef PADL_ Index: sys/vm/vm_mmap.c =========================================================================== --- sys/vm/vm_mmap.c 2007/07/01 19:30:52 #88 +++ sys/vm/vm_mmap.c 2007/07/01 19:30:52 @@ -392,6 +392,24 @@ return (error); } +#ifdef COMPAT_FREEBSD6 +int +freebsd6_mmap(td, uap) + struct thread *td; + struct freebsd6_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.pos = uap->pos; + return (mmap(td, &oargs)); +} +#endif + #ifdef COMPAT_43 #ifndef _SYS_SYSPROTO_H_ struct ommap_args { Index: usr.bin/kdump/kdump.c =========================================================================== --- usr.bin/kdump/kdump.c 2007/07/01 19:30:52 #17 +++ usr.bin/kdump/kdump.c 2007/07/01 19:30:52 @@ -453,6 +453,17 @@ msyncflagsname((int)*ip); ip++; narg--; + } else if (ktr->ktr_code == SYS_freebsd6_mmap) { + print_number(ip,narg,c); + print_number(ip,narg,c); + (void)putchar(','); + mmapprotname ((int)*ip); + (void)putchar(','); + ip++; + narg--; + mmapflagsname ((int)*ip); + ip++; + narg--; } else if (ktr->ktr_code == SYS_mmap) { print_number(ip,narg,c); print_number(ip,narg,c); @@ -525,15 +536,24 @@ sockoptname((int)*ip); ip++; narg--; + } else if (ktr->ktr_code == SYS_freebsd6_lseek) { + print_number(ip,narg,c); + /* Hidden 'pad' argument, not in lseek(2) */ + print_number(ip,narg,c); + print_number(ip,narg,c); + (void)putchar(','); + whencename ((int)*ip); + ip++; + narg--; } else if (ktr->ktr_code == SYS_lseek) { print_number(ip,narg,c); /* Hidden 'pad' argument, not in lseek(2) */ print_number(ip,narg,c); - print_number(ip,narg,c); (void)putchar(','); whencename ((int)*ip); ip++; narg--; + } else if (ktr->ktr_code == SYS_flock) { print_number(ip,narg,c);