> 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

Reply via email to