Blame


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