> Date: Thu, 03 Dec 2009 00:30:10 -0800 > From: Mike Shapiro <mws at sun.com> > Subject: Re: delete obsolete system call traps [PSARC/2009/657] > To: "Roger A. Faulkner" <Roger.Faulkner at sun.com> > Cc: psarc-ext at sac.sfbay.sun.com, Bart.Smaalders at sun.com, Bryan.Cantrill at sun.com, Michael.Shapiro at sun.com, Darrin.Johnson at sun.com > ... > I certainly agree some of this is implementation and doesn't matter. > And from a technical perspective, because the current DTrace syscall > provider advertises the sysent table names and not the sub-coded man > page (2) view of system calls (something we intend to rectify > someday), we marked those names as Private in our stability mechanism. > > But from a practical perspective, I'm very uncomfortable with the *at > part of this project, whereby extremely well-known fundamental names > used extensively by users of DTrace based on long-standing > fundamentals like syscall::open:entry just go away, essentially for no > benefit.
I discussed this matter offline with Michael Shapiro and Bryan Cantrill. While it is unfortunate that the current DTrace syscall provider has caused the syscall trap table to have become a public interface, DTrace usage is widespread enough to warrent keeping unchanged what Mike refers to as "extremely well-known fundamental names used extensively by users of DTrace based on long-standing fundamentals like syscall::open:entry". This not a tenable long-term solution. The kernel <-> user-level syscall trap interface has never been a Solaris public interface. The long-term solution is to implement what Mike refers to as "the sub-coded man page (2) view of system calls" in the DTrace syscall provider. In the interim, for the current PSARC case for deleting obsolete system call traps, I am changing the proposal as follows: =========================================================== Retain these old system call traps; make sure they are called from libc as always so that existing DTrace scripts continue to work as always: open() open64() stat() lstat() fstat() stat64() lstat64() fstat64() rename() unlink() rmdir() chown() lchown() fchown() access() Delete these in favor of open*(path, O_WRONLY | O_CREAT | O_TRUNC, mode): creat() creat64() Delete this in favor of fcntl(F_DUPFD): dup() Delete these from i386 code in favor of *stat() amd mknod() (they should have been deleted when COFF support was dropped): _xstat() _lxstat() _fxstat() _xmknod() Delete these (they are never called from libc): exec() fork1() forkall() poll() utime() utimes() umount() wait() lwp_mutex_lock() lwp_sema_wait() Delete this: fsat() in favor of individual (new) system call traps for each of its subcodes: openat() openat64() fstatat() fstatat64() renameat() unlinkat() fchownat() faccessat() =========================================================== Roger Faulkner