#include "threadimpl.h" | |
void | |
makecontext(ucontext_t *uc, void (*fn)(void), int argc, ...) | |
{ | |
int i, *sp; | |
va_list arg; | |
sp = (int*)uc->uc_stack.ss_sp+uc->uc_stack.ss_size/4; | |
va_start(arg, argc); | |
for(i=0; i<4 && i<argc; i++) | |
(&uc->uc_mcontext.arm_r0)[i] = va_arg(arg, uint); | |
va_end(arg); | |
uc->uc_mcontext.arm_sp = (uint)sp; | |
uc->uc_mcontext.arm_lr = (uint)fn; | |
} | |
int | |
swapcontext(ucontext_t *oucp, const ucontext_t *ucp) | |
{ | |
if(getcontext(oucp) == 0) | |
setcontext(ucp); | |
return 0; | |
} | |