Blob
1 #include "threadimpl.h"3 void4 makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)5 {6 ulong *sp, *tos;7 va_list arg;9 tos = (ulong*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/sizeof(ulong);10 sp = tos - 16;11 ucp->mc.pc = (long)func;12 ucp->mc.sp = (long)sp;13 va_start(arg, argc);14 ucp->mc.r3 = va_arg(arg, long);15 va_end(arg);16 }18 int19 swapcontext(ucontext_t *oucp, ucontext_t *ucp)20 {21 if(getcontext(oucp) == 0)22 setcontext(ucp);23 return 0;24 }