Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Stack alignment with pthreads



On Friday, at 22:49, Anthony Mallet wrote:
| - The only thing that had some effect was to artificially substract 4 bytes
| from the sp in makecontext, just before 'pushing' the args. (i.e. replaced
|  ``sp -= argc + 1'' by ``sp -= argc + 2'' in arch/i386/gen/makecontext.c).

Following up on myself...
I found more interesting info here:
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/i386/gen/makecontext.c.diff?r1=1.4;r2=1.4.2.1;f=h

Mimicking this patch to our i386/makecontext() gives this:
        sp  = (unsigned int *)((uintptr_t)sp & ~0x3); 
        sp -= argc;                     /* Make room for args. */ 
        sp  = (unsigned int *)((uintptr_t)sp & ~0xf); 
        sp --;                          /* Make room for ret */

(I can provide a real diff if this is not clear :)

What I understand is that the first arg should be aligned on 16 bytes, and this
effectively fixes the problem.

So what do you think about this change?

-- 
Anthony


Home | Main Index | Thread Index | Old Index