Blob
1 #include "threadimpl.h"3 void4 makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)5 {6 int *sp;8 sp = (int*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/4;9 sp -= argc;10 memmove(sp, &argc+1, argc*sizeof(int));11 *--sp = 0; /* return address */12 ucp->uc_mcontext.mc_eip = (long)func;13 ucp->uc_mcontext.mc_esp = (int)sp;14 }16 int17 swapcontext(ucontext_t *oucp, ucontext_t *ucp)18 {19 if(getcontext(oucp) == 0)20 setcontext(ucp);21 return 0;22 }