PERFORCE change 122621 for review

Peter Wemm peter at FreeBSD.org
Sun Jul 1 08:13:12 UTC 2007


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

Change 122621 by peter at 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));
 }


More information about the p4-projects mailing list