[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: problem compiling kernel ld error relocation truncated to fit: GPREL16 against symbol



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 us
guidance 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 in
the 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.


Reply to: