Alignment of LinuxBIOS table structures

Stefan Reinauer stepan at
Fri Nov 26 04:55:00 CET 2004


I got an interesting report today from a customer having problems 
with building LinuxBIOS and the payload with different compilers

The problem is that different compilers handle structure alignment
differently, ie 2.95.x and 3.x have fundamental differences here:

Adding __attribute__ ((packed)) to the structures helps:

struct lb_memory_range {
	uint64_t start;
	uint64_t size;
	uint32_t type;
#define LB_MEM_RAM       1	/* Memory anyone can use */
#define LB_MEM_RESERVED  2	/* Don't use this memory region */
#define LB_MEM_TABLE     16	/* Ram configuration tables are kept in */
} __attribute__ ((packed)); 

struct lb_memory {
	uint32_t tag;
	uint32_t size;
	struct lb_memory_range map[0];
} __attribute__ ((packed));

Since this is a table that is passed in memory, we do want it to be
exactly as it is defined, with no extra padding of any kind to make it
reliable information. So I consider adding __attribute__ ((packed))
a good solution for the problem.

If I get no good reasons against adding this, I will check it in later


More information about the coreboot mailing list