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