[llvm-dev] [lld] Hiding original type of GOT related relocations

Simon Atanasyan via llvm-dev llvm-dev at lists.llvm.org
Tue Nov 24 06:03:54 PST 2015


On Mon, Nov 23, 2015 at 2:43 PM, Igor Kudrin <ikudrin.dev at gmail.com> wrote:
> Hi,
>
> On 21.11.2015 12:31, Rui Ueyama via llvm-dev wrote:
>
> On Fri, Nov 20, 2015 at 10:13 PM, Simon Atanasyan <simon at atanasyan.com>
> wrote:
>>
>> Hi,
>>
>> There are more than one MIPS relocations which need GOT entry
>> creation. Let's consider two of them R_MIPS_GOT16 and R_MIPS_CALL16
>> [1]. R_MIPS_GOT16 is applicable to local and external symbols and
>> performs a different calculation in each cases [2]. R_MIPS_CALL16 is
>> applicable to external symbols only and a linker should show an error
>> if it finds R_MIPS_CALL16 with a local target. Now LLD in the
>> `InputSectionBase<ELFT>::relocate` methods hides original type of GOT
>> relocations and always use the result of `Target->getGotRefReloc()`
>> call. In case of MIPS it is R_MIPS_GOT16. It makes impossible to
>> perform target symbol type checking and the error generation in the
>> `MipsTargetInfo<ELFT>::relocateOne` method.
>
>
> I guess there's no need to hide the type. It's just that because it works
> for x86, x86-64 or aarch64. If mips requires more info, it should be ok to
> change that.
>
> There was no support for GOT relocations for the AArch64 target. I'm adding
> it with http://reviews.llvm.org/D14917.
> I faced the similar problem, so I extended the getGotRefReloc() method in
> this patch.

Thanks for your replies, advice and fix.

-- 
Simon Atanasyan


More information about the llvm-dev mailing list