1 110c707d 2006-04-21 devnull #include "threadimpl.h"
4 110c707d 2006-04-21 devnull makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
8 110c707d 2006-04-21 devnull sp = (int*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/4;
9 110c707d 2006-04-21 devnull sp -= argc;
11 fa07e3d7 2006-04-22 devnull * Stack pointer at call instruction (before return address
12 fa07e3d7 2006-04-22 devnull * gets pushed) must be 16-byte aligned.
14 fa07e3d7 2006-04-22 devnull if((uintptr)sp%4)
16 fa07e3d7 2006-04-22 devnull while((uintptr)sp%16)
18 110c707d 2006-04-21 devnull memmove(sp, &argc+1, argc*sizeof(int));
19 110c707d 2006-04-21 devnull *--sp = 0; /* return address */
20 110c707d 2006-04-21 devnull ucp->uc_mcontext.mc_eip = (long)func;
21 110c707d 2006-04-21 devnull ucp->uc_mcontext.mc_esp = (int)sp;
25 110c707d 2006-04-21 devnull swapcontext(ucontext_t *oucp, ucontext_t *ucp)
27 110c707d 2006-04-21 devnull if(getcontext(oucp) == 0)
28 110c707d 2006-04-21 devnull setcontext(ucp);
29 110c707d 2006-04-21 devnull return 0;