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