This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 16 byte pthread stack alignments


On Fri, 23 Dec 2011, Corinna Vinschen wrote:

> On Dec 22 12:51, Brian Ford wrote:
> > On Wed, 21 Dec 2011, Corinna Vinschen wrote:
> >
> > > On second thought I'm a bit puzzled that the pthread stack isn't
> > > correctly aligned as well.  Ignoring the pthread_attr_setstack case
> > > which wasn't supported so far anyway, the OS stack set up by
> > > CreateThread is 64K aligned.  From that 64K aligned StackBase value, I
> > > subtract 12704 == 0x31a0 bytes.  So the result should be 16 byte
> > > aligned even without the andl $-16, %%esp.  Why isn't it?!?
> >
> > It appears it is, here.
> >
> > > Does anybody care to tell me what's wrong with the assembler code in
> > > thread_wrapper?
> >
> > I don't pretend to understand why, but it appears gcc is expecting the
> > stack to be 16 byte aligned on entry to the called function, which
> > includes the 4 byte argument and the 4 byte return address in this case.
> > I could be wrong, but it appears that would do it.

After studying this more today, I was wrong in my description of the cause
and fix above.  It appears the stack needs to be 16 byte aligned at the
call instruction.  That is, before the return address is pushed.

> Sorry, but what I don't get from your reply is if the andl worked or
> not.

No; by itself, it does not.  Adding a "subl $12, %%esp" following it so
that the stack is 16 byte aligned after the thread arg is pushed does
work.  There are probably more efficient and/or cleaner ways of doing it
though.

STC attached, but note that it seems to always pass with gcc-4.  Only gcc
3.4.4 appears to require the extra alignment.

PS. Note that with my custom built cygwin DLL from CVS today, I can't
compile the STC:

gcc -g -O2 -Wall pthread_sse_align.c -o pthread_sse_align.exe
pthread_sse_align.c:0: fatal error: can't open /tmp/ccMkTl4f.s for
writing: No such file or directory compilation terminated.

Also, every error message from an abnormally exiting application
(including when the attached test case fails) mysteriously seems to print
4-6 times?

-- 
Brian Ford
Staff Realtime Software Engineer
VITAL - Visual Simulation Systems
FlightSafety International
the best safety device in any aircraft is a well-trained crew...

Attachment: pthread_sse_align.c
Description: Text document

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]