On Mon, Jul 9, 2018 at 11:15 AM David Laight David.Laight@aculab.com wrote:
From: Alexey Brodkin
Sent: 09 July 2018 05:45 Depending on ABI "long long" type of a particular 32-bit CPU might be aligned by either word (32-bits) or double word (64-bits). Make sure "data" is really 64-bit aligned for any 32-bit CPU.
At least for 32-bit ARC cores ABI requires "long long" types to be aligned by normal 32-bit word. This makes "data" field aligned to 12 bytes. Which is still OK as long as we use 32-bit data only.
But once we want to use native atomic64_t type (i.e. when we use special instructions LLOCKD/SCONDD for accessing 64-bit data) we easily hit misaligned access exception.
Shouldn't there be a typedef for the actual type. Perhaps it is even atomic64_t ? And have the __aligned(8) applied to that typedef ??
That indeed sounds like the best thing to do, as it will fix this issue in other places, too.
Gr{oetje,eeting}s,
Geert