On 7/12/2011, at 7:55 AM, Uros Bizjak wrote:
On Tue, Dec 6, 2011 at 5:46 PM, Raúl Porcel <armin76@gentoo.org> wrote:On 11/13/2011 01:43 AM, Michael Cree wrote: [snip]Is there anyone more knowledgeable than I about gcc who can give usguidance as to why gcc-4.6 should be enlarging the data segment so much that the small data model cannot be used? Or is there a fix required inthe kernel code?Guess Uros can help here...Unfortunately, I have no idea... There are similar problems with gcc build, so I use: # Prevent GPREL16 relocation truncation LDFLAGS += -Wl,--no-relax BOOT_LDFLAGS += -Wl,--no-relax
Yeah, there are a growing number of packages being affected by this (presumably linker) problem and I have recently seen it with gcc- snapshot and gnat-4.6 in Debian. However I don't think this is the issue seen with the Linux kernel, which has the --relax argument commented out of the linker flags in the Makefile.
What we see is that gcc-4.4 successfully compiles the Linux kernel. Using gcc-4.6 results in relocation errors. The kernel Makefile adds - msmall-data to the compiler flags. If this is change to -mlarge-data then compilation with gcc-4.6 succeeds. What I am wondering about is what is the change in gcc-4.6 that causes the data segment (presumably) to be too large to stored in 64 kbytes (whereas gcc-4.4 can fit it in 64kbytes)?
Cheers Michael.