new syscalls

This commit is contained in:
cgd 1994-05-07 03:27:01 +00:00
parent 081527a861
commit fc7bd30680
3 changed files with 489 additions and 0 deletions

161
lib/libc/sys/mlock.2 Normal file
View File

@ -0,0 +1,161 @@
.\" Copyright (c) 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. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. 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.
.\"
.\" @(#)mlock.2 8.2 (Berkeley) 12/11/93
.\"
.Dd June 2, 1993
.Dt MLOCK 2
.Os
.Sh NAME
.Nm mlock ,
.Nm munlock
.Nd lock (unlock) physical pages in memory
.Sh SYNOPSIS
.Fd #include <sys/types.h>
.Fd #include <sys/mman.h>
.Ft int
.Fn mlock "caddr_t addr" "size_t len"
.Ft int
.Fn munlock "caddr_t addr" "size_t len"
.Sh DESCRIPTION
The
.Nm mlock
system call
locks into memory the physical pages associated with the virtual address
range starting at
.Fa addr
for
.Fa len
bytes.
The
.Nm munlock
call unlocks pages previously locked by one or more
.Nm mlock
calls.
For both, the
.Fa addr
parameter should be aligned to a multiple of the page size.
If the
.Fa len
parameter is not a multiple of the page size, it will be rounded up
to be so.
The entire range must be allocated.
.Pp
After an
.Nm mlock
call, the indicated pages will cause neither a non-resident page
nor address-translation fault until they are unlocked.
They may still cause protection-violation faults or TLB-miss faults on
architectures with software-managed TLBs.
The physical pages remain in memory until all locked mappings for the pages
are removed.
Multiple processes may have the same physical pages locked via their own
virtual address mappings.
A single process may likewise have pages multiply-locked via different virtual
mappings of the same pages or via nested
.Nm mlock
calls on the same address range.
Unlocking is performed explicitly by
.Nm munlock
or implicitly by a call to
.Nm munmap
which deallocates the unmapped address range.
Locked mappings are not inherited by the child process after a
.Xr fork 2 .
.Pp
Since physical memory is a potentially scarce resource, processes are
limited in how much they can lock down.
A single process can
.Nm mlock
the minimum of
a system-wide ``wired pages'' limit and
the per-process
.Li RLIMIT_MEMLOCK
resource limit.
.Sh RETURN VALUES
A return value of 0 indicates that the call
succeeded and all pages in the range have either been locked or unlocked.
A return value of -1 indicates an error occurred and the locked
status of all pages in the range remains unchanged.
In this case, the global location
.Va errno
is set to indicate the error.
.Sh ERRORS
.Fn Mlock
will fail if:
.Bl -tag -width Er
.It Bq Er EINVAL
The address given is not page aligned or the length is negative.
.It Bq Er EAGAIN
Locking the indicated range would exceed either the system or per-process
limit for locked memory.
.It Bq Er ENOMEM
Some portion of the indicated address range is not allocated.
There was an error faulting/mapping a page.
.El
.Fn Munlock
will fail if:
.Bl -tag -width Er
.It Bq Er EINVAL
The address given is not page aligned or the length is negative.
.It Bq Er ENOMEM
Some portion of the indicated address range is not allocated.
Some portion of the indicated address range is not locked.
.El
.Sh "SEE ALSO"
.Xr fork 2 ,
.Xr mmap 2 ,
.Xr munmap 2 ,
.Xr setrlimit 2 ,
.Xr getpagesize 3
.Sh BUGS
Unlike The Sun implementation, multiple
.Nm mlock
calls on the same address range require the corresponding number of
.Nm munlock
calls to actually unlock the pages, i.e.
.Nm mlock
nests.
This should be considered a consequence of the implementation
and not a feature.
.Pp
The per-process resource limit is a limit on the amount of virtual
memory locked, while the system-wide limit is for the number of locked
physical pages.
Hence a process with two distinct locked mappings of the same physical page
counts as 2 pages against the per-process limit and as only a single page
in the system limit.
.Sh HISTORY
The
.Fn mlock
and
.Fn munlock
functions first appeared in 4.4BSD.

