* Updating common/lib * Updating lib/csu * Updating lib/libc * Updating libexec/ld.elf_so * Corrected test on __minix in featuretest to actually follow the meaning of the comment. * Cleaned up _REENTRANT-related defintions. * Disabled -D_REENTRANT for libfetch * Removing some unneeded __NBSD_LIBC defines and tests Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
		
			
				
	
	
		
			170 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"	$NetBSD: makecontext.3,v 1.10 2012/05/04 12:28:03 joerg Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 2001, 2009 The NetBSD Foundation, Inc.
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" This code is derived from software contributed to The NetBSD Foundation
 | 
						|
.\" by Klaus Klein.
 | 
						|
.\"
 | 
						|
.\" 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.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
 | 
						|
.\"
 | 
						|
.Dd May 4, 2012
 | 
						|
.Dt MAKECONTEXT 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm makecontext ,
 | 
						|
.Nm swapcontext
 | 
						|
.Nd manipulate user contexts
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libc
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In ucontext.h
 | 
						|
.Ft void
 | 
						|
.Fn makecontext "ucontext_t *ucp" "void (*func)()" "int argc" ...
 | 
						|
.Ft int
 | 
						|
.Fn swapcontext "ucontext_t * restrict oucp" "ucontext_t * restrict ucp"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn makecontext
 | 
						|
function modifies the object pointed to by
 | 
						|
.Fa ucp ,
 | 
						|
which has been initialized using
 | 
						|
.Xr getcontext 2 .
 | 
						|
When this context is resumed using
 | 
						|
.Fn swapcontext
 | 
						|
or
 | 
						|
.Xr setcontext 2 ,
 | 
						|
program execution continues as if
 | 
						|
.Fa func
 | 
						|
had been called with the arguments specified after
 | 
						|
.Fa argc
 | 
						|
in the call of
 | 
						|
.Fn makecontext .
 | 
						|
The value of
 | 
						|
.Fa argc
 | 
						|
must be equal to the number of integer arguments following it,
 | 
						|
and must be equal to the number of integer arguments expected by
 | 
						|
.Fa func ;
 | 
						|
otherwise, the behavior is undefined.
 | 
						|
.Pp
 | 
						|
Before being modified using
 | 
						|
.Fn makecontext ,
 | 
						|
a stack must be allocated for the context (in the
 | 
						|
.Fa uc_stack
 | 
						|
member), and a context to resume after
 | 
						|
.Fa func
 | 
						|
has returned must be determined (pointed to by the
 | 
						|
.Fa uc_link
 | 
						|
member);
 | 
						|
otherwise, the behavior is undefined.
 | 
						|
If
 | 
						|
.Fa uc_link
 | 
						|
is a null pointer, then the context is the main context,
 | 
						|
and the process will exit with an exit status of 0 upon return.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn swapcontext
 | 
						|
function saves the current context in the object pointed to by
 | 
						|
.Fa oucp ,
 | 
						|
sets the current context to that specified in the object pointed to by
 | 
						|
.Fa ucp ,
 | 
						|
and resumes execution.
 | 
						|
When a context saved by
 | 
						|
.Fn swapcontext
 | 
						|
is restored using
 | 
						|
.Xr setcontext 2 ,
 | 
						|
execution will resume as if the corresponding invocation of
 | 
						|
.Fn swapcontext
 | 
						|
had just returned (successfully).
 | 
						|
.Sh RETURN VALUES
 | 
						|
The
 | 
						|
.Fn makecontext
 | 
						|
function returns no value.
 | 
						|
.Pp
 | 
						|
On success,
 | 
						|
.Fn swapcontext
 | 
						|
returns a value of 0,
 | 
						|
Otherwise, \-1 is returned and
 | 
						|
.Va errno
 | 
						|
is set to indicate the error.
 | 
						|
.Sh ERRORS
 | 
						|
The
 | 
						|
.Fn swapcontext
 | 
						|
function will fail if:
 | 
						|
.Bl -tag -width Er
 | 
						|
.It Bq Er EFAULT
 | 
						|
The
 | 
						|
.Fa oucp
 | 
						|
argument or the
 | 
						|
.Fa ucp
 | 
						|
argument points to an invalid address.
 | 
						|
.It Bq Er EINVAL
 | 
						|
The contents of the datum pointed to by
 | 
						|
.Fa ucp
 | 
						|
are invalid.
 | 
						|
.El
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr _exit 2 ,
 | 
						|
.Xr getcontext 2 ,
 | 
						|
.Xr setcontext 2 ,
 | 
						|
.Xr ucontext 2
 | 
						|
.Sh STANDARDS
 | 
						|
The
 | 
						|
.Fn makecontext
 | 
						|
and
 | 
						|
.Fn swapcontext
 | 
						|
functions conform to
 | 
						|
.St -xsh5
 | 
						|
and
 | 
						|
.St -p1003.1-2001 .
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.St -p1003.1-2004
 | 
						|
revision marked the functions
 | 
						|
.Fn makecontext
 | 
						|
and
 | 
						|
.Fn swapcontext
 | 
						|
as obsolete, citing portability issues and recommending the use of
 | 
						|
.Tn POSIX
 | 
						|
threads instead.
 | 
						|
The
 | 
						|
.St -p1003.1-2008
 | 
						|
revision removed the functions from the specification.
 | 
						|
.Pp
 | 
						|
.Bf -symbolic
 | 
						|
The standard does not clearly define the type of integer arguments
 | 
						|
passed to
 | 
						|
.Fa func
 | 
						|
via
 | 
						|
.Fn makecontext ;
 | 
						|
portable applications should not rely on the implementation detail that
 | 
						|
it may be possible to pass pointer arguments to functions.
 | 
						|
.Ef
 | 
						|
This may be clarified in a future revision of the standard.
 | 
						|
.Sh HISTORY
 | 
						|
The
 | 
						|
.Fn makecontext
 | 
						|
and
 | 
						|
.Fn swapcontext
 | 
						|
functions first appeared in
 | 
						|
.At V.4 .
 |