[PATCH] D29392: [ELF] - Change value checks to checkUInt for R_386_8/R_386_PC8/R_386_16/R_386_PC16 relocations.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 3 07:29:56 PST 2017


So, with the fix for reading the addend as a signed number for the pc
relocation, can you use checkInt for PC and checkUint for non-pc in
here?

Cheers,
Rafael


George Rimar via Phabricator <reviews at reviews.llvm.org> writes:

> grimar added a comment.
>
> In https://reviews.llvm.org/D29392#665226, @ruiu wrote:
>
>> I'm sorry I didn't understand that.
>>
>> So, back to the example. You have this expression in assembly. This expression clearly needs overflow checking in some form for its operand because if it overflows (i.e. the jump target is too far), this jump instruction jumps to a wrong address. Is this OK?
>>
>>   jmp trampoline_start
>
>
> I think issue here is the same as https://reviews.llvm.org/D29490. Just need to signextend the addend. Output is correct:
>
>   125a:	e9 a3 fd f4 eb       	jmp    ebf51002 <intcall+0xebf4bdaa>
>
> Above is 2 bytes relative jump (disasm just reads it as 4 bytes, but we know it is 2 bytes here), so it is:
> JMP rel16, where rel16 = 0xFDA3 = -605.
>
> 0x125a - 605 + 3 bytes = 0xFFD + 3 = 0x1000
> And at this adress I see:
>
>   00001000 <pa_trampoline_start>:
>       1000:	fa                   	cli  
>
> So we produce correct output, but error out because of wrong addend, 
> I'll prepare a patch for addend, the same like for PC8 (https://reviews.llvm.org/D29490).
>
>
> https://reviews.llvm.org/D29392


More information about the llvm-commits mailing list