Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 29 Nov 2009 17:11:17 -0800
From:      Julian Elischer <julian@elischer.org>
To:        Luigi Rizzo <rizzo@iet.unipi.it>
Cc:        current@freebsd.org
Subject:   Re: poor struct definition in ipfw (bitfield with enum base type) ?
Message-ID:  <4B131BB5.7010106@elischer.org>
In-Reply-To: <20091130011643.GA29020@onelab2.iet.unipi.it>
References:  <20091130011643.GA29020@onelab2.iet.unipi.it>

next in thread | previous in thread | raw e-mail | index | archive | help
Luigi Rizzo wrote:
> While trying to compile ipfw (userland) with tcc, i hit an issue
> on the following struct in ip_fw.h (I think I wrote it):
> 
>     typedef struct  _ipfw_insn {    /* template for instructions */
>         enum ipfw_opcodes       opcode:8;
>         u_int8_t        len;    /* number of 32-bit words */
>         u_int16_t       arg1;
>     } ipfw_insn;
> 
> gcc correctly packs the structure in 4 bytes, however tcc
> fails to realize that the enum fits in 8 bits, and uses
> the base type (int, which is 32 bit) which results in
> the structure using 8 bytes. You can imagine the results.

I think from memory enums are only defined to be ints
and an 8 bit enum is a gcc extension.

> 
> I wonder if the difference is a bug in 'tcc' or it is one of
> those things that are 'implementation-defined' by the C99 standard
> (googling around seems to suggest the latter).
> 
> grepping through the entire /usr/src shows only one instance of
> the above construct (a bitfield using an enum as base type).
> 
> To be safe, I'd be inclined to change 'opcode' to uint8_t,
> which is non ambiguous and generates the same code on gcc and tcc
> 
> cheers
> luigi
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"




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