This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug testsuite/49503] New: Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: "michael.v.zolotukhin at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 22 Jun 2011 15:25:49 +0000
- Subject: [Bug testsuite/49503] New: Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49503
Summary: Incorrect stack alignment, produced by inline
assembler in tests gcc.target/i386/cleanup-1.c and
gcc.target/i386/cleanup-2.c
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: testsuite
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: michael.v.zolotukhin@gmail.com
CC: michael.v.zolotukhin@gmail.com
Host: x64
Target: x64
Build: 4.7.0 20110619
The tests contain asm-listing like this:
__asm (
testl %0, %0
jnz 1f
.subsection 1
.type _L_mutex_lock_%=, @function
_L_mutex_lock_%=:
1: leaq %1, %%rdi
2: subq $128, %%rsp
3: call bar
4: addq $128, %%rsp
5: jmp 21f
...
As _L_mutex_lock is a function, GCC generates a prologue and epilogue for it -
in prologue stack alignment is performed (according to ABI64, stack should be
aligned to 128-bit).
Before a call, SP is assumed to be a multiple of 16, at function entry, when
return address is pushed to stack, (SP+8) becomes multiple of 16 - GCC uses
these assumptions when generating prologue for stack alignment.
But if JUMP is used instead of CALL, 8-byte displacement doesn't take place,
and stack becomes unaligned - that's violation of ABI.
To fix this error, JUMP should be replaced with CALL, or L_mutex_lock shouldn't
be declared as a function.
- Follow-Ups:
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: hjl.tools at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: michael.v.zolotukhin at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: hjl.tools at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: michael.v.zolotukhin at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: michael.v.zolotukhin at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: hjl.tools at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: michael.v.zolotukhin at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: michael.v.zolotukhin at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: hjl.tools at gmail dot com
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: jakub at gcc dot gnu.org
- [Bug testsuite/49503] Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c
- From: hjl.tools at gmail dot com