163
lib/libc/sys/pathconf.2 Normal file
View File

@ -0,0 +1,163 @@
.\" Copyright (c) 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. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. 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.
.\"
.\" @(#)pathconf.2 8.1 (Berkeley) 6/4/93
.\"
.Dd June 4, 1993
.Dt PATHCONF 2
.Os BSD 4
.Sh NAME
.Nm pathconf ,
.Nm fpathconf
.Nd get configurable pathname variables
.Sh SYNOPSIS
.Fd #include <unistd.h>
.Ft long
.Fn pathconf "const char *path" "int name"
.Ft long
.Fn fpathconf "int fd" "int name"
.Sh DESCRIPTION
.Pp
The
.Fn pathconf
and
.Fn fpathconf
functions provides a method for applications to determine the current
value of a configurable system limit or option variable associated
with a pathname or file descriptor.
.Pp
For
.Nm pathconf ,
the
.Fa path
argument is the name of a file or directory.
For
.Nm fpathconf ,
the
.Fa fd
argument is an open file descriptor.
The
.Fa name
argument specifies the system variable to be queried.
Symbolic constants for each name value are found in the include file
.Li <unistd.h> .
.Pp
The available values are as follows:
.Pp
.Bl -tag -width "123456"
.Pp
.It Li _PC_LINK_MAX
The maximum file link count.
.It Li _PC_MAX_CANON
The maximum number of bytes in terminal canonical input line.
.It Li _PC_MAX_INPUT
The minimum maximum number of bytes for which space is available in
a terminal input queue.
.It Li _PC_NAME_MAX
The maximum number of bytes in a file name.
.It Li _PC_PATH_MAX
The maximum number of bytes in a pathname.
.It Li _PC_PIPE_BUF
The maximum number of bytes which will be written atomically to a pipe.
.It Li _PC_CHOWN_RESTRICTED
Return 1 if appropriate privileges are required for the
.Xr chown 2
system call, otherwise 0.
.It Li _PC_NO_TRUNC
Return 1 if file names longer than KERN_NAME_MAX are truncated.
.It Li _PC_VDISABLE
Returns the terminal character disabling value.
.El
.Sh RETURN VALUES
If the call to
.Nm pathconf
or
.Nm fpathconf
is not successful, \-1 is returned and
.Va errno
is set appropriately.
Otherwise, if the variable is associated with functionality that does
not have a limit in the system, \-1 is returned and
.Va errno
is not modified.
Otherwise, the current variable value is returned.
.Sh ERRORS
If any of the following conditions occur, the
.Nm pathconf
and
.Nm fpathconf
functions shall return -1 and set
.Va errno
to the corresponding value.
.Bl -tag -width Er
.It Bq Er EINVAL
The value of the
.Fa name
argument is invalid.
.It Bq Er EINVAL
The implementation does not support an association of the variable
name with the associated file.
.El
.Fn Pathconf
will fail if:
.Bl -tag -width ENAMETOOLONGAA
.It Bq Er ENOTDIR
A component of the path prefix is not a directory.
.It Bq Er ENAMETOOLONG
A component of a pathname exceeded 255 characters,
or an entire path name exceeded 1023 characters.
.It Bq Er ENOENT
The named file does not exist.
.It Bq Er EACCES
Search permission is denied for a component of the path prefix.
.It Bq Er ELOOP
Too many symbolic links were encountered in translating the pathname.
.It Bq Er EIO
An I/O error occurred while reading from or writing to the file system.
.El
.Pp
.Bl -tag -width [EFAULT]
.Fn Fpathconf
will fail if:
.It Bq Er EBADF
.Fa fd
is not a valid open file descriptor.
.It Bq Er EIO
An I/O error occurred while reading from or writing to the file system.
.El
.Sh SEE ALSO
.Xr sysctl 3
.Sh HISTORY
The
.Nm pathconf
and
.Nm fpathconf
functions first appeared in 4.4BSD.

165
lib/libc/sys/sigaltstack.2 Normal file
View File

