Messages in this thread | | | From | David Laight <> | Subject | RE: [PATCH 01/17] kbuild: Disable -Waddress-of-packed-member for gcc 9 | Date | Mon, 25 Mar 2019 16:27:30 +0000 |
| |
From: Andi Kleen > Sent: 22 March 2019 16:58 > > Lol... we're actively moving away from the C standard on many places. > > Yes and also packed is not part of the C standard. > > > Why does the silly compiler think it is a problem to take the address of > > a member of a packed structure? That sounds like something that's > > perfectly fine and useful. > > Probably because a pointer reference doesn't do whatever magic > may be needed on architectures with poor misalignment handling. > In theory you would need memcpy().
And you can't use memcpy() on a misaligned pointer because the C standard doesn't allow misaligned pointer to happen and the compiler will optimise the memcpy() to aligned register moves.
> In practice it's likely a lot of false positives, like > the architectures with poor misalignment handling are usually > in SOCs without PCI and they don't have the devices > with the problematic drivers.
A lot of it is code that has structures marked 'packed' when they don't need to be at all. Structures that map hardware registers probably want the 'error if any padding' check - but some people seem to think they should be 'packed'.
For hardware structures that have fields on incorrect boundaries you need to mark the field member as having a lesser alignment rather than making the structure itself packed. Do it right and you can get the compiler to do 16bit accesses for a 32bit field that might be on a 4n+2 boundary.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |