MAKECONTEXT(3)             Linux Programmer's Manual            MAKECONTEXT(3)

       makecontext, swapcontext - manipulate user context

       #include <ucontext.h>

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

       In  a  SysV-like  environment,  one  has the type ucontext_t defined in
       <ucontext.h> and the four functions getcontext(),  setcontext(),  make-
       context()  and  swapcontext()  that  allow user-level context switching
       between multiple threads of control within a process.

       For the type and the first two functions, see getcontext(2).

       The makecontext() function modifies  the  context  pointed  to  by  ucp
       (which was obtained from a call to getcontext()).  Before calling make-
       context(), one should allocate a new stack for this context,  assigning
       to   ucp->uc_stack,  and  define  a  successor  context,  assigning  to
       ucp->uc_link.  When this context is later activated (using setcontext()
       or  swapcontext())  then  first  the  function func is called, with the
       arguments specified following argc (where argc must contain the  number
       of these arguments), and when this function returns, the successor con-
       text is activated. When the successor  context  pointer  is  NULL,  the
       thread exits.

       The  swapcontext()  function saves the current context in the structure
       pointed to by oucp, and then activates the context pointed to by ucp.

       When successful, makecontext() returns 0  and  swapcontext()  does  not
       return.  (But  we may return later, in case oucp is activated, in which
       case it looks like swapcontext() returns 0.)  On error, both return  -1
       and set errno appropriately.

       ENOMEM Insufficient stack space left.

       The  interpretation  of  ucp->uc_stack  is  just  as in sigaltstack(2),
       namely, this struct contains start and length of a memory  area  to  be
       used  as stack, regardless of the direction of growth of the stack. So,
       it is not necessary for the user program to worry about this direction.

       SUSv2, POSIX 1003.1-2001.

       getcontext(2),     sigaction(2),     sigaltstack(2),    sigprocmask(2),

Linux 2.4                         2001-11-15                    MAKECONTEXT(3)