@ -0,0 +1,165 @@
.\" Copyright (c) 1983, 1991, 1992, 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. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. 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.
.\"
.\" @(#)sigaltstack.2 8.1 (Berkeley) 6/4/93
.\"
.Dd June 4, 1993
.Dt SIGALTSTACK 2
.Os BSD 4.2
.Sh NAME
.Nm sigaltstack
.Nd set and/or get signal stack context
.Sh SYNOPSIS
.Fd #include <sys/types.h>
.Fd #include <signal.h>
.Bd -literal
struct sigaltstack {
caddr_t ss_sp;
long ss_size;
int ss_flags;
};
.Ed
.Ft int
.Fn sigaltstack "const struct sigaltstack *ss" "struct sigaltstack *oss"
.Sh DESCRIPTION
.Fn Sigaltstack
allows users to define an alternate stack on which signals
are to be processed.
If
.Fa ss
is non-zero,
it specifies a pointer to and the size of a
.Em "signal stack"
on which to deliver signals,
and tells the system if the process is currently executing
on that stack.
When a signal's action indicates its handler
should execute on the signal stack (specified with a
.Xr sigaction 2
call), the system checks to see
if the process is currently executing on that stack.
If the process is not currently executing on the signal stack,
the system arranges a switch to the signal stack for the
duration of the signal handler's execution.
.Pp
If
.Dv SA_DISABLE
is set in
.Fa ss_flags ,
.Fa ss_sp
and
.Fa ss_size
are ignored and the signal stack will be disabled.
Trying to disable an active stack will cause
.Nm
to return -1 with
.Va errno
set to
.Dv EINVAL .
A disabled stack will cause all signals to be
taken on the regular user stack.
If the stack is later re-enabled then all signals that were specified
to be processed on an alternate stack will resume doing so.
.Pp
If
.Fa oss
is non-zero, the current signal stack state is returned.
The
.Fa ss_flags
field will contain the value
.Dv SA_ONSTACK
if the process is currently on a signal stack and
.Dv SA_DISABLE
if the signal stack is currently disabled.
.Sh NOTES
The value
.Dv SIGSTKSZ
is defined to be the number of bytes/chars that would be used to cover
the usual case when allocating an alternate stack area.
The following code fragment is typically used to allocate an alternate stack.
.Bd -literal -offset indent
if ((sigstk.ss_sp = malloc(SIGSTKSZ)) == NULL)
/* error return */
sigstk.ss_size = SIGSTKSZ;
sigstk.ss_flags = 0;
if (sigaltstack(&sigstk,0) < 0)
perror("sigaltstack");
.Ed
An alternative approach is provided for programs with signal handlers
that require a specific amount of stack space other than the default size.
The value
.Dv MINSIGSTKSZ
is defined to be the number of bytes/chars that is required by
the operating system to implement the alternate stack feature.
In computing an alternate stack size,
programs should add
.Dv MINSIGSTKSZ
to their stack requirements to allow for the operating system overhead.
.Pp
Signal stacks are automatically adjusted for the direction of stack
growth and alignment requirements.
Signal stacks may or may not be protected by the hardware and
are not ``grown'' automatically as is done for the normal stack.
If the stack overflows and this space is not protected
unpredictable results may occur.
.Sh RETURN VALUES
Upon successful completion, a value of 0 is returned.
Otherwise, a value of -1 is returned and
.Va errno
is set to indicate the error.
.Sh ERRORS
.Fn Sigstack
will fail and the signal stack context will remain unchanged
if one of the following occurs.
.Bl -tag -width [ENOMEM]
.It Bq Er EFAULT
Either
.Fa ss
or
.Fa oss
points to memory that is not a valid part of the process
address space.
.It Bq Er EINVAL
An attempt was made to disable an active stack.
.It Bq Er ENOMEM
Size of alternate stack area is less than or equal to
.Dv MINSIGSTKSZ .
.El
.Sh SEE ALSO
.Xr sigaction 2 ,
.Xr setjmp 3
.Sh HISTORY
The predecessor to
.Nm sigaltstack ,
the
.Fn sigstack
system call, appeared in
.Bx 4.2 .