386.c 448 B

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