This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/77587] New: C compiler produces incorrect stack alignment with __attribute((weak))
- From: "andrew.thomas at cogent dot ca" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 14 Sep 2016 11:15:27 +0000
- Subject: [Bug c/77587] New: C compiler produces incorrect stack alignment with __attribute((weak))
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77587
Bug ID: 77587
Summary: C compiler produces incorrect stack alignment with
__attribute((weak))
Product: gcc
Version: 5.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: andrew.thomas at cogent dot ca
Target Milestone: ---
Created attachment 39615
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39615&action=edit
Test case for weak attribute stack misalignment
I have run into a case where GCC produces a stack aligned to 8 bytes instead of
the required 16 bytes when using __attribute__((weak)). I originally
mistakenly reported this as a problem with sprintf() here:
https://sourceware.org/bugzilla/show_bug.cgi?id=20596
This case produces a call to sprintf() with the stack aligned to 8 bytes, but
sprintf() calls the MOVAPS instruction which will crash if the stack is not
aligned to 16 bytes.
The attached test case consists of two files. The compile command is in the
comments at the top of stacktest.c. The crash occurs if __attribute__((weak))
is used in the example, and does not occur without it. Change SPRINTF_CRASH
from 1 to 0 in stacktest.c to eliminate the crash.
My test system is Ubuntu 16.04 LTS.
uname -a: Linux mylinux 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46
UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
gcc -v: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2)
glibc: 2.23