aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/Darwin-x86_64-swapcontext.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libthread/Darwin-x86_64-swapcontext.c')
-rw-r--r--src/libthread/Darwin-x86_64-swapcontext.c38
1 files changed, 0 insertions, 38 deletions
diff --git a/src/libthread/Darwin-x86_64-swapcontext.c b/src/libthread/Darwin-x86_64-swapcontext.c
deleted file mode 100644
index c29ddb5e..00000000
--- a/src/libthread/Darwin-x86_64-swapcontext.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "threadimpl.h"
-
-void
-makecontext(ucontext_t *uc, void (*fn)(void), int argc, ...)
-{
- uintptr *sp;
- va_list arg;
-
-//fprint(2, "makecontext %d\n", argc);
- if(argc != 2)
- sysfatal("libthread: makecontext misused");
- va_start(arg, argc);
- uc->mc.di = va_arg(arg, uint);
- uc->mc.si = va_arg(arg, uint);
-//fprint(2, "%ux %ux\n", uc->mc.di, uc->mc.si);
- va_end(arg);
-
- sp = (uintptr*)((char*)uc->uc_stack.ss_sp+uc->uc_stack.ss_size);
- /*
- * Stack pointer at call instruction (before return address
- * gets pushed) must be 16-byte aligned.
- */
- if((uintptr)sp%4)
- abort();
- while((uintptr)sp%16 != 0)
- sp--;
- *--sp = 0; // fn's return address
- *--sp = (uintptr)fn; // return address of setcontext
- uc->mc.sp = (uintptr)sp;
-}
-
-int
-swapcontext(ucontext_t *oucp, ucontext_t *ucp)
-{
- if(getcontext(oucp) == 0)
- setcontext(ucp);
- return 0;
-}