Blame


1 04e0a9bb 2011-10-14 rsc #define setcontext(u) libthread_setmcontext(&(u)->mc)
2 04e0a9bb 2011-10-14 rsc #define getcontext(u) libthread_getmcontext(&(u)->mc)
3 04e0a9bb 2011-10-14 rsc typedef struct mcontext mcontext_t;
4 04e0a9bb 2011-10-14 rsc typedef struct ucontext ucontext_t;
5 04e0a9bb 2011-10-14 rsc
6 04e0a9bb 2011-10-14 rsc struct mcontext
7 04e0a9bb 2011-10-14 rsc {
8 04e0a9bb 2011-10-14 rsc uintptr ax;
9 04e0a9bb 2011-10-14 rsc uintptr bx;
10 04e0a9bb 2011-10-14 rsc uintptr cx;
11 04e0a9bb 2011-10-14 rsc uintptr dx;
12 04e0a9bb 2011-10-14 rsc uintptr si;
13 04e0a9bb 2011-10-14 rsc uintptr di;
14 04e0a9bb 2011-10-14 rsc uintptr bp;
15 04e0a9bb 2011-10-14 rsc uintptr sp;
16 04e0a9bb 2011-10-14 rsc uintptr r8;
17 04e0a9bb 2011-10-14 rsc uintptr r9;
18 04e0a9bb 2011-10-14 rsc uintptr r10;
19 04e0a9bb 2011-10-14 rsc uintptr r11;
20 04e0a9bb 2011-10-14 rsc uintptr r12;
21 04e0a9bb 2011-10-14 rsc uintptr r13;
22 04e0a9bb 2011-10-14 rsc uintptr r14;
23 04e0a9bb 2011-10-14 rsc uintptr r15;
24 04e0a9bb 2011-10-14 rsc /*
25 04e0a9bb 2011-10-14 rsc // XXX: currently do not save vector registers or floating-point state
26 04e0a9bb 2011-10-14 rsc */
27 04e0a9bb 2011-10-14 rsc };
28 04e0a9bb 2011-10-14 rsc
29 04e0a9bb 2011-10-14 rsc struct ucontext
30 04e0a9bb 2011-10-14 rsc {
31 04e0a9bb 2011-10-14 rsc struct {
32 04e0a9bb 2011-10-14 rsc void *ss_sp;
33 04e0a9bb 2011-10-14 rsc uint ss_size;
34 04e0a9bb 2011-10-14 rsc } uc_stack;
35 04e0a9bb 2011-10-14 rsc sigset_t uc_sigmask;
36 04e0a9bb 2011-10-14 rsc mcontext_t mc;
37 04e0a9bb 2011-10-14 rsc };
38 04e0a9bb 2011-10-14 rsc
39 04e0a9bb 2011-10-14 rsc void makecontext(ucontext_t*, void(*)(void), int, ...);
40 04e0a9bb 2011-10-14 rsc int swapcontext(ucontext_t*, ucontext_t*);
41 04e0a9bb 2011-10-14 rsc int libthread_getmcontext(mcontext_t*);
42 04e0a9bb 2011-10-14 rsc void libthread_setmcontext(mcontext_t*);