On Tue, 2015-02-10 at 20:15 +0800, Jeremy Kerr wrote:
> We use r6 and r7 for epapr boot, but the current pre-C init will clobber
> both of these.
> 
> This change does a simple replacement, of r6 -> r12 and r7 -> r13, so
> that we hit platform init with these registers intact.
> 
> Signed-off-by: Jeremy Kerr <j...@ozlabs.org>

You might want to also remove the use of r8 and r9 which are supposed
to contain the OPAL entry and base for debugging purposes. We would also
have to restore them before booting the kernel.

[ Note: kexec is also missing that ]

Ben.

> ---
>  arch/powerpc/boot/crt0.S |   24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
> index bf8eeee..7e50211 100644
> --- a/arch/powerpc/boot/crt0.S
> +++ b/arch/powerpc/boot/crt0.S
> @@ -155,29 +155,29 @@ p_base: mflr    r10             /* r10 now points to 
> runtime addr of p_base */
>       ld      r9,(p_rela-p_base)(r10)
>       add     r9,r9,r10
>  
> -     li      r7,0
> +     li      r13,0
>       li      r8,0
> -9:   ld      r6,0(r11)       /* get tag */
> -     cmpdi   r6,0
> +9:   ld      r12,0(r11)       /* get tag */
> +     cmpdi   r12,0
>       beq     12f              /* end of list */
> -     cmpdi   r6,RELA
> +     cmpdi   r12,RELA
>       bne     10f
> -     ld      r7,8(r11)       /* get RELA pointer in r7 */
> +     ld      r13,8(r11)       /* get RELA pointer in r13 */
>       b       11f
> -10:  addis   r6,r6,(-RELACOUNT)@ha
> -     cmpdi   r6,RELACOUNT@l
> +10:  addis   r12,r12,(-RELACOUNT)@ha
> +     cmpdi   r12,RELACOUNT@l
>       bne     11f
>       ld      r8,8(r11)       /* get RELACOUNT value in r8 */
>  11:  addi    r11,r11,16
>       b       9b
>  12:
> -     cmpdi   r7,0            /* check we have both RELA and RELACOUNT */
> +     cmpdi   r13,0            /* check we have both RELA and RELACOUNT */
>       cmpdi   cr1,r8,0
>       beq     3f
>       beq     cr1,3f
>  
>       /* Calcuate the runtime offset. */
> -     subf    r7,r7,r9
> +     subf    r13,r13,r9
>  
>       /* Run through the list of relocations and process the
>        * R_PPC64_RELATIVE ones. */
> @@ -185,10 +185,10 @@ p_base: mflr    r10             /* r10 now points to 
> runtime addr of p_base */
>  13:  ld      r0,8(r9)        /* ELF64_R_TYPE(reloc->r_info) */
>       cmpdi   r0,22           /* R_PPC64_RELATIVE */
>       bne     3f
> -     ld      r6,0(r9)        /* reloc->r_offset */
> +     ld      r12,0(r9)        /* reloc->r_offset */
>       ld      r0,16(r9)       /* reloc->r_addend */
> -     add     r0,r0,r7
> -     stdx    r0,r7,r6
> +     add     r0,r0,r13
> +     stdx    r0,r13,r12
>       addi    r9,r9,24
>       bdnz    13b
>  
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to