[Skiboot] [PATCH] head.S: store all of LR and CTR

Michael Neuling mikey at neuling.org
Fri May 5 16:03:41 AEST 2017


On Thu, 2017-05-04 at 15:47 +1000, Oliver O'Halloran wrote:
> When saving the CTR and LR registers the skiboot exception handlers use the
> 'stw' instruction which only saves the lower 32 bits of the register. Given
> these are both 64 bit registers this leads to some strange register dumps,
> for example:
> 
> ***********************************************
> Unexpected exception 200 !
> SRR0 : 0000000030016968 SRR1 : 9000000000201000
> HSRR0: 0000000000000180 HSRR1: 9000000000001000
> LR   : 3003438830823f50 CTR  : 3003438800000018
> CFAR : 00000000300168fc
> CR   : 40004208  XER: 00000000
> 
> In this dump the upper 32 bits of LR and CTR are actually stack gunk
> which obscures the underlying issue.
> 
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>

Acked-by: Michael Neuling <mikey at neuling.org>

> ---
>  asm/head.S | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/asm/head.S b/asm/head.S
> index 8dabffd184a1..b10fbb554657 100644
> --- a/asm/head.S
> +++ b/asm/head.S
> @@ -198,8 +198,8 @@ _exception:
>  	mflr	%r6
>  	stw	%r3,STACK_CR(%r1)
>  	stw	%r4,STACK_XER(%r1)
> -	stw	%r5,STACK_CTR(%r1)
> -	stw	%r5,STACK_LR(%r1)
> +	std	%r5,STACK_CTR(%r1)
> +	std	%r5,STACK_LR(%r1)
>  	mfspr	%r3,SPR_SRR0
>  	mfspr	%r4,SPR_SRR1
>  	mfspr	%r5,SPR_HSRR0


More information about the Skiboot mailing list