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 getcontext(ucontext_t *uc)
20 50f7ec33 2005-01-07 devnull {
21 b8f742db 2005-01-11 devnull return _getmcontext(&uc->mc);
22 50f7ec33 2005-01-07 devnull }
23 50f7ec33 2005-01-07 devnull
24 50f7ec33 2005-01-07 devnull int
25 50f7ec33 2005-01-07 devnull setcontext(ucontext_t *uc)
26 50f7ec33 2005-01-07 devnull {
27 b8f742db 2005-01-11 devnull _setmcontext(&uc->mc);
28 b8f742db 2005-01-11 devnull return 0;
29 50f7ec33 2005-01-07 devnull }
30 50f7ec33 2005-01-07 devnull
31 50f7ec33 2005-01-07 devnull int
32 50f7ec33 2005-01-07 devnull swapcontext(ucontext_t *oucp, ucontext_t *ucp)
33 50f7ec33 2005-01-07 devnull {
34 50f7ec33 2005-01-07 devnull if(getcontext(oucp) == 0)
35 50f7ec33 2005-01-07 devnull setcontext(ucp);
36 50f7ec33 2005-01-07 devnull return 0;
37 50f7ec33 2005-01-07 devnull }
38 50f7ec33 2005-01-07 devnull