mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 15:10:38 +00:00
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: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
8c06f0d910
commit
7f664cf9e4
@ -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 */
|
|||||||
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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user