cvs commit: src/sys/kern syscalls.master

Peter Wemm peter at FreeBSD.org
Wed Jul 4 22:47:38 UTC 2007


peter       2007-07-04 22:47:37 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             syscalls.master 
  Log:
  Create new syscalls for mmap(), lseek(), pread(), pwrite(), truncate() and
  ftruncate(), but without the pad arg.
  
  There are several reasons for this.  Consider 'mmap()'.  On AMD64, the
  function call (and syscall) ABI allow for 6 register arguments.  Additional
  arguments go on the stack.  mmap(2) has 6 arguments.  However, the syscall
  definition has an extra 'int pad' argument.  This pushes it to 7 arguments,
  which means one must spill into the memory stack.  Since the kernel API
  doesn't match userland API, we have a hack in libc - libc/sys/mmap.c.
  This implements the userland API by calling __syscall() with an extra
  argument and the pad argument, for a total of 8 args.  This is all
  unnecessary and inconvenient for several things, including the kernel's
  syscall handler code which now has to handle merging stack arguments with
  register arguments.  It is a big deal for certain 3rd party code.
  
  I'm adding libc glue to make the transition totally painless.  I had
  intended to mark the old syscalls as COMPAT6, but the potential to shoot
  your feet by building a new kernel without COMPAT_FREEBSD6 but with a
  slighly older userland was too great.  For now, they have manual
  "freebsd6_" prefixes rather than being COMPAT6.  They will go back to
  being marked 'COMPAT6' after 7-stable starts.
  
  Approved by: re (kensmith)
  
  Revision  Changes    Path
  1.232     +20 -9     src/sys/kern/syscalls.master


More information about the cvs-src mailing list