Blob


1 #include "threadimpl.h"
3 void
4 makecontext(ucontext_t *uc, void (*fn)(void), int argc, ...)
5 {
6 int i, *sp;
7 va_list arg;
9 sp = (int*)uc->uc_stack.ss_sp+uc->uc_stack.ss_size/4;
10 va_start(arg, argc);
11 for(i=0; i<4 && i<argc; i++)
12 (&uc->uc_mcontext.arm_r0)[i] = va_arg(arg, uint);
13 va_end(arg);
14 uc->uc_mcontext.arm_sp = (uint)sp;
15 uc->uc_mcontext.arm_lr = (uint)fn;
16 }
18 int
19 swapcontext(ucontext_t *oucp, const ucontext_t *ucp)
20 {
21 if(getcontext(oucp) == 0)
22 setcontext(ucp);
23 return 0;
24 }