cvs commit: src/sys/dev/fxp if_fxpreg.h
Bruce Evans
bde at zeta.org.au
Sat Apr 5 20:16:13 PST 2003
On Sat, 5 Apr 2003, Maxime Henrion wrote:
> mux 2003/04/05 15:46:58 PST
>
> FreeBSD src repository
>
> Modified files:
> sys/dev/fxp if_fxpreg.h
> Log:
> ...
> - Change some u_int to u_int8_t which make more sense here since
> we're really defining bytes. That produces the same code due to
> how bitfields work.
This gives undefined behaviour and thus produces random code if it is
compiled by a C compiler (unless Bool_t happens to be u_int8_t). From
n869.txt:
[#8] A bit-field shall have a type that is a qualified or
unqualified version of _Bool, signed int, or unsigned int.
I fixed this bug in many places, including in rev.1.13 of if_fxpreg.h.
but it keeps getting reintroduced :-(.
Bit-fields of other integer types are an unportable gcc extension.
They affect the struct layout in unportable apparently-undocumented
ways. IIRC, they don't affect internal padding but they do affect the
size and alignment the struct -- a struct that has only uint8_t
bit-fields in it has only the size and alignment requirements of
uint8_t, while a struct with only u_int bit-fields in it has the size
and alignment requirements of u_int. This may be controlled to some
extent using other unportable gcc extensions.
Bruce
More information about the cvs-src
mailing list