[Bug middle-end/41475] New: common variables cannot be expected to be aligned
mikulas at artax dot karlin dot mff dot cuni dot cz
gcc-bugzilla@gcc.gnu.org
Sat Sep 26 04:04:00 GMT 2009
Hi.
When I compile these two sources, one with -O3 -march=pentium3 and the other
with -Os, the linker warns about nonmatching alignments and the program crashes
because of misaligned SSE accesses.
/usr/bin/ld: Warning: alignment 4 of symbol `array' in commonalign2.o is
smaller than 32 in commonalign1.o
/usr/bin/ld: Warning: alignment 4 of symbol `array2' in commonalign2.o is
smaller than 32 in commonalign1.o
The reson is that gcc aligns arrays in common section to 32 bytes and expects
that they will be aligned so. This expectation is wrong, the common entries may
be resolved pointing to data section in another module that doesn't meet the
alignment (it may be compiled with different compiler or with the same compiler
with different flags (-Os)).
For extern arrays, gcc correctly assumes that they are aligned to their ABI
standard (4 bytes) and generates appropriate SSE code; for common arrays it
should expect 4-byte alignment too.
--
Summary: common variables cannot be expected to be aligned
Product: gcc
Version: 4.4.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mikulas at artax dot karlin dot mff dot cuni dot cz
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41475
More information about the Gcc-bugs
mailing list