100 lines
3.8 KiB
Groff
100 lines
3.8 KiB
Groff
.\" $NetBSD: syscall.2,v 1.18 2009/08/07 19:34:46 dsl Exp $
|
|
.\"
|
|
.\" Copyright (c) 1980, 1991, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" @(#)syscall.2 8.1 (Berkeley) 6/16/93
|
|
.\"
|
|
.Dd August 7, 2009
|
|
.Dt SYSCALL 2
|
|
.Os
|
|
.Sh NAME
|
|
.Nm syscall ,
|
|
.Nm __syscall
|
|
.Nd indirect system call
|
|
.Sh LIBRARY
|
|
.Lb libc
|
|
.Sh SYNOPSIS
|
|
.In sys/syscall.h
|
|
.In unistd.h
|
|
.Ft int
|
|
.Fn syscall "int number" "..."
|
|
.Ft quad_t
|
|
.Fn __syscall "quad_t number" "..."
|
|
.Sh DESCRIPTION
|
|
.Fn syscall
|
|
performs the system call whose assembly language
|
|
interface has the specified
|
|
.Fa number
|
|
with the specified arguments.
|
|
Symbolic constants for system calls can be found in the header file
|
|
.Ao Pa sys/syscall.h Ac .
|
|
The
|
|
.Nm __syscall
|
|
form should be used when one or more of the parameters is a
|
|
64-bit argument to ensure that argument alignment is correct.
|
|
.Pp
|
|
This system call is useful for testing new system calls that
|
|
do not have entries in the C library.
|
|
It should not be used in normal applications.
|
|
.Sh RETURN VALUES
|
|
The return values are defined by the system call being invoked.
|
|
In general, a 0 return value indicates success.
|
|
A \-1 return value indicates an error,
|
|
and an error code is stored in
|
|
.Va errno .
|
|
.Sh HISTORY
|
|
The
|
|
.Fn syscall
|
|
function call appeared in
|
|
.Bx 4.0 .
|
|
.Sh BUGS
|
|
There is no way to simulate system calls that have multiple return values
|
|
such as
|
|
.Xr pipe 2 .
|
|
.Pp
|
|
Since architectures return 32 bit and 64 bit results in different registers,
|
|
it may be impossible to portably convert the result of
|
|
.Fn __syscall
|
|
to a 32bit value.
|
|
For instance sparc returns 32 bit values in %o0 and 64 bit values in %o0:%o1
|
|
(with %o0 containing the most significant part) so a 32 bit right shift
|
|
of the result is needed to get a correct 32 bit result.
|
|
.Pp
|
|
Many architectures mask off the unwanted high bits of the syscall number,
|
|
rather than returning an error.
|
|
.Pp
|
|
Due to ABI implementation differences in passing struct or union
|
|
type arguments to system calls between different processors, all
|
|
system calls pass instead pointers to such structs or unions, even
|
|
when the documentation of the system call mentions otherwise.
|
|
The conversion between passing structs and unions is handled normally
|
|
via userland stubs.
|
|
The correct arguments for the kernel entry
|
|
points for each system call can be found in the header file
|
|
.Ao Pa sys/syscallargs.h Ac
|