/* * THREAD.C */ #include "defs.h" #include struct wakeup_args { PointerStor s; }; struct sleep_args { int32_t ms; #if LONG_BITS == 64 int32_t filler01; #endif }; struct tsleep_args { PointerStor s; int32_t ms; #if LONG_BITS == 64 int32_t filler01; #endif }; void RuneSysCall_waitThreads(void *args, void *rval) { printf("WAITTHREADS\n"); fflush(stdout); threadWaitTerminate(); } void RuneSysCall_wakeup(struct wakeup_args *args, void *rval) { uintptr_t wchan; wchan = (uintptr_t)args->s.s_Addr; threadWakeupWChan(wchan); } void RuneSysCall_sleep(struct sleep_args *args, void *rval) { if (args->ms >= 0) threadSleep(args->ms); } void RuneSysCall_tsleep(struct tsleep_args *args, void *rval) { uintptr_t wchan; wchan = (uintptr_t)args->s.s_Addr; if (args->ms >= 0) threadSleepWChan(wchan, args->ms); }