Blob


1 #include "threadimpl.h"
3 void
4 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 int
19 swapcontext(ucontext_t *oucp, ucontext_t *ucp)
20 {
21 if(getcontext(oucp) == 0)
22 setcontext(ucp);
23 return 0;
24 }