[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