[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