diff options
Diffstat (limited to 'src/libthread/x86_64-ucontext.h')
-rw-r--r-- | src/libthread/x86_64-ucontext.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/libthread/x86_64-ucontext.h b/src/libthread/x86_64-ucontext.h new file mode 100644 index 00000000..08c6d9a8 --- /dev/null +++ b/src/libthread/x86_64-ucontext.h @@ -0,0 +1,43 @@ +#define setcontext(u) libthread_setmcontext(&(u)->mc) +#define getcontext(u) libthread_getmcontext(&(u)->mc) +typedef struct mcontext mcontext_t; +typedef struct ucontext ucontext_t; + +struct mcontext +{ + uintptr ax; + uintptr bx; + uintptr cx; + uintptr dx; + uintptr si; + uintptr di; + uintptr bp; + uintptr sp; + uintptr r8; + uintptr r9; + uintptr r10; + uintptr r11; + uintptr r12; + uintptr r13; + uintptr r14; + uintptr r15; +/* +// XXX: currently do not save vector registers or floating-point state +*/ +}; + +struct ucontext +{ + struct { + void *ss_sp; + uint ss_size; + } uc_stack; + sigset_t uc_sigmask; + mcontext_t mc; +}; + +void makecontext(ucontext_t*, void(*)(void), int, ...); +int swapcontext(ucontext_t*, ucontext_t*); +int libthread_getmcontext(mcontext_t*); +void libthread_setmcontext(mcontext_t*); + |