#include "threadimpl.h" void makecontext(ucontext_t *uc, void (*fn)(void), int argc, ...) { int i, *sp; va_list arg; sp = (int*)uc->uc_stack.ss_sp+uc->uc_stack.ss_size/4; va_start(arg, argc); for(i=0; i<4 && iuc_mcontext.arm_r0)[i] = va_arg(arg, uint); va_end(arg); uc->uc_mcontext.arm_sp = (uint)sp; uc->uc_mcontext.arm_lr = (uint)fn; } int swapcontext(ucontext_t *oucp, const ucontext_t *ucp) { if(getcontext(oucp) == 0) setcontext(ucp); return 0; }