Re: Misalignment of local SSE variables in thread function

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

 



I've looked at the assembly (I'm not an expert...).

When using the microsoft compiler both main() and f() have this code at
the start:

00401000  push        ebp
00401001  mov         ebp,esp
00401003  and         esp,0FFFFFFF0h
00401006  sub         esp,10h
..

But with gcc main() has this:

0x4012e2 <main>:        push   %ebp
0x4012e3 <main+1>:      mov    %esp,%ebp
0x4012e5 <main+3>:      sub    $0x28,%esp
0x4012e8 <main+6>:      and    $0xfffffff0,%esp
0x4012eb <main+9>:      mov    $0x0,%eax
..

and f() has:

0x4012ce <f>:   push   %ebp
0x4012cf <f+1>: mov    %esp,%ebp
0x4012d1 <f+3>: sub    $0x8,%esp
0x4012d4 <f+6>: call   0x401290 <g>
0x4012d9 <f+11>:        mov    $0x0,%eax
..

I'm guessing that the 'and 0xfffffff0' is aligning the stack pointer?
So gcc isn't aligning the stack pointer for f(), maybe assuming that it
will already be aligned somehow (which it isn't when it's the entry
point of the thread)?

Jon


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux