CDDL HEADER START

The contents of this file are subject to the terms of the
Common Development and Distribution License, Version 1.0 only
(the "License").  You may not use this file except in compliance
with the License.

You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
or http://www.opensolaris.org/os/licensing.
See the License for the specific language governing permissions
and limitations under the License.

When distributing Covered Code, include this CDDL HEADER in each
file and include the License file at usr/src/OPENSOLARIS.LICENSE.
If applicable, add the following below this CDDL HEADER, with the
fields enclosed by brackets "[]" replaced with your own identifying
information: Portions Copyright [yyyy] [name of copyright owner]

CDDL HEADER END

Copyright 2000 Sun Microsystems, Inc.  All rights reserved.
Use is subject to license terms.

ident	"%Z%%M%	%I%	%E% SMI"

System Call Files
------ ---- -----

The universal dumping grounds for system calls in Solaris 2.x,
common/os/scalls.c and common/fs/vncalls.c, have been sub-divided into
smaller files.

The old files had become quite large, and contained much completely
unrelated code. From a software engineering standpoint, it didn't seem
like a good idea to permit system calls or underlying routines
to be cognizant of the internal interfaces and underlying routines
of unrelated system calls.

From a practical standpoint, recompiling all of scalls.c or vncalls.c
after making only a small change in one system call seemed like
cruel and unusual punishment.  Also, running "bringover" after
changing scalls.c or vncalls.c in one's own environment had a
high probability of encountering a conflict.

In an attempt to improve maintainability, we have split these files
and created new directories to hold the results. One hopes that this
new organization will prove easier to maintain and change.

The principles listed below guided the split-up. Please try to adhere
to them if you add new system calls.


1) System calls now live in directories called "syscall". Architecture
   independant system calls live in common/syscall and architecture
   dependant system calls live in sparc/syscall or i86/syscall.

2) Most system calls have their own separate file. We try to keep
   these files as small as possible.

3) Unrelated system calls should NEVER be put in the same file. Do
   not consider any of these files "dumping grounds" for new system
   call work.

4) Some files DO contain more than one system call. This occurs
   under the following restricted conditions:

	o System calls that are internally related, either because
	  they alone call a set of static functions to do the dirty
	  work, or because they access locally-defined static data.
	  The system calls in sigqueue.c and lwpsys.c are examples
	  of the first case; lwp_sobj.c is an example of the second.

	o Fairly trivial pairs of "get-" and "set-" operation system
	  calls. The file rlimit.c, containing getrlimit() and
	  setrlimit() is a case in point.

	o System calls that are basically "variations on a theme,"
	  such as the the different forms of stat in stat.c.

5) If a number of system calls make use of a local function, or,
   if a function is used more widely than in a few system calls,
   then perhaps this function needs to be moved to one of the
   kernel-implementation files in common/os or common/fs. For
   example, this was done with the functions namesetattr and
   fdsetattr, which were used by several different system calls.
   These functions were moved into common/os/fio.c, where they
   seemed to fit better.

-------------------------------------------------------------------
System Call Reorganization
------ ---- --------------

The system calls in common/os/scalls.c, common/fs/vncalls.c
have been broken up into smaller files. In addition, system
calls that previously resided in <arch>/os/archdep.c have
been removed from that file. The table below describes the
manner in which the files have been split up.

The original syscall files have not been deleted, but have been
renamed to reflect their diminished contents. The file scalls.c
has been renamed to ssig.c, and vncalls.c has been renamed to
poll.c.


Syscall Entry Point	Old File	New File
-------------------	--- ----	--- ----
gtime			scalls.c	common/syscall/time.c
stime			scalls.c	common/syscall/time.c

adjtime			scalls.c	common/syscall/adjtime.c

times			scalls.c	common/syscall/times.c

sysconfig		scalls.c	common/syscall/sysconfig.c

setuid			scalls.c	common/syscall/uid.c
getuid			scalls.c	common/syscall/uid.c
seteuid			scalls.c	common/syscall/uid.c

setgid			scalls.c	common/syscall/gid.c
getgid			scalls.c	common/syscall/gid.c
setegid			scalls.c	common/syscall/gid.c

getpid			scalls.c	common/syscall/getpid.c

setgroups		scalls.c	common/syscall/groups.c
getgroups		scalls.c	common/syscall/groups.c

setpgrp			scalls.c	common/syscall/pgrpsys.c

pause			scalls.c	common/syscall/pause.c

ssig			scalls.c	common/syscall/ssig.c

sigtimedwait		scalls.c	common/syscall/sigtimedwait.c

sigsuspend		scalls.c	common/syscall/sigsuspend.c

sigaltstack		scalls.c	common/syscall/sigaltstack.c

sigpending		scalls.c	common/syscall/sigpending.c

sigprocmask		scalls.c	common/syscall/sigprocmask.c

sigaction		scalls.c	common/syscall/sigaction.c

kill			scalls.c	common/syscall/sigqueue.c
sigqueue		scalls.c	common/syscall/sigqueue.c

sigsendsys		scalls.c	common/syscall/sigsendset.c

profil			scalls.c	common/syscall/profil.c

alarm			scalls.c	common/syscall/alarm.c

umask			scalls.c	common/syscall/umask.c

ulimit			scalls.c	common/syscall/rlimit.c
getrlimit		scalls.c	common/syscall/rlimit.c
setrlimit		scalls.c	common/syscall/rlimit.c

utssys			scalls.c	common/syscall/utssys.c

uname			scalls.c	common/syscall/uname.c

