Hi,
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
Stefan