syscall man page on MirBSD

Man page or keyword search:  
man Server   6113 pages
apropos Keyword Search (all sections)
Output format
MirBSD logo
[printable version]

SYSCALL(9)		      BSD Kernel Manual			    SYSCALL(9)

NAME
     syscall - system calls overview

DESCRIPTION
     System calls in the kernel are implemented through a set of switch tables
     for each emulation type. Each table is generated from the "master" file
     by sys/kern/makesyscalls.sh through the appropriate rules in the
     Makefile.

     The "master" file is a text file consisting of a list of lines for each
     system call. Lines may be split by the means of back slashing the end of
     the line. Each line is a set of fields separated by whitespace:

	   number type ...

     Where:
     number  is the system call number;
     type    is one of:
	     STD	 always included;
	     OBSOL	 obsolete, not included in the system;
	     UNIMPL	 unimplemented, not included in the system;
	     NODEF	 included, but don't define the syscall number;
	     NOARGS	 included, but don't define the syscall args struc-
			 ture;
	     INDIR	 included, but don't define the syscall args struc-
			 ture, and allow it to be "really" varargs;
	     COMPAT_XX	 a compatibility system call, only included if the
			 corresponding option is configured for the kernel
			 (see options(4)).

     The rest of the line for the STD, NODEF, NOARGS, and COMPAT_XX types is:

	   { pseudo-proto } [alias]

     pseudo-proto is a C-like prototype used to generate the system call argu-
     ment list, and alias is an optional name alias for the call. The function
     in the prototype has to be defined somewhere in the kernel sources as it
     will be used as an entry point for the corresponding system call.

     For other types the rest of the line is a comment.

     To generate the header and code files from the "master" file a make(1)
     command has to be run from the directory containing the "master" file.

  Usage
     Entry from the user space for the system call is machine dependent. Typi-
     cal code to invoke a system call from the machine dependent sources might
     look like this:

		   const struct sysent *callp;
		   register_t code, args[8], rval[2];
		   struct proc *p = curproc;
		   int code, nsys;

	   ...

	   /* ``code'' is the system call number passed from the user space */

	   ...

	   if (code < 0 || code >= nsys)
		   callp += p->p_emul->e_nosys;	   /* illegal */
	   else
		   callp += code;

	   /* copyin the arguments from the user space */
	   ...

	   #ifdef SYSCALL_DEBUG
		   scdebug_call(p, code, args);
	   #endif
	   #ifdef KTRACE
		   if (KTRPOINT(p, KTR_SYSCALL))
			   ktrsyscall(p, code, argsize, args);
	   #endif
		   rval[0] = 0;
	   #if NSYSTRACE > 0
		   if (ISSET(p->p_flag, P_SYSTRACE))
			   error = systrace_redirect(code, p, args, rval);
		   else
	   #endif
			   error = (*callp->sy_call)(p, args, rval);
		   switch (error) {
		   case 0:
			   /* normal return */
			   ...
			   break;
		   case ERESTART:
			   /*
			    * adjust PC to point before the system call
			    * in the user space in order for the return
			    * back there we reenter the kernel to repeat
			    * the same system call
			    */
			   ...
			   break;
		   case EJUSTRETURN:
			   /* just return */
			   break;
		   default:
			   /*
			    * an error returned:
			    *	   call an optional emulation errno mapping
			    *	   routine and return back to the user.
			    */
			   if (p->p_emul->e_errno)
				   error = p->p_emul->e_errno[error];
			   ...
			   break;
		   }
	   #ifdef SYSCALL_DEBUG
		   scdebug_ret(p, code, orig_error, rval);
	   #endif
		   userret(p, frame.tf_eip, sticks);
	   #ifdef KTRACE
		   if (KTRPOINT(p, KTR_SYSRET))
			   ktrsysret(p, code, orig_error, rval[0]);
	   #endif

     The "SYSCALL_DEBUG" parts of the code are explained in the section
     Debugging later in the document. For the "KTRACE" portions of the code
     refer to the ktrace(9) document for further explanations. "NSYSTRACE" is
     a system call tracing facility and is explained in the systrace(9) and
     systrace(4) documents.

  Debugging
     For debugging purposes the line

	   option SYSCALL_DEBUG

     should be included in the kernel configuration file (see options(4)).
     This allows tracing for calls, returns, and arguments for both implement-
     ed and non-implemented system calls. A global integer variable contains a
     mask for the desired logging events:

     SCDEBUG_CALLS	 (0x0001) show calls;
     SCDEBUG_RETURNS	 (0x0002) show returns;
     SCDEBUG_ALL	 (0x0004) show even syscalls that are implemented;
     SCDEBUG_SHOWARGS	 (0x0008) show arguments to calls.

     Use ddb(4) to set the "scdebug" to a value desired.

CODE REFERENCES
     sys/kern/makesyscalls.sh  a sh(1) script for generating C files out of
			       the syscall master file;
     sys/{kern,compat/*}/syscalls.conf
			       a configuration file for the shell script
			       above;
     sys/{kern,compat/*}/syscalls.master
			       master files describing names and numbers for
			       the system calls;
     sys/{kern/,compat/*/*_}syscalls.c
			       system call names lists;
     sys/{kern/init,compat/*/*}_sysent.c
			       system call switch tables;
     sys/{sys/,compat/*/*_}syscallargs.h
			       system call argument lists;
     sys/{sys/,compat/*/*_}syscall.h
			       system call numbers.

SEE ALSO
     ktrace(2), syscall(2), systrace(4), ktrace(9), systrace(9)

HISTORY
     The syscall section manual page appeared in OpenBSD 3.4.

MirOS BSD #10-current		July 21, 2003				     2
[top]

List of man pages available for MirBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net