On Fri, Nov 06, 2020 at 04:18:00PM -0600, Peter Bergner via Gcc-patches wrote: > As part of the MMA base support, we incremented BIGGEST_ALIGNMENT in > order to align the __vector_pair and __vector_quad types to 256 and 512 > bits respectively. This had the unintended effect of changing the > default alignment used by __attribute__ ((__aligned__)) which causes > an ABI break because of some dodgy code in GLIBC's struct pthread > (GLIBC is going to fix that too). The fix in GCC is to revert the > BIGGEST_ALIGNMENT change and to force the alignment on the type itself > rather than the mode used by the type. [snip] > diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h > index bbd8060e143..5a47aa14722 100644 > --- a/gcc/config/rs6000/rs6000.h > +++ b/gcc/config/rs6000/rs6000.h > @@ -776,8 +776,10 @@ extern unsigned rs6000_pointer_size; > /* Allocation boundary (in *bits*) for the code of a function. */ > #define FUNCTION_BOUNDARY 32 > > -/* No data type wants to be aligned rounder than this. */ > -#define BIGGEST_ALIGNMENT (TARGET_MMA ? 512 : 128) > +/* No data type is required to be aligned rounder than this. Warning, if > + BIGGEST_ALIGNMENT is changed, then this may be an ABI break. An example > + of where this can break an ABI is in GLIBC's struct _Unwind_Exception. */
Instead of calling out something that is expected to be fixed, should you instead call out that it will change the alignment of anything using "__attribute__ ((__aligned__))"? > +#define BIGGEST_ALIGNMENT 128 [snip] PC