From 04e0a9bb81356b6713e634b4d950c524f0abf15c Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 13 Oct 2011 23:57:54 -0400 Subject: libthread: Lion context routines --- src/libthread/x86_64-ucontext.h | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/libthread/x86_64-ucontext.h (limited to 'src/libthread/x86_64-ucontext.h') 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*); + -- cgit v1.2.3