Re: [head tinderbox] failure on arm/arm

From: M. Warner Losh <imp_at_bsdimp.com>
Date: Sun, 12 Nov 2006 15:47:33 -0700 (MST)
In message: <20061112192810.GC1173_at_rambler-co.ru>
            Ruslan Ermilov <ru_at_freebsd.org> writes:
: On Sun, Nov 12, 2006 at 01:21:05PM -0500, Alexander Kabaev wrote:
: > GCC expects 4-byte aligned structured on ARM but does not necessarily
: > have to. We can change the default at the expense of possible more
: > inefficient code generated and lost binary compatibility with other ARM
: > OSes out there. So this is trade off between unclear performance
: > penalty and an unspecified but certainly sizable number of other
: > landmines like this lurking on the code.
: > 
: > We should decide what evil we regard as lesser.
: > 
: This is the only buildworld problem so far on FreeBSD/ARM, so my
: feeling is that we can actually benefit from leaving it "as is",
: as it has a potential of making our code more portable.  Of course
: if binary compatibility for structs across platforms is an issue,
: a structure should be "packed", because otherwise the C standard
: says that "Each non-bit-field member of a structure or union object
: is aligned in an implementation-defined manner appropriate to its
: type."
: 
: On the other hand, having GCC align "struct foo { char x[11]; }"
: on a four-byte boundary (other than for backward compatibility)
: doesn't make too much sense to me.

It does for me.  People shouldn't think of structs as being packed.
The standard is very clear about the allowed type punning and the
disallowed.  Many platforms pad structures to the size of a word, and
we have to cope.

In this specific case, it should be __packed__ because the structure
is intended to be packed.

: I don't know GCC rules for alignment of structure members.  For
: example, if it's guaranteed (in GCC) that offsetof(struct foo, bar)
: is always 1 for "struct foo { char foo; char bar; }" (without the
: "packed" attribute) on all platforms and OSes GCC supports?
: I'd expect the latter to be "4" for FreeBSD/ARM but fortunately
: it stays "1", i.e., only the structure alignment is affected,
: and not of structure members (which is POLA but makes the 4 byte
: for structure alignment questionable).

It is all up to the compiler.  Trying to figure it out is not
possible.  There's no POLA to violate, unless you expect the whole
world to behave like a i386 :-).

Warner
Received on Sun Nov 12 2006 - 21:48:43 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:02 UTC