[PATCH 8/8] firmware: mark some structs as packed

Alexander Huemer alexander.huemer at xx.vu
Thu Nov 24 10:51:04 UTC 2011


On Thu, Nov 24, 2011 at 11:33:09AM +0100, Harald Welte wrote:
> normally, the compiler will lay out the structure in a way that
> optimizes accesses to members.  So e.g. on an ARM, a 
> 
> struct {
> 	uint8_t byte1;
> 	uint8_t byte2;
> };
> 
> will very likely contain 3 bytes padding between the two uint8 values in
> order to make sure no unaligned loads/stores will be required.
> 
> However, if you change that to '__packed', the padding will not be
> generated and any access to struct members will need to deal with
> unaligned accesses, which can be inflating the code size considerably.
thanks for pointing that out. It's actually obvious after a moment of
thinking.

One additional thought on the switch/enum situation and initialisation:
what about adding an additional member to the enum, let's say VOID and
instances of the enum are initialised to that. A switch statement that
handles this enum gets a case for VOID which produces a runtime warning,
much like a default case. this way the compiler is happy, because the
variable is  initialised and also tells you when enum values are not
handled.




More information about the baseband-devel mailing list