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

Rafael Avila de Espindola via llvm-dev llvm-dev at lists.llvm.org
Thu Mar 23 08:23:17 PDT 2017


Martin Richtarsky via llvm-dev <llvm-dev at lists.llvm.org> writes:

> Hi,
>
> the attached example works with bfd-ld and with gold, but not with lld:
>
> $ cat rodatareloc.s
> ...
> .align 16
>     leaq    .JTab(%rip), %r10
>     jmp     *(%r10, %rdx, 8)
> ...
> .section .rodata
> .JTab:
>     .quad .L00, .L01, .L02, .L03, .L04, .L05, .L06, .L07
>     .quad .L08, .L09, .L10, .L11, .L12, .L13, .L14, .L15, .L16
>
> $ 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.

Cheers,
Rafael


More information about the llvm-dev mailing list