[PATCH] D26133: [ELF] Allow relative relocations to absolute symbols in PIC

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 9 13:53:36 PST 2017


Petr Hosek <phosek at google.com> writes:

> On Wed, Mar 8, 2017 at 10:52 AM Cary Coutant <ccoutant at gmail.com> wrote:
>
>> No, symbols in an ET_EXEC or ET_DYN object always have
>> already-relocated values. The section index is irrelevant other than
>> to indicate that the symbol is not absolute or undefined. That's the
>> point of the paragraph I quoted from the end of the symbol table
>> chapter from the ELF spec. In gold, I try to find a section that
>> belongs to the segment that the symbol is associated with, but setting
>> st_shndx to 1 would be just as effective.
>>
>
> I think this is an issue in LLD. I started experimenting with the solution
> proposed by Peter which is to replace that linker script with:
>
> PROVIDE_HIDDEN(_base = ADDR(.text) - ABSOLUTE(ADDR(.text)));
>
> In LLD, this symbol would be processed as a synthetic symbol with value 0
> and .text section, which is correct. The problem is that LLD assumes that
> all synthetic symbols are section relative, so when emitting that symbol,
> LLD would adjust its address by the address of .text, so the final value is
> going to be whatever the .text address is rather than image base.

That is a bug. Could you report it?

Thanks,
Rafael


More information about the llvm-commits mailing list