uadmin			scalls.c	common/syscall/uadmin.c

systeminfo		scalls.c	common/syscall/systeminfo.c

syslwp_create		scalls.c	common/syscall/lwp_create.c
syslwp_exit		scalls.c	common/syscall/lwp_create.c

syslwp_syspend		scalls.c	common/syscall/lwpsys.c
syslwp_continue		scalls.c	common/syscall/lwpsys.c
lwp_kill		scalls.c	common/syscall/lwpsys.c
lwp_wait		scalls.c	common/syscall/lwpsys.c

yield			scalls.c	common/syscall/yield.c

lwp_self		scalls.c	common/syscall/lwp_self.c

lwp_info		scalls.c	common/syscall/lwp_info.c

lwp_mutex_lock		scalls.c	common/syscall/lwp_sobj.c
lwp_mutex_unlock	scalls.c	common/syscall/lwp_sobj.c
lwp_cond_wait		scalls.c	common/syscall/lwp_sobj.c
lwp_cond_signal		scalls.c	common/syscall/lwp_sobj.c
lwp_cond_broadcast	scalls.c	common/syscall/lwp_sobj.c
lwp_sema_p		scalls.c	common/syscall/lwp_sobj.c
lwp_sema_v		scalls.c	common/syscall/lwp_sobj.c

open			vncalls.c	common/syscall/open.c
creat			vncalls.c	common/syscall/open.c

close			vncalls.c	common/syscall/close.c

read			vncalls.c	common/syscall/rw.c
write			vncalls.c	common/syscall/rw.c
pread			vncalls.c	common/syscall/rw.c
pwrite			vncalls.c	common/syscall/rw.c
readv			vncalls.c	common/syscall/rw.c
writev			vncalls.c	common/syscall/rw.c

chdir			vncalls.c	common/syscall/chdir.c
fchdir			vncalls.c	common/syscall/chdir.c
chroot			vncalls.c	common/syscall/chdir.c
fchroot			vncalls.c	common/syscall/chdir.c

mknod			vncalls.c	common/syscall/mknod.c
xmknod			vncalls.c	common/syscall/mknod.c

mkdir			vncalls.c	common/syscall/mkdir.c

link			vncalls.c	common/syscall/link.c

rename			vncalls.c	common/syscall/rename.c

symlink			vncalls.c	common/syscall/symlink.c

unlink			vncalls.c	common/syscall/unlink.c

rmdir			vncalls.c	common/syscall/rmdir.c

getdents		vncalls.c	common/syscall/getdents.c

lseek			vncalls.c	common/syscall/lseek.c
llseek			vncalls.c	common/syscall/lseek.c

access			vncalls.c	common/syscall/access.c

stat			vncalls.c	common/syscall/stat.c
lstat			vncalls.c	common/syscall/stat.c
fstat			vncalls.c	common/syscall/stat.c
xstat			vncalls.c	common/syscall/stat.c
lxstat			vncalls.c	common/syscall/stat.c
fxstat			vncalls.c	common/syscall/stat.c

fpathconf		vncalls.c	common/syscall/pathconf.c
pathconf		vncalls.c	common/syscall/pathconf.c

readlink		vncalls.c	common/syscall/readlink.c

chmod			vncalls.c	common/syscall/chmod.c
fchmod			vncalls.c	common/syscall/chmod.c

chown			vncalls.c	common/syscall/chown.c
lchown			vncalls.c	common/syscall/chown.c
fchown			vncalls.c	common/syscall/chown.c

utime			vncalls.c	common/syscall/utime.c
utimes			vncalls.c	common/syscall/utime.c

fdsync			vncalls.c	common/syscall/fdsync.c

fcntl			vncalls.c	common/syscall/fcntl.c

dup			vncalls.c	common/syscall/dup.c

ioctl			vncalls.c	common/syscall/ioctl.c
stty			vncalls.c	common/syscall/ioctl.c
gtty			vncalls.c	common/syscall/ioctl.c

poll			vncalls.c	common/syscall/poll.c

acl			vncalls.c	common/syscall/acl.c
facl			vncalls.c	common/syscall/acl.c

mount			vfs.c		common/syscall/mount.c

statfs			vfs.c		common/syscall/statfs.c
fstatfs			vfs.c		common/syscall/statfs.c

statvfs			vfs.c		common/syscall/statvfs.c
fstatvfs		vfs.c		common/syscall/statvfs.c

sync			vfs.c		common/syscall/sync.c

sysfs			vfs.c		common/syscall/sysfs.c

umount			vfs.c		common/syscall/umount.c

nice			priocntl.c	common/syscall/nice.c

pipe			os/pipe.c	common/syscall/pipe.c

msgsys			os/msg.c	common/syscall/msg.c

semsys			os/sem.c	common/syscall/sem.c

shmsys			os/shm.c	common/syscall/shm.c

getcontext		sparc/archdep.c	sparc/syscall/getcontext.c
lwp_getprivate		sparc/archdep.c	sparc/syscall/lwp_private.c
lwp_setprivate		sparc/archdep.c	sparc/syscall/lwp_private.c

getcontext		i86/archdep.c	i86/syscall/getcontext.c
lwp_getprivate		i86/archdep.c	i86/syscall/lwp_private.c
lwp_setprivate		i86/archdep.c	i86/syscall/lwp_private.c

-----------------------------------------------------------------

Most of the system calls in this directory have been converted
to use C-style argument passing, instead of the old uap-pointer
method. This usually makes the system calls faster and more
"natural" in implementation.