This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/38496] New: Gcc misaligns arrays when stack is forced follow the x8632 ABI


I notice that gcc does not follow the 32-bit ABI for the x86, in that it forces
the stack alignment to 16 bytes rather than the ABI-required 4 bytes.  This is
a problem when interacting with compilers that are ABI-compliant.

So, I threw the -mpreferred-stack-boundary=2 on gcc/gfortran/g77 to restore ABI
compliance, and then I notice that gfortran/g77 generates double precision
arrays that are not aligned to 8-byte boundaries, which breaks pretty much all
interoperability as well (and also means you will get cache splits all the
time, and so decrease your performance).  The -malign-double flag does not fix
this.  So I now have the choice of not interoperating due to ABI violation, or
not interoperating with other compilers due to lack of data alignment.

I read the gcc manual on this point, and it talks like you have to choose:
either you force the stack to always be aligned to 16-byte boundary, or gcc is
unable to guarantee alignment for any stack value.  However, this is a false
choice: given an unaligned stack it is trivial for a function to force a
particular alignment (eg., 16-byte) for some values it is storing on the stack.
 I can provide code and pointers, if that is helpful.

So, I think it is a bad idea for gcc to violate the ABI for something that is
trivial to do without violating the ABI: not only do you rule out
interoperability by not following the ABI, but even in strict gcc code, you
lose a lot of performance when people need to follow the ABI.

However, if the preferred stack trick worked, I could work around, but since it
actually makes arrays not be aligned to a multiple of their base size, I cannot
find a workaround for this misfeature.  Any ideas?

Thanks,
Clint


-- 
           Summary: Gcc misaligns arrays when stack is forced follow the
                    x8632 ABI
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: whaley at cs dot utsa dot edu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]