makecontext, swapcontext - manipulate user contexts
void makecontext(ucontext_t *ucp, (void *func)(), int argc, ...);
int swapcontext(ucontext_t *oucp, const ucontext_t *ucp);
The makecontext() function modifies the context specified by ucp,
which has been initialized using getcontext(). When this context is
resumed using swapcontext() or setcontext(), program execution
continues by calling func(), passing it the arguments that follow argc
in the makecontext() call.
Before a call is made to makecontext(), the context being modified
should have a stack allocated for it. The value of argc must match
the number of integer arguments passed to func(), otherwise the
behavior is undefined.
The uc_link member is used to determine the context that will be
resumed when the context being modified by makecontext() returns. The
uc_link member should be initialized prior to the call to
The swapcontext() function saves the current context in the context
structure pointed to by oucp and sets the context to the context
structure pointed to by ucp.
On successful completion, swapcontext() returns 0. Otherwise, -1 is
returned and errno is set to indicate the error.
Context APIs are not recommended due to possible compatibility
problems from release to release, because context APIs are very
architecture-specific. The context APIs "expose" the architecture to
the application, such that the application may not be compatible with
If you must use context APIs, be aware of the following:
+ Do not copy the context yourself. It is not contiguous. The
context may have pointers that may point back to the original
context rather than in the copied context; hence, it will be
+ The size of the context will vary in length from release to
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
The makecontext() and swapcontext() functions will fail if:
[ENOMEM] The ucp argument does not have enough
stack left to complete the operation.
exit(2), getcontext(2), sigaction(2), sigprocmask(2), <ucontext.h>.
First released in Issue 4, Version 2.
Hewlett-Packard Company - 2 - HP-UX Release 11i: November 2000