Commit 7f664cf9 authored by Jeremy Kerr's avatar Jeremy Kerr Committed by Michael Ellerman

powerpc/boot: don't clobber r6 and r7 in epapr boot

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: default avatarJeremy Kerr <jk@ozlabs.org>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 8c06f0d9
...@@ -155,29 +155,29 @@ p_base: mflr r10 /* r10 now points to runtime addr of p_base */ ...@@ -155,29 +155,29 @@ p_base: mflr r10 /* r10 now points to runtime addr of p_base */
ld r9,(p_rela-p_base)(r10) ld r9,(p_rela-p_base)(r10)
add r9,r9,r10 add r9,r9,r10
li r7,0 li r13,0
li r8,0 li r8,0
9: ld r6,0(r11) /* get tag */ 9: ld r12,0(r11) /* get tag */
cmpdi r6,0 cmpdi r12,0
beq 12f /* end of list */ beq 12f /* end of list */
cmpdi r6,RELA cmpdi r12,RELA
bne 10f bne 10f
ld r7,8(r11) /* get RELA pointer in r7 */ ld r13,8(r11) /* get RELA pointer in r13 */
b 11f b 11f
10: addis r6,r6,(-RELACOUNT)@ha 10: addis r12,r12,(-RELACOUNT)@ha
cmpdi r6,RELACOUNT@l cmpdi r12,RELACOUNT@l
bne 11f bne 11f
ld r8,8(r11) /* get RELACOUNT value in r8 */ ld r8,8(r11) /* get RELACOUNT value in r8 */
11: addi r11,r11,16 11: addi r11,r11,16
b 9b b 9b
12: 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 cmpdi cr1,r8,0
beq 3f beq 3f
beq cr1,3f beq cr1,3f
/* Calcuate the runtime offset. */ /* Calcuate the runtime offset. */
subf r7,r7,r9 subf r13,r13,r9
/* Run through the list of relocations and process the /* Run through the list of relocations and process the
* R_PPC64_RELATIVE ones. */ * R_PPC64_RELATIVE ones. */
...@@ -185,10 +185,10 @@ p_base: mflr r10 /* r10 now points to runtime addr of p_base */ ...@@ -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) */ 13: ld r0,8(r9) /* ELF64_R_TYPE(reloc->r_info) */
cmpdi r0,22 /* R_PPC64_RELATIVE */ cmpdi r0,22 /* R_PPC64_RELATIVE */
bne 3f bne 3f
ld r6,0(r9) /* reloc->r_offset */ ld r12,0(r9) /* reloc->r_offset */
ld r0,16(r9) /* reloc->r_addend */ ld r0,16(r9) /* reloc->r_addend */
add r0,r0,r7 add r0,r0,r13
stdx r0,r7,r6 stdx r0,r13,r12
addi r9,r9,24 addi r9,r9,24
bdnz 13b bdnz 13b
......
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