gcc-3.3 and problems in the 64 bit kernel
our 64 bit gcc-3.3 (all versions) has a miscompilation problem that results in a BUG() in the 64 bit kernel. This shows up as:
kernel BUG at mm/shmem.c:585
The problem turns out to be that gcc-3.3 is violating the OPD rules for static functions (OPD == Official Procedure Descriptor and is supposed to ensure that there's only one function descriptor per function, allowing pointers to function descriptors to be compared directly instead of having to be dereferenced).
The problem is generated because this comparison:
if (inode->i_op->truncate == shmem_truncate)
which is a function pointer comparison is always false.
There are several other function pointer comparisons in the kernel which are in danger of failing in this manner, so the resulting kernel will not operate correctly.
Hopefully, the gcc people will be able to fix this, but in the mean time people should stick to gcc-3.0 to compile 64 bit kernels. (gcc-3.3 is fine for 32 bit parisc kernels).
James