type mcontext_t

type ucontext_t

element ucontext_t {ucontext_t*} uc_link
element ucontext_t sigset_t uc_sigmask
element ucontext_t stack_t uc_stack
element ucontext_t mcontext_t uc_mcontext

type sigset_t
type stack_t

function int getcontext (ucontext_t*)
function int setcontext (const ucontext_t*)
function void makecontext (ucontext_t*, void(*)(void), int, ...)
function int swapcontext (ucontext_t*, const ucontext_t*)

allow uc_*
allow ss_*
allow *_t
