cvs commit: src/include ar.h

Bruce Evans bde at zeta.org.au
Mon Nov 13 11:20:14 UTC 2006


On Mon, 13 Nov 2006, Stefan Farfeleder wrote:

> 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'.
>>> ...
>> 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
>> ...
>> 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.

I don't read -current.  Peharps I shouldn't comment on it.

I think it is a bug for ARM to do that.  If __packed actually gives a size
of 1, then the padding must be only an optimization for time.

struct ar's natural size is 60, so __packed is unnecessary for ARM too
(unless there is internal padding which would cause more problems).

Apparently, struct ar was manually packed to a multiple of the word
size back when the largest word size was 32 bits.  It has already been
changed at least once without leaving enough space for expansion.  In
V7 it was "char ar_name[14]; long ar_date; char ar_uid; ..." so it had
bad packing starting at its second member and really bad packing
starting at its third member.

Bruce


More information about the cvs-src mailing list