svn commit: r195460 - projects/mesh11s/sys/net80211
M. Warner Losh
imp at bsdimp.com
Fri Jul 10 07:30:36 UTC 2009
In message: <4A561477.7000508 at freebsd.org>
Tim Kientzle <kientzle at FreeBSD.org> writes:
: Dag-Erling Smørgrav wrote:
: > Bruce Evans <brde at optusnet.com.au> writes:
: >> Broken ABIs (e.g., arm?) may add padding at the end of structs,
: >
: > Padding at the end of a struct is *required* to ensure proper alignment
: > of the next element in an array, e.g.
: >
: > struct foo { int i; char c; } bar[2];
: >
: > Assuming a four-byte alignment requirement for int, the compiler *must*
: > add three bytes of padding at the end of struct foo so bar[1].i is
: > correctly aligned.
: >
: > cf. ISO/IEC 9899:1999 §6.7.2.1:
: >
: > 15 There may be unnamed padding at the end of a structure or union.
:
: Everyone (I hope!) expects alignment in the
: case you outlined. But many of us have been
: surprised to see the ARM compiler pad
:
: struct foo {
: char f1[4];
: char f2[1];
: char f3[1];
: };
:
: to 12 bytes. This breaks a lot of traditional
: code that uses structs of char arrays to
: define memory and disk layouts.
:
: I'm not claiming that the ARM compiler is broken,
: just that its padding behavior surprises
: a lot of people.
It isn't a compiler bug. It is an ABI requirement for ARM. At least
for the ABI we use. there are others that might be better, and not
suffer from this surprise. We[*] should investigate them.
Warner
[*] By "we" of course I mean "some smart guy that isn't me" :)
More information about the svn-src-projects
mailing list