Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Jul 2009 01:26:30 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        kientzle@freebsd.org
Cc:        svn-src-projects@freebsd.org, des@des.no, src-committers@freebsd.org, rpaulo@freebsd.org, brde@optusnet.com.au
Subject:   Re: svn commit: r195460 - projects/mesh11s/sys/net80211
Message-ID:  <20090710.012630.-875846397.imp@bsdimp.com>
In-Reply-To: <4A561477.7000508@freebsd.org>
References:  <20090709041145.G46111@delplex.bde.org> <86prc9g8yf.fsf@ds4.des.no> <4A561477.7000508@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <4A561477.7000508@freebsd.org>
            Tim Kientzle <kientzle@FreeBSD.org> writes:
: Dag-Erling Sm=F8rgrav wrote:
: > Bruce Evans <brde@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 align=
ment
: > 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 *m=
ust*
: > add three bytes of padding at the end of struct foo so bar[1].i is
: > correctly aligned.
: > =

: > cf. ISO/IEC 9899:1999 =A76.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" :)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090710.012630.-875846397.imp>