Blame


1 cea10000 2005-05-01 devnull #include "threadimpl.h"
2 cea10000 2005-05-01 devnull
3 cea10000 2005-05-01 devnull void
4 cea10000 2005-05-01 devnull makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
5 cea10000 2005-05-01 devnull {
6 cea10000 2005-05-01 devnull ulong *sp, *tos;
7 cea10000 2005-05-01 devnull va_list arg;
8 cea10000 2005-05-01 devnull
9 cea10000 2005-05-01 devnull tos = (ulong*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/sizeof(ulong);
10 cea10000 2005-05-01 devnull sp = (ulong*)((ulong)(tos-16) & ~15);
11 cea10000 2005-05-01 devnull ucp->mc.pc = (long)func;
12 cea10000 2005-05-01 devnull ucp->mc.sp = (long)sp;
13 cea10000 2005-05-01 devnull va_start(arg, argc);
14 cea10000 2005-05-01 devnull ucp->mc.r3 = va_arg(arg, long);
15 cea10000 2005-05-01 devnull va_end(arg);
16 cea10000 2005-05-01 devnull }
17 cea10000 2005-05-01 devnull
18 cea10000 2005-05-01 devnull int
19 cea10000 2005-05-01 devnull swapcontext(ucontext_t *oucp, ucontext_t *ucp)
20 cea10000 2005-05-01 devnull {
21 cea10000 2005-05-01 devnull if(getcontext(oucp) == 0)
22 cea10000 2005-05-01 devnull setcontext(ucp);
23 cea10000 2005-05-01 devnull return 0;
24 cea10000 2005-05-01 devnull }
25 cea10000 2005-05-01 devnull