stack realignment
Marcus Meissner
marcus at jet.franken.de
Sat Oct 10 05:14:15 CDT 2015
Hi,
(as small heads up)
As we have this problem with the Win64 code calling us with non-16 byte aligned stacks,
the gcc folks have now commited code to trunk gcc that allows -mincoming-stack-boundary=3
on October 7th.
Uros also plans a backport for gcc 5.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66697
$ cat xx.c
#include <stdio.h>
int f(int a,int b) {
printf("a=%d, b=%d\n", a, b);
}
-O2 build:
0000000000000000 <f>:
0: 89 f2 mov %esi,%edx
2: 31 c0 xor %eax,%eax
4: 89 fe mov %edi,%esi
6: bf 00 00 00 00 mov $0x0,%edi
b: e9 00 00 00 00 jmpq 10 <f+0x10>
-O2 -mincoming-stack-boundary=3
0000000000000000 <f>:
0: 4c 8d 54 24 08 lea 0x8(%rsp),%r10
5: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp
9: 89 f2 mov %esi,%edx
b: 31 c0 xor %eax,%eax
d: 89 fe mov %edi,%esi
f: bf 00 00 00 00 mov $0x0,%edi
14: 41 ff 72 f8 pushq -0x8(%r10)
18: 55 push %rbp
19: 48 89 e5 mov %rsp,%rbp
1c: 41 52 push %r10
1e: 48 83 ec 08 sub $0x8,%rsp
22: e8 00 00 00 00 callq 27 <f+0x27>
27: 48 83 c4 08 add $0x8,%rsp
2b: 41 5a pop %r10
2d: 5d pop %rbp
2e: 49 8d 62 f8 lea -0x8(%r10),%rsp
32: c3 retq
It is more code emitted, but we can at least fix it without generating our own thunks.
Ciao, Marcus
More information about the wine-devel
mailing list