16-byte align
This commit is contained in:
parent
d9ed72433f
commit
fa07e3d777
1 changed files with 9 additions and 0 deletions
|
|
@ -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…
Add table
Add a link
Reference in a new issue