Subject: [PATCH 5/7] bootwrapper: missing relocation in crt0.S

From: Milton Miller <[email-masked]>
Date: Mon, 19 Mar 2007 14:58:05 -0600 (CST)

crt0.S had provisions to provide run address relocaton to got2 and
cache flush, but not on the bss clear or stack pointer load.  Apply
the same fixup for them.

--- 
Compiles and links.  Stack is created within the image when linked at
4M and run at 0.  Did not verify bss relocation.
 crt0.S |    9 +++++++++
 1 file changed, 9 insertions(+)

Index: kernel/arch/powerpc/boot/crt0.S
===================================================================
--- kernel.orig/arch/powerpc/boot/crt0.S	2007-03-16 23:22:00.000000000 -0500
+++ kernel/arch/powerpc/boot/crt0.S	2007-03-16 23:42:42.000000000 -0500
@@ -63,21 +63,30 @@ _zimage_start:
 	/* Clear the BSS */
 	lis	r9,__bss_start@ha
 	addi	r9,r9,__bss_start@l
+	add	r9,r0,r9
 	lis	r8,_end@ha
 	addi	r8,r8,_end@l
+	add	r8,r0,r8
 	li	r0,0
 5:	stw	r0,0(r9)
 	addi	r9,r9,4
 	cmplw	cr0,r9,r8
 	blt	5b
 
+	/* recreate relocation offset */
+	lis	r9,_end@ha
+	addi	r9,r9,_end@l
+	subf	r0,r9,r8
+
 	/* Possibly set up a custom stack */
 .weak	_platform_stack_top
 	lis	r8,_platform_stack_top@ha
 	addi	r8,r8,_platform_stack_top@l
 	cmpwi	r8,0
 	beq	6f
+	add	r8,r0,r8
 	lwz	r1,0(r8)
+	add	r1,r0,r1
 	li	r0,0
 	stwu	r0,-16(r1)	/* establish a stack frame */
 6: