On Mon, Jun 16, 2008 at 01:27:58PM +0200, Laurent GUERBY wrote:
> Hi,
> 
> When linking a very large (> 100MB executable) application on
> powerpc-linux with trunk we get linker errors:
> 
> .../lib/gcc/powerpc-unknown-linux-gnu/4.4.0/crtbegin.o:(.fini+0x0):
> relocation truncated to fit: R_PPC_REL24 against `.text'
> .../lib/gcc/powerpc-unknown-linux-gnu/4.4.0/crtend.o:(.init+0x0):
> relocation truncated to fit: R_PPC_REL24 against `.text' 
> 
> The application itself is compiled with -mlongcall,
> would adding -mlongcall to crtstuff.c Makefile rule help here?

It ought to.  You could also try GNU ld's --relax option, which might
also allow you to dispense with -mlongcall for your app.

> If no, what is the proper solution GCC-wise?

I'll note that this problem is exacerbated by the fact that crtbegin.o
defines the destructor function run from .fini and crtend.o defines
the constructor run from .init.  It really should be the other way
around, since this arrangement results in maximmum offset branches,
from the .init section located before .text to a function at the end
of .text, and from the .fini section located after .text to a function
at the beginning of .text.

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to