Introduction
Introduction Statistics Contact Development Disclaimer Help
t16-byte align - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit fa07e3d777fc52a7c564f71c9b7f2bba1d0e7716
parent d9ed72433f25ec45908dede1022425a3f3ed1c67
Author: rsc <devnull@localhost>
Date: Sat, 22 Apr 2006 00:50:08 +0000
16-byte align
Diffstat:
M src/libthread/Darwin-386.c | 9 +++++++++
1 file changed, 9 insertions(+), 0 deletions(-)
---
diff --git a/src/libthread/Darwin-386.c b/src/libthread/Darwin-386.c
t@@ -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;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.