Subject: Re: [PATCH 3/3] zImage: Cleanup and improve zImage entry point

From: Geoff Levand <[email-masked]>
Date: Sat, 17 Feb 2007 17:22:24 -0800

David Gibson wrote:
> Index: working-2.6/arch/powerpc/boot/crt0.S
> @@ -59,6 +60,29 @@ _zimage_start:
>  	sync
>  	isync
>  
> -	mr	r6,r1
> -	b	start
> +	/* 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	5f
> +	lwz	r1,0(r8)

Do you need to make a stack frame here for your
call to platform_init so it will have a place when it
stores the link register?

> +5:
> +
> +	/* Clear the BSS */
> +	lis	r9,__bss_start@ha
> +	addi	r9,r9,__bss_start@l
> +	lis	r8,_end@ha
> +	addi	r8,r8,_end@l
> +	li	r0,0
> +6:	stw	r0,0(r9)
> +	addi	r9,r9,4
> +	cmplw	cr0,r9,r8
> +	blt	6b

This messed me up a bit since I had two stacks in the bss, one for each
processor thread.  By the time this was called on the primary thread the
secondary thread could already be using its stack.  I changed the secondary
thread to use a small stack in the data section, so this seems OK.

-Geoff