libthread: use consistent stack calculation code in makecontext

Also reduce duplication: makecontext is per-arch not per-os-arch.

May fix #353.
This commit is contained in:
Russ Cox 2020-01-19 22:39:22 -05:00
parent ac8042dfa9
commit 41b3e8b989
11 changed files with 36 additions and 83 deletions

View file

@ -0,0 +1,26 @@
#include "threadimpl.h"
void
makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
{
ulong *sp, *tos;
va_list arg;
if(argc != 2)
sysfatal("libthread: makecontext misused");
sp = USPALIGN(ucp, 16);
ucp->mc.pc = (long)func;
ucp->mc.sp = (long)sp;
va_start(arg, argc);
ucp->mc.r3 = va_arg(arg, long);
ucp->mc.r4 = va_arg(arg, long);
va_end(arg);
}
int
swapcontext(ucontext_t *oucp, ucontext_t *ucp)
{
if(getcontext(oucp) == 0)
setcontext(ucp);
return 0;
}