I am sponsoring this fast-track case for myself. No external/ABI interfaces are changing, so there is no documentation change.
The release binding is "minor", so it can be done in solaris_nevada (Solaris Next, OpenSolaris) (this will never be back-ported). DISCUSSION: Over the years, a number of system call traps have fallen into an unused/obsolete state. These are never called from libc, as in the case of: /* * Obsolete lwp_mutex_lock() interface, no longer called from libc. * libc now calls lwp_mutex_timedlock(lp, NULL, NULL). * This system call trap continues to exist solely for the benefit * of old statically-linked binaries from Solaris 9 and before. * It should be removed from the system when we no longer care * about such applications. */ int lwp_mutex_lock(lwp_mutex_t *lp) { return (lwp_mutex_timedlock(lp, NULL, NULL)); } There are cases where two traps do the same thing. For example: dup(fd) is exactly the same as: fcntl(fd, F_DUPFD, 0) The dup() syscall trap can be eliminated in favor of fcntl(fd, F_DUPFD, 0) (in dup() as implemented in libc). PROPOSAL: The time has come to actually delete these obsolete/redundant system call traps from the kernel and free their system call numbers for reuse by future, yet-to-be-invented system calls. The *at() system calls were introduced in Solaris 9: openat() openat64() fstatat() fstatat64() fchownat() unlinkat() renameat() accessat() These functions are a super-set of the corresponding traps: open() open64() fstat() fstat64() fchown() unlink() rename() access() all of which can be implemented in libc using calls to the corresponding *at() system call traps. There is no need to have such duplicate functionality in the system call traps. Aside: There is a bug fix in the libc open() function that did not get implemented in the libc openat() function. Such errors are a consequence of having two system call traps that perform esentially the same operation. A bug fix in one can be neglected in the other. There should be only one. Finally, the *at() system calls were implemented as subcodes of a single trap number, SYS_fsat. These system calls are important enough for each to have its own system call trap number. These old system call traps are already never called from libc. They can just be deleted from the kernel: fork() forkall() utime() utimes() futimesat() poll() lwp_mutex_lock() lwp_sema_wait() wait() These system call wrapper functions can be reimplemented in libc as shown amd then the old system call traps can be deleted from the kernel: open(path, flag, ...) openat(AT_FDCWD, path, flag, ...) creat(path, ...) open(path, O_WRONLY | O_CREAT | O_TRUNC, ...) open64(path, flag, ...) openat64(AT_FDCWD, path, flag, ...) creat64(path, mode) open64(path, O_WRONLY | O_CREAT | O_TRUNC, mode) unlink(path) unlinkat(AT_FDCWD, path, 0) rmdir(path) unlinkat(AT_FDCWD, path, AT_REMOVEDIR) chown(path, uid, gid) fchownat(AT_FDCWD, path, uid, gid, 0) lchown(path, uid, gid) fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) fchown(fd, uid, gid) fchownat(fd, NULL, uid, gid, 0) stat(path, &sb) fstatat(AT_FDCWD, path, &sb, 0) lstat(path, &sb) fstatat(AT_FDCWD, path, &sb, AT_SYMLINK_NOFOLLOW) fstat(fd, &sb) fstatat(fd, NULL, &sb, 0) stat64(path, &sb) fstatat64(AT_FDCWD, path, &sb, 0) lstat64(path, &sb) fstatat64(AT_FDCWD, path, &sb, AT_SYMLINK_NOFOLLOW) fstat64(fd, &sb) fstatat64(fd, NULL, &sb, 0) xstat(vers, path, &sb) stat(path, &sb) lxstat(vers, path, &sb) lstat(path, &sb) fxstat(vers, path, &sb) fstat(path, &sb) xmknod(vers, path, ...) mknod(path, ...) dup(fd) fcntl(fd, F_DUPFD, 0) rename(oldnam, newnam) renameat(AT_FDCWD, oldnam, AT_FDCWD, newnam) access(fname, amode) faccessat(AT_FDCWD, fname, amode, 0) All of this is possible without sacrificing any part of binary compatibility due to the Solaris 10 Branded Zone project, integrated into onnv-gate in build snv_127. See: PSARC 2009/253 S10C 6666646 Solaris 10 zones on OpenSolaris binary (supported) distributions http://hub.opensolaris.org/bin/view/Community+Group+zones/s10brand_dev_guide As part of deleting old system call traps from the kernel, changes must be made to: usr/src/lib/brand/solaris10 and: usr/src/uts/common/brand/solaris10 to emulate the deleted system call traps. Any process running in a Solaris 10 branded zone will see a kernel interface identical to that of Solaris 10 itself. There will be an impact on dtrace(1M) in scripts that assume knowledge of the details of the system call trap interfaces. For example, instead of: syscall::open syscall::open64 you have to type: syscall::openat syscall::openat64 and you also have to change 'arg0' to 'arg1' (for ::openat:entry). See the bugid: 6906485 delete obsolete system call traps Roger Faulkner