8 #if !defined(__OpenBSD__)
11 #include <sys/utsname.h>
15 #if defined(__FreeBSD__) && __FreeBSD__ < 5
16 extern int getmcontext(mcontext_t*);
17 extern void setmcontext(mcontext_t*);
18 #define setcontext(u) setmcontext(&(u)->uc_mcontext)
19 #define getcontext(u) getmcontext(&(u)->uc_mcontext)
20 extern int swapcontext(ucontext_t*, ucontext_t*);
21 extern void makecontext(ucontext_t*, void(*)(), int, ...);
24 #if defined(__APPLE__)
25 # define mcontext libthread_mcontext
26 # define mcontext_t libthread_mcontext_t
27 # define ucontext libthread_ucontext
28 # define ucontext_t libthread_ucontext_t
29 # include "power-ucontext.h"
32 #if defined(__OpenBSD__)
33 # define mcontext libthread_mcontext
34 # define mcontext_t libthread_mcontext_t
35 # define ucontext libthread_ucontext
36 # define ucontext_t libthread_ucontext_t
38 # include "386-ucontext.h"
40 # include "power-ucontext.h"
42 extern pid_t rfork_thread(int, void*, int(*)(void*), void*);
46 int getmcontext(mcontext_t*);
47 void setmcontext(const mcontext_t*);
48 #define setcontext(u) setmcontext(&(u)->uc_mcontext)
49 #define getcontext(u) getmcontext(&(u)->uc_mcontext)
52 typedef struct Context Context;
53 typedef struct Execjob Execjob;
54 typedef struct Proc Proc;
55 typedef struct _Procrendez _Procrendez;
57 typedef struct Jmp Jmp;
92 void (*startfn)(void*);
104 #ifdef PLAN9PORT_USING_PTHREADS
111 extern void _procsleep(_Procrendez*);
112 extern void _procwakeup(_Procrendez*);
113 extern void _procwakeupandunlock(_Procrendez*);
120 #ifdef PLAN9PORT_USING_PTHREADS
128 _Threadlist runqueue;
129 _Threadlist allthreads;
133 Context schedcontext;
139 #define proc() _threadproc()
140 #define setproc(p) _threadsetproc(p)
142 extern Proc *_threadprocs;
143 extern Lock _threadprocslock;
144 extern Proc *_threadexecproc;
145 extern Channel *_threadexecchan;
146 extern QLock _threadexeclock;
147 extern Channel *_dowaitchan;
149 extern void _procstart(Proc*, void (*fn)(Proc*));
150 extern _Thread *_threadcreate(Proc*, void(*fn)(void*), void*, uint);
151 extern void _threadexit(void);
152 extern Proc *_threadproc(void);
153 extern void _threadsetproc(Proc*);
154 extern int _threadlock(Lock*, int, ulong);
155 extern void _threadunlock(Lock*, ulong);
156 extern void _pthreadinit(void);
157 extern int _threadspawn(int*, char*, char**);
158 extern int _runthreadspawn(int*, char*, char**);
159 extern void _threadsetupdaemonize(void);
160 extern void _threaddodaemonize(char*);
161 extern void _threadpexit(void);
162 extern void _threaddaemonize(void);