16-byte align
This commit is contained in:
parent
d9ed72433f
commit
fa07e3d777
@ -3,10 +3,19 @@
|
||||
void
|
||||
makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
|
||||
{
|
||||
int n;
|
||||
int *sp;
|
||||
|
||||
sp = (int*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/4;
|
||||
sp -= argc;
|
||||
/*
|
||||
* Stack pointer at call instruction (before return address
|
||||
* gets pushed) must be 16-byte aligned.
|
||||
*/
|
||||
if((uintptr)sp%4)
|
||||
abort();
|
||||
while((uintptr)sp%16)
|
||||
sp--;
|
||||
memmove(sp, &argc+1, argc*sizeof(int));
|
||||
*--sp = 0; /* return address */
|
||||
ucp->uc_mcontext.mc_eip = (long)func;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user