From owner-p4-projects@FreeBSD.ORG Sun Jul 1 08:13:12 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0F84016A468; Sun, 1 Jul 2007 08:13:12 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D67A816A400 for ; Sun, 1 Jul 2007 08:13:11 +0000 (UTC) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id C72A113C43E for ; Sun, 1 Jul 2007 08:13:11 +0000 (UTC) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l618DBMZ076591 for ; Sun, 1 Jul 2007 08:13:11 GMT (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l618DAPx076588 for perforce@freebsd.org; Sun, 1 Jul 2007 08:13:10 GMT (envelope-from peter@freebsd.org) Date: Sun, 1 Jul 2007 08:13:10 GMT Message-Id: <200707010813.l618DAPx076588@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm To: Perforce Change Reviews Cc: Subject: PERFORCE change 122621 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Jul 2007 08:13:12 -0000 http://perforce.freebsd.org/chv.cgi?CH=122621 Change 122621 by peter@peter_overcee on 2007/07/01 08:12:58 Try things differently. Make direct syscalls by generating internal, hidden, wrapper stubs. When WITHOUT_SYSCALL_COMPAT is defined, the syscalls become first class citizens. Otherwise they become _sys_mmap() etc and are indirect via mmap.c. Affected files ... .. //depot/projects/hammer/lib/libc/amd64/sys/Makefile.inc#8 edit .. //depot/projects/hammer/lib/libc/arm/sys/Makefile.inc#3 edit .. //depot/projects/hammer/lib/libc/i386/sys/Makefile.inc#8 edit .. //depot/projects/hammer/lib/libc/ia64/sys/Makefile.inc#3 edit .. //depot/projects/hammer/lib/libc/include/libc_private.h#14 edit .. //depot/projects/hammer/lib/libc/powerpc/sys/Makefile.inc#3 edit .. //depot/projects/hammer/lib/libc/sparc64/sys/Makefile.inc#7 edit .. //depot/projects/hammer/lib/libc/sys/Makefile.inc#27 edit .. //depot/projects/hammer/lib/libc/sys/ftruncate.c#7 edit .. //depot/projects/hammer/lib/libc/sys/lseek.c#7 edit .. //depot/projects/hammer/lib/libc/sys/mmap.c#8 edit .. //depot/projects/hammer/lib/libc/sys/pread.c#7 edit .. //depot/projects/hammer/lib/libc/sys/pwrite.c#7 edit .. //depot/projects/hammer/lib/libc/sys/truncate.c#7 edit Differences ... ==== //depot/projects/hammer/lib/libc/amd64/sys/Makefile.inc#8 (text+ko) ==== @@ -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 ==== //depot/projects/hammer/lib/libc/arm/sys/Makefile.inc#3 (text+ko) ==== @@ -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 ==== //depot/projects/hammer/lib/libc/i386/sys/Makefile.inc#8 (text+ko) ==== @@ -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 ==== //depot/projects/hammer/lib/libc/ia64/sys/Makefile.inc#3 (text+ko) ==== @@ -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 ==== //depot/projects/hammer/lib/libc/include/libc_private.h#14 (text+ko) ==== @@ -176,11 +176,20 @@ */ extern int __getosreldate(void); #include -extern __off_t __new_lseek(int, __off_t, int); -extern int __new_ftruncate(int, __off_t); -extern int __new_truncate(const char *, __off_t); -extern __ssize_t __new_pread(int, void *, __size_t, __off_t); -extern __ssize_t __new_pwrite(int, void *, __size_t, __off_t); -extern void * __new_mmap(void *, __size_t, int, int, int, __off_t); +/* 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_ */ ==== //depot/projects/hammer/lib/libc/powerpc/sys/Makefile.inc#3 (text+ko) ==== @@ -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 ==== //depot/projects/hammer/lib/libc/sparc64/sys/Makefile.inc#7 (text+ko) ==== @@ -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 ==== //depot/projects/hammer/lib/libc/sys/Makefile.inc#27 (text+ko) ==== @@ -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} ==== //depot/projects/hammer/lib/libc/sys/ftruncate.c#7 (text+ko) ==== @@ -49,7 +49,7 @@ { if (__getosreldate() >= 700049) - return(_new_ftruncate(fd, length)); + return(__sys_ftruncate(fd, length)); else - return(__syscall((quad_t)SYS_ftruncate, fd, 0, length)); + return(__sys_freebsd6_ftruncate(fd, 0, length)); } ==== //depot/projects/hammer/lib/libc/sys/lseek.c#7 (text+ko) ==== @@ -50,7 +50,7 @@ { if (__getosreldate() >= 700049) - return(_new_lseek(fd, offset, whence)); + return(__sys_lseek(fd, offset, whence)); else - return(__syscall((quad_t)SYS_lseek, fd, 0, offset, whence)); + return(__sys_freebsd6_lseek(fd, 0, offset, whence)); } ==== //depot/projects/hammer/lib/libc/sys/mmap.c#8 (text+ko) ==== @@ -54,9 +54,8 @@ { if (__getosreldate() >= 700049) - return (_new_mmap(addr, len, prot, flags, fd, offset)); + return (__sys_mmap(addr, len, prot, flags, fd, offset)); else - return ((void *)(intptr_t)__syscall((quad_t)SYS_mmap, addr, len, prot, - flags, fd, 0, offset)); + return (__sys_freebsd6_mmap(addr, len, prot, flags, fd, 0, offset)); } ==== //depot/projects/hammer/lib/libc/sys/pread.c#7 (text+ko) ==== @@ -51,7 +51,7 @@ { if (__getosreldate() >= 700049) - return (_new_pread(fd, buf, nbyte, offset)); + return (__sys_pread(fd, buf, nbyte, offset)); else - return ((ssize_t)__syscall((quad_t)SYS_pread, fd, buf, nbyte, 0, offset)); + return (__sys_freebsd6_pread(fd, buf, nbyte, 0, offset)); } ==== //depot/projects/hammer/lib/libc/sys/pwrite.c#7 (text+ko) ==== @@ -50,7 +50,7 @@ off_t offset; { if (__getosreldate() >= 700049) - return (_new_pwrite(fd, buf, nbyte, offset)); + return (__sys_pwrite(fd, buf, nbyte, offset)); else - return ((ssize_t)__syscall((quad_t)SYS_pwrite, fd, buf, nbyte, 0, offset)); + return (__sys_freebsd6_pwrite(fd, buf, nbyte, 0, offset)); } ==== //depot/projects/hammer/lib/libc/sys/truncate.c#7 (text+ko) ==== @@ -49,7 +49,7 @@ { if (__getosreldate() >= 700049) - return(_new_truncate(path, length)); + return(__sys_truncate(path, length)); else - return(__syscall((quad_t)SYS_truncate, path, 0, length)); + return(__sys_freebsd6_truncate(path, 0, length)); }