1*262d0255SDavid du Colombier #include <u.h> 2*262d0255SDavid du Colombier #include <libc.h> 3*262d0255SDavid du Colombier #include <thread.h> 4*262d0255SDavid du Colombier #include "threadimpl.h" 5*262d0255SDavid du Colombier 6*262d0255SDavid du Colombier /* first argument goes in a register; simplest just to ignore it */ 7*262d0255SDavid du Colombier static void launchersparc(int,void (* f)(void * arg),void * arg)8*262d0255SDavid du Colombierlaunchersparc(int, void (*f)(void *arg), void *arg) 9*262d0255SDavid du Colombier { 10*262d0255SDavid du Colombier (*f)(arg); 11*262d0255SDavid du Colombier threadexits(nil); 12*262d0255SDavid du Colombier } 13*262d0255SDavid du Colombier 14*262d0255SDavid du Colombier void _threadinitstack(Thread * t,void (* f)(void *),void * arg)15*262d0255SDavid du Colombier_threadinitstack(Thread *t, void (*f)(void*), void *arg) 16*262d0255SDavid du Colombier { 17*262d0255SDavid du Colombier ulong *tos; 18*262d0255SDavid du Colombier 19*262d0255SDavid du Colombier tos = (ulong*)&t->stk[t->stksize&~7]; 20*262d0255SDavid du Colombier *--tos = (ulong)arg; 21*262d0255SDavid du Colombier *--tos = (ulong)f; 22*262d0255SDavid du Colombier *--tos = 0; /* first arg to launchersparc */ 23*262d0255SDavid du Colombier *--tos = 0; /* place to store return PC */ 24*262d0255SDavid du Colombier t->sched[JMPBUFPC] = (ulong)launchersparc+JMPBUFDPC; 25*262d0255SDavid du Colombier t->sched[JMPBUFSP] = (ulong)tos; 26*262d0255SDavid du Colombier } 27*262d0255SDavid du Colombier 28