svn commit: r195460 - projects/mesh11s/sys/net80211

Tim Kientzle kientzle at freebsd.org
Thu Jul 9 16:41:06 UTC 2009


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.

Tim


More information about the svn-src-projects mailing list