April 16, 2009 MAKECONTEXT 3

### NAME

makecontext, swapcontext - manipulate user contexts

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```void` makecontext(```ucontext_t *ucp``, void (*func)()``, int argc``, ...`)
```int` swapcontext(```ucontext_t * restrict oucp``, ucontext_t * restrict ucp`)

### DESCRIPTION

The makecontext(``) function modifies the object pointed to by ```ucp`, which has been initialized using getcontext(2). When this context is resumed using swapcontext(``) or setcontext(2), program execution continues as if ```func` had been called with the arguments specified after ```argc` in the call of makecontext(``). The value of ```argc` must be equal to the number of integer arguments following it, and must be equal to the number of integer arguments expected by ```func`; otherwise, the behavior is undefined.

Before being modified using makecontext(``), a stack must be allocated for the context (in the ```uc_stack` member), and a context to resume after ```func` has returned must be determined (pointed to by the ```uc_link` member); otherwise, the behavior is undefined. If ```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.

The swapcontext(``) function saves the current context in the object pointed to by ```oucp`, sets the current context to that specified in the object pointed to by ```ucp`, and resumes execution. When a context saved by swapcontext(``) is restored using setcontext(2), execution will resume as if the corresponding invocation of swapcontext(``) had just returned (successfully).

### RETURN VALUES

The makecontext(``) function returns no value.

On success, swapcontext(``) returns a value of 0, Otherwise, -1 is returned and errno is set to indicate the error.

### ERRORS

The swapcontext(``) function will fail if:

[```EFAULT`]
  The ```oucp` argument or the the ```ucp` argument points to an invalid address.

[```EINVAL`]
  The contents of the datum pointed to by ```ucp` are invalid.

### SEE ALSO

_exit(2), getcontext(2), setcontext(2), ucontext(2)

### STANDARDS

The makecontext(``) and swapcontext(``) functions conform to X/Open System Interfaces and Headers Issue 5 (``XSH5'') .

The standard does not clearly define the type of integer arguments passed to ```func` via makecontext(``); portable applications should not rely on the implementation detail that it may be possible to pass pointer arguments to functions. This may be clarified in a future revision of the standard.

### HISTORY

The makecontext(``) and swapcontext(``) functions first appeared in `AT&T` System V.4 `UNIX`.

### CAVEATS

Due to limitations in the current pthread implementation, makecontext should not be used in programs which link against the pthread(3) library (whether threads are used or not).