[PATCH] D29392: [ELF] - Change value checks to checkUInt for R_386_8/R_386_PC8/R_386_16/R_386_PC16 relocations.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 2 03:25:09 PST 2017
grimar added a comment.
In https://reviews.llvm.org/D29392#663412, @ruiu wrote:
> Can you describe why this is correct? Relaxing the error checks until the kernel links is not a good idea.
>
> I believe you should use checkUInt for R_386_{8,16} and checkInt for R_386_PC{8,16}.
Reproduce I have fails on R_386_PC16 relocation with value 0x000000000000fda3.
In code that place looks like:
(https://github.com/torvalds/linux/blob/master/arch/x86/realmode/rm/wakeup_asm.S#L135)
jmp trampoline_start
disasm of LLD linked is:
125a: e9 a3 fd f4 eb jmp ebf51002 <intcall+0xebf4bdaa>
BFD linked:
125a: e9 a3 fd f4 eb jmp ebf51002 <end_signature+0xebf4bdae>
So as you see output is equal.
But BFD accepts the input, LLD - not. That unfortunately all usefull info I have now.
I switched to minimal kernel configuration yesterday and it looks does not use this object anymore (it does not generate it at all).
So we can return to that question a bit later, when I'll be able to check that place separatelly.
(I really doubt there is something wrong with that place. All I can do is try to change it and see if that is breaks anything, for my eye now
it looks just like a regular jump).
In https://reviews.llvm.org/D29392#663429, @davide wrote:
> Sorry to say that, but this doesn't seem quite right to me. We should really understand why that check fails and not silencing it.
> It could be anything from a linker bug (including, the broken check itself) from the assembler emitting a broken object (BTW, which assembler are you using?)
Hard to say what is right here, ABI says "The R_386_16, and R_386_8 relocations truncate the computed value to 16-bits and 8-bits respectively.",
doing any checks is not what corresponds the ABI and gnu linkers have different behavior here.
I will try to check the place above and I just guess if we want do checks and don't want to follow ABI,
we probably will want to be compatible with BFD. Will see.
I use:
as -V
GNU assembler version 2.27 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.27
for working on kernel linkage.
https://reviews.llvm.org/D29392
More information about the llvm-commits
mailing list