[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