Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Nov 2006 10:43:11 +0100
From:      Stefan Farfeleder <stefanf@FreeBSD.org>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        Joseph Koshy <jkoshy@FreeBSD.org>, src-committers@FreeBSD.org, cvs-all@FreeBSD.org, cvs-src@FreeBSD.org
Subject:   Re: cvs commit: src/include ar.h
Message-ID:  <20061113094311.GC97460@wombat.fafoe.narf.at>
In-Reply-To: <20061113173927.Q75708@delplex.bde.org>
References:  <200611130428.kAD4ST0U093715@repoman.freebsd.org> <20061113173927.Q75708@delplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Nov 13, 2006 at 07:30:11PM +1100, Bruce Evans wrote:
> On Mon, 13 Nov 2006, Joseph Koshy wrote:
> 
> >jkoshy      2006-11-13 04:28:29 UTC
> >
> > FreeBSD src repository
> >
> > Modified files:
> >   include              ar.h
> > Log:
> > Attempt to improve application portability by marking `struct ar_hdr'
> > as `packed'.
> >
> > The C standard leaves the alignment of individual members of a C
> > struct upto the implementation, so pedantically speaking portable
> > code cannot assume that the layout of a `struct ar_hdr' in memory
> > will match its layout in a file.  Using a __packed attribute
> > declaration forces file and memory layouts for this structure to
> > match.
> >
> > Submitted by:   ru
> 
> I don't see how this can be more portable.  It uses an unportable
> extension, but packing is automatic on all compilers that are known
> to support this extension.  On compilers that are not known to support
> this extension (all except gcc >= 2.7 and icc), using __packed gives
> a syntax error and thus changes code that is portable in practice into
> code that doesn't compile.  On lints that known not to support this
> extension (FreeBSD lint), linting for portability is broken by not
> giving the syntax error.
> 
> In <ar.h>, all struct members are char arrays so there will be no
> padding in practice.

You seem to have missed the discussion on -current. GCC pads "struct foo
{ char c; };" to 4 bytes on ARM.  I agree on __packed not being
portable.

Stefan



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