1*9a747e4fSDavid du Colombier #include <u.h> 2*9a747e4fSDavid du Colombier #include <libc.h> 3*9a747e4fSDavid du Colombier #include <thread.h> 4*9a747e4fSDavid du Colombier #include "threadimpl.h" 5*9a747e4fSDavid du Colombier 6*9a747e4fSDavid du Colombier static void launcher386(void (* f)(void * arg),void * arg)7*9a747e4fSDavid du Colombierlauncher386(void (*f)(void *arg), void *arg) 8*9a747e4fSDavid du Colombier { 9*9a747e4fSDavid du Colombier (*f)(arg); 10*9a747e4fSDavid du Colombier threadexits(nil); 11*9a747e4fSDavid du Colombier } 12*9a747e4fSDavid du Colombier 13*9a747e4fSDavid du Colombier void _threadinitstack(Thread * t,void (* f)(void *),void * arg)14*9a747e4fSDavid du Colombier_threadinitstack(Thread *t, void (*f)(void*), void *arg) 15*9a747e4fSDavid du Colombier { 16*9a747e4fSDavid du Colombier ulong *tos; 17*9a747e4fSDavid du Colombier 18*9a747e4fSDavid du Colombier tos = (ulong*)&t->stk[t->stksize&~7]; 19*9a747e4fSDavid du Colombier *--tos = (ulong)arg; 20*9a747e4fSDavid du Colombier *--tos = (ulong)f; 21*9a747e4fSDavid du Colombier t->sched[JMPBUFPC] = (ulong)launcher386+JMPBUFDPC; 22*9a747e4fSDavid du Colombier t->sched[JMPBUFSP] = (ulong)tos - 8; /* old PC and new PC */ 23*9a747e4fSDavid du Colombier } 24*9a747e4fSDavid du Colombier 25