Commit 3b830c82 authored by Laurent Dufour's avatar Laurent Dufour Committed by Benjamin Herrenschmidt

powerpc/relocate fix relocate processing in LE mode

Relocation's code is not working in little endian mode because the r_info
field, which is a 64 bits value, should be read from the right offset.

The current code is optimized to read the r_info field as a 32 bits value
starting at the middle of the double word (offset 12). When running in LE
mode, the read value is not correct since only the MSB is read.

This patch removes this optimization which consist to deal with a 32 bits
value instead of a 64 bits one. This way it works in big and little endian
mode.
Signed-off-by: default avatarLaurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 429d2e83
...@@ -69,8 +69,8 @@ _GLOBAL(relocate) ...@@ -69,8 +69,8 @@ _GLOBAL(relocate)
* R_PPC64_RELATIVE ones. * R_PPC64_RELATIVE ones.
*/ */
mtctr r8 mtctr r8
5: lwz r0,12(9) /* ELF64_R_TYPE(reloc->r_info) */ 5: ld r0,8(9) /* ELF64_R_TYPE(reloc->r_info) */
cmpwi r0,R_PPC64_RELATIVE cmpdi r0,R_PPC64_RELATIVE
bne 6f bne 6f
ld r6,0(r9) /* reloc->r_offset */ ld r6,0(r9) /* reloc->r_offset */
ld r0,16(r9) /* reloc->r_addend */ ld r0,16(r9) /* reloc->r_addend */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment