Hi, On 2024-02-24 11:50:24 -0800, Noah Misch wrote: > > We see this happen with both xlc and gcc (new enough to know how to do > > this). One idea would be that the AIX *linker* is unable to align it, > > as that is the common tool-chain component here (and unlike stack and > > heap objects, this scope is the linker's job). There is a > > pre-existing example of a zero-buffer that is at file scope like that: > > pg_prewarm.c. Perhaps it doesn't get tested? > > > > Hmm. > > GCC docs do say "For some linkers, the maximum supported alignment may be very > very small.", but AIX "man LD" says "data sections are aligned on a boundary > so as to satisfy the alignment of all CSECTs in the sections". It also has -H > and -K flags to force some particular higher alignment.
Some xlc manual [1] states that n must be a positive power of 2, or NIL. NIL can be specified as either __attribute__((aligned())) or __attribute__((aligned)); this is the same as specifying the maximum system alignment (16 bytes on all UNIX platforms). Which does seems to suggest that this is a platform restriction. Let's just drop AIX. This isn't the only alignment issue we've found and the solution for those isn't so much a fix as forcing everyone to carefully only look into one direction and not notice the cliffs to either side. Greetings, Andres Freund [1] https://www.ibm.com/docs/en/SSGH2K_13.1.2/com.ibm.compilers.aix.doc/proguide.pdf