* Eric W. Biederman <[EMAIL PROTECTED]> [041129 19:21]: > To see what the problem actually amounts to I walked through my > compiler collection with a simple test to see what sizeof reported > for lb_memory_range, (without adding the packed attribute). > On 32bit x86 I tested with: > gcc-2.7.2 > gcc-2.95 > gcc-3.0 > gcc-3.2 > gcc-3.3 > gcc-3.4 > > And in each instance the result was 20. > So from what I can see with 32bit x86 code we are consistent, and we > do not have compiler version dependencies. So the bad definition > is consistent.
x86 QNX/Neutrino 6.2.1 (with gcc 2.95.3): # gcc -v Reading specs from /usr/lib/gcc-lib/ntox86/2.95.3qnx-nto/specs gcc version 2.95.3qnx-nto 20010315 (release) sizeof(lb_memory_range): 24 sizeof(struct lb_memory): 8 It seems gcc does not always behave the same. > It is a good pragmatic solution, but actually needing __attribute__ ((packed)) > is an issue. As Ron has pointed out, not all compilers support it. > And having a definition that varies between 32bit and 64bit is a > problem anyway. So you are saying people out there are building LinuxBIOS with non-gnu compilers? I actually doubt that, assuming a lot of objcopy/objdump/ld magic is pretty much gnu specific as well.. one could go like: #ifdef __GNUC__ #define STRICTSIZE __attribute__ ((packed)) #else #define STRICTSIZE #endif Fixing the issue among all gcc versions while not breaking anything on others. It really sucks that gcc does magic here that makes writing portable code really ugly. Stefan _______________________________________________ Linuxbios mailing list [EMAIL PROTECTED] http://www.clustermatic.org/mailman/listinfo/linuxbios

