Date: Sun, 1 Jul 2007 08:13:10 GMT From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 122621 for review Message-ID: <200707010813.l618DAPx076588@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 <sys/_types.h> -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)); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707010813.l618DAPx076588>
