[llvm-dev] [LLD] Can't create dynamic relocation R_X86_64_64 against local symbol in readonly segment

Martin Richtarsky via llvm-dev llvm-dev at lists.llvm.org
Thu Mar 23 08:47:11 PDT 2017


Rafael Avila de Espindola wrote:
>> $ gcc -o rodatareloc.s.o -c rodatareloc.s
>> $ lld -o rodatareloc.so -shared rodatareloc.s.o
>>
>> ld: error: rodatareloc.s.o:(.rodata+0x0): can't create dynamic
>> relocation
>> R_X86_64_64 against local symbol in readonly segment defined in
>> rodatareloc.s.o
>>
>>
>> Changing the section from .rodata to .data fixes it, but I guess this
>> should be supported also for .rodata. Should I open a bug?
>
> I think this is just a difference in defaults. If you pass "-z notext"
> to lld it should work.

Thanks, this helps! Any reason why the defaults are different to gold and
presumably bfd-ld?

I don't understand much of what is happening behind the scenes, but on
loading time, couldn't the rodata section just be mapped read-only, and
still the relocation be applied to the text section, pointing to wherever
rodata was mapped? No modification should be necessary to the rodata
section.

Thanks and Best regards,
Martin


More information about the llvm-dev mailing list