1 #include "threadimpl.h"
2 
3 void
makecontext(ucontext_t * ucp,void (* func)(void),int argc,...)4 makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
5 {
6 	ulong *sp, *tos;
7 	va_list arg;
8 
9 	if(argc != 2)
10 		sysfatal("libthread: makecontext misused");
11 	sp = USPALIGN(ucp, 16);
12 	ucp->mc.pc = (long)func;
13 	ucp->mc.sp = (long)sp;
14 	va_start(arg, argc);
15 	ucp->mc.r3 = va_arg(arg, long);
16 	ucp->mc.r4 = va_arg(arg, long);
17 	va_end(arg);
18 }
19 
20 int
swapcontext(ucontext_t * oucp,ucontext_t * ucp)21 swapcontext(ucontext_t *oucp, ucontext_t *ucp)
22 {
23 	if(getcontext(oucp) == 0)
24 		setcontext(ucp);
25 	return 0;
26 }
27