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