 bef0e3eb63
			
		
	
	
		bef0e3eb63
		
	
	
	
	
		
			
			swapcontext, and makecontext). - Fix VM to not erroneously think the stack segment and data segment have collided when a user-space thread invokes brk(). - Add test51 to test ucontext functionality. - Add man pages for ucontext system calls.
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .TH GETCONTEXT 3  "Mar 2, 2010"
 | |
| .SH NAME
 | |
| getcontext, setcontext \- get and set current user context
 | |
| .SH SYNOPSIS
 | |
| .nf
 | |
| .ft B
 | |
| #include <ucontext.h>
 | |
| 
 | |
| int getcontext(ucontext\_t *\fIucp\fP)
 | |
| int setcontext(const ucontext\_t *\fIoucp\fP)
 | |
| .SH DESCRIPTION
 | |
| The
 | |
| .BR makecontext (3)
 | |
| , 
 | |
| .BR swapcontext (3)
 | |
| , 
 | |
| .BR getcontext (3)
 | |
| , and 
 | |
| .BR setcontext (3)
 | |
| together form a set of functions that allow user-level context switching between multiple threads of control within a process.
 | |
| .PP
 | |
| The \fIucontext_t\fP type is a structure that has at least the following members:
 | |
| .in +4
 | |
| .nf
 | |
| 
 | |
| typedef struct __ucontext {
 | |
|     ucontext_t *uc_link;
 | |
|     sigset_t    uc_sigmask;
 | |
|     stack_t     uc_stack;
 | |
|     mcontext_t  uc_mcontext;
 | |
|     ...
 | |
| } ucontext_t;
 | |
| 
 | |
| .fi
 | |
| .in
 | |
| with \fIsigset_t\fP and \fIstack_t\fP defined in
 | |
| .IR <signal.h> .
 | |
| Here \fIuc_link\fP points to the context that will be resumed when the current context returns (if \fIuc_link\fP is NULL, the process exits), \fIsigset_t\fP is the set of signals blocks in this context, \fIuc_stack\fP is the stack used by this context (when the context was modified by
 | |
| .BR makecontext (3)),
 | |
| and \fIuc_mcontext\fP is the machine-specific representation of the saved context. The \fImcontext_t\fP type is machine-dependent and opaque.
 | |
| .PP
 | |
| MINIX 3 has an additional \fIuc_flags\fP member that supports the following flags:
 | |
| .PP
 | |
| .in +2
 | |
| .nf
 | |
| UCF_IGNSIGM /* Current signal mask is not stored or restored */
 | |
| UCF_IGNFPU  /* FPU state is not stored or restored for this context */
 | |
| .fi
 | |
| .in
 | |
| .PP
 | |
| Not storing and restoring the signal mask and/or FPU state speeds up context switching considerably.
 | |
| .PP
 | |
| 
 | |
| The
 | |
| .BR getcontext ()
 | |
| function initializes the structure pointed to by \fIucp\fP to the current user context of the calling thread. 
 | |
| .PP
 | |
| The
 | |
| .BR setcontext ()
 | |
| function restores the user context pointed to by \fIucp\fP. A succesful call does not return; program execution resumes at the point specified by the \fIucp\fP argument passed to
 | |
| .BR setcontext ().
 | |
| The \fIucp\fP argument should be created either by a prior call to
 | |
| .BR getcontext ()
 | |
| or
 | |
| .BR makecontext ().
 | |
| If the \fIucp\fP argument was created with
 | |
| .BR getcontext (),
 | |
| program execution continues as if the corresponding call of
 | |
| .BR getcontext ()
 | |
| had just returned. If the \fIucp\fP argument was created with
 | |
| .BR makecontext (),
 | |
| program execution continues with the function passed to
 | |
| .BR makecontext ().
 | |
| 
 | |
| .SH "RETURN VALUE"
 | |
| When successful,
 | |
| .BR getcontext ()
 | |
| returns 0 and 
 | |
| .BR setcontext ()
 | |
| does not return. Otherwise, both return -1 and
 | |
| .I errno
 | |
| is set to indicate the error. 
 | |
| 
 | |
| .SH "ERRORS"
 | |
| .TP 15
 | |
| [EINVAL]
 | |
| The context is not properly initialized.
 | |
| .TP 15
 | |
| [EFAULT]
 | |
| \fIucp\fP is a NULL pointer.
 | |
| 
 | |
| .SH "SEE ALSO"
 | |
| .BR makecontext (3).
 | |
| 
 | |
| .SH "AUTHORS"
 | |
| Thomas Veerman
 |