ACK: [PATCH 1/2 Trusty SRU] powerpc/relocate fix relocate processing in LE mode

Brad Figg brad.figg at canonical.com
Fri Apr 25 15:08:25 UTC 2014


On 04/25/2014 07:50 AM, Tim Gardner wrote:
> From: Laurent Dufour <ldufour at linux.vnet.ibm.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/1312783
> 
> 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: Laurent Dufour <ldufour at linux.vnet.ibm.com>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> (cherry picked from commit 3b830c824a8b15bf032eafe09c48a09d2441f16d)
> ---
>  arch/powerpc/kernel/reloc_64.S | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/reloc_64.S b/arch/powerpc/kernel/reloc_64.S
> index c712ece..d88736f 100644
> --- a/arch/powerpc/kernel/reloc_64.S
> +++ b/arch/powerpc/kernel/reloc_64.S
> @@ -69,8 +69,8 @@ _GLOBAL(relocate)
>  	 * R_PPC64_RELATIVE ones.
>  	 */
>  	mtctr	r8
> -5:	lwz	r0,12(9)	/* ELF64_R_TYPE(reloc->r_info) */
> -	cmpwi	r0,R_PPC64_RELATIVE
> +5:	ld	r0,8(9)		/* ELF64_R_TYPE(reloc->r_info) */
> +	cmpdi	r0,R_PPC64_RELATIVE
>  	bne	6f
>  	ld	r6,0(r9)	/* reloc->r_offset */
>  	ld	r0,16(r9)	/* reloc->r_addend */
> 


-- 
Brad Figg brad.figg at canonical.com http://www.canonical.com




More information about the kernel-team mailing list