[LLVMdev] large modules, PPC on OS X, "ld: 32-bit pic-base out of range in"

Nick Kledzik kledzik at apple.com
Thu Mar 11 18:33:47 PST 2010


On Mar 11, 2010, at 6:07 PM, Chris Lattner wrote:
> On Mar 11, 2010, at 5:47 PM, Robb Kistler wrote:
>
>> I'm trying to build a very large shared library (bundle) for PPC on  
>> Mac OS X 10.5.  The build looks something like this, where  
>> mybundlebitcode.o is the large object
>>
>> llc -relocation-model=pic -o=mybundle.s mybundlebitcode.o
>> gcc -arch ppc -c -x assembler -o mybundle.o mybundle.s
>> g++ -o mybundle.bundle -bundle mybundle.o -lotherlibrary
>>
>> I get the following error:
>> 	ld: 32-bit pic-base out of range in somefunction(Array<unsigned  
>> char, 40ul> const&)from mybundle.o
>>
>> Normally I'd try to build with the -mlongcall option, but it  
>> doesn't appear that llc has support for this.  Is there some way to  
>> get llc to generate "long calls"?
>
> I thought that -mlongcall was a linker option?  Have you tried  
> passing it to GCC/G++ when you link the .s file?

-mlongcall is deprecated.  The linker ignores the "stubs" generated by  
the compiler.  The linker is capable of synthesizing branch islands  
for calls that are > 16 MB away but within the same linkage unit.

That error message happens not with a call site, but when there is a  
ppc code sequence that is using two instructions to add a 32-bit  
signed displacement to a "pic-base" register.  The linker thinks the  
target of the relocations is > 2GB away from the pic-base.

Just how large is this bundle?  Are you bumping up to a 2GB mach-o  
file limit?

Or are you using absolute addressing to symbols in another linkage  
unit?  That is not a supported code model.

-Nick




More information about the llvm-dev mailing list