[PATCH kexec-tools] ppc64: correct @ha relocation

Mohan Kumar M mohan at in.ibm.com
Thu Apr 12 18:17:16 EST 2007


On Wed, Apr 11, 2007 at 03:30:00AM -0500, Milton Miller wrote:
> 
> The @ha relocation is supposed to account for the @l relocation being
> a signed quantity by adding 1 if the msb of @l is set.
> 
> The trick of adding 0x8000 stolen from the linux kernel file
> arch/powerpc/kernel/module_64.c which credits binutils.
> 
> Signed-off-by: Milton Miller <miltonm at bga.com>
>
Acked-by: Mohan Kumar M <mohan at in.ibm.com>


Cross checked with PPC64 ELF ABI also.
 
> --- 
> This relocation is used in v2wrap.S to hold and release the slave cpus.
> Without this fix the memory location may be 64k off the initialized variable
> which is checked against 0.
> 
> 
> --- kexec-tools-testing/kexec/arch/ppc64/kexec-elf-rel-ppc64.c.orig	2007-04-10 22:29:59.000000000 -0500
> +++ kexec-tools-testing/kexec/arch/ppc64/kexec-elf-rel-ppc64.c	2007-04-10 22:29:59.000000000 -0500
> @@ -97,7 +97,7 @@ void machine_apply_elf_rel(struct mem_eh
>  		break;
> 
>  	case R_PPC64_ADDR16_HA:
> -		*(uint16_t *)location = ((value>>16)  & 0xffff);
> +		*(uint16_t *)location = (((value+0x8000)>>16)  & 0xffff);
>  		break;
> 
>  	case R_PPC64_ADDR16_HIGHEST:



More information about the Linuxppc-dev mailing list