Re: Fix misaligned access of ItemPointerData on ARM - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Fix misaligned access of ItemPointerData on ARM
Date
Msg-id 1957.1432238903@sss.pgh.pa.us
Whole thread Raw
In response to Re: Fix misaligned access of ItemPointerData on ARM  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Fix misaligned access of ItemPointerData on ARM  (Andrew Dunstan <andrew@dunslane.net>)
Re: Fix misaligned access of ItemPointerData on ARM  (Piotr Stefaniak <postgres@piotr-stefaniak.me>)
List pgsql-hackers
I wrote:
> But BlockIdData is laid out and accessed as two 16-bit fields, so there
> should be no problem.  On what platform exactly do you see a failure?

Ah, after reading the gcc manual a bit more closely, I get the point.
For some reason I think we assumed that "packed" would not result in
misaligning the struct overall, but it clearly could do so, with possible
efficiency consequences on hardware that doesn't like misaligned accesses.

If the compiler accepts __attribute__((aligned)) then what you've done is
clearly better.  It's not clear to me whether all compilers that accept
"packed" also accept "aligned", but there are enough ARM machines in the
buildfarm that we could hope that we'll find out if this isn't portable.

I wonder whether we should drop the ARM assumption and instead write

#if defined(pg_attribute_packed) && defined(pg_attribute_aligned)
pg_attribute_packed()
pg_attribute_aligned(2)
#endif

so that the annotations are applied on every compiler that accepts them.
        regards, tom lane



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Fix misaligned access of ItemPointerData on ARM
Next
From: Simon Riggs
Date:
Subject: Re: INSERT ... ON CONFLICT DO UPDATE with _any_ constraint