Module Name:    src
Committed By:   kiyohara
Date:           Mon May  2 06:37:47 UTC 2011

Modified Files:
        src/sys/arch/powerpc/ibm4xx: trap_subr.S

Log Message:
Fix broken stack.  The r1 is stack pointer.  Not cpu_info pointer.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/powerpc/ibm4xx/trap_subr.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/powerpc/ibm4xx/trap_subr.S
diff -u src/sys/arch/powerpc/ibm4xx/trap_subr.S:1.13 src/sys/arch/powerpc/ibm4xx/trap_subr.S:1.14
--- src/sys/arch/powerpc/ibm4xx/trap_subr.S:1.13	Tue Jan 18 01:02:54 2011
+++ src/sys/arch/powerpc/ibm4xx/trap_subr.S	Mon May  2 06:37:47 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap_subr.S,v 1.13 2011/01/18 01:02:54 matt Exp $	*/
+/*	$NetBSD: trap_subr.S,v 1.14 2011/05/02 06:37:47 kiyohara Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -90,14 +90,15 @@
 	mfsrr0	%r30;						\
 	mfsrr1	%r31; /* Test whether we already had PR set */	\
 	stmw	%r30,(savearea+CPUSAVE_SRR0)(%r1); /* save srr0/srr1 */	\
+	mfsprg1	%r1;			/* restore SP */ 	\
 	mtcr	%r31;						\
 	bc	%cr4,MSR_PR,1f;	/* branch if MSR[PR] is clear */	\
-	lwz	%r1,CI_CURPCB(%r1);				\
+	GET_PCB(%r1);						\
 	addi	%r1,%r1,USPACE-CALLFRAMELEN; /* stack is top of user struct */ \
 1:
 
 #define	ACCESS_PROLOG(savearea)					\
-	mtsprg1	%r1;			/* save SP */ 		\
+	mtsprg1	%r1;			/* save SP temporalily */	\
 	GET_CPUINFO(%r1);					\
 	stmw	%r28,(savearea+CPUSAVE_R28)(%r1); /* free r28-r31 */	\
 	mflr	%r28;			/* save LR */		\
@@ -108,24 +109,26 @@
 	mfsrr0	%r30;						\
 	mfsrr1	%r31; /* Test whether we already had PR set */	\
 	stmw	%r30,(savearea+CPUSAVE_SRR0)(%r1); /* save srr0/srr1 */	\
+	mfsprg1	%r1;			/* restore SP */ 	\
 	mtcr	%r31;						\
 	bc	%cr4,MSR_PR,1f;	/* branch if MSR[PR] is clear */	\
-	lwz	%r1,CI_CURPCB(%r1);				\
+	GET_PCB(%r1);						\
 	addi	%r1,%r1,USPACE-CALLFRAMELEN; /* stack is top of user struct */ \
 1:
 
 #define	CRITICAL_PROLOG(savearea)				\
 	mtsprg1	%r1;			/* save SP */ 		\
-	GET_CPUINFO(%r2);					\
+	GET_CPUINFO(%r1);					\
 	stmw	%r28,(savearea+CPUSAVE_R28)(%r1); /* free r28-r31 */	\
 	mflr	%r28;			/* save LR */		\
 	mfcr	%r29;			/* save CR */		\
 	mfsrr2	%r30; /* Fake a standard trap */		\
 	mfsrr3	%r31; /* Test whether we already had PR set */	\
 	stmw	%r30,(savearea+CPUSAVE_SRR0)(%r1); /* save srr0/srr1 */	\
+	mfsprg1	%r1;			/* restore SP */ 	\
 	mtcr	%r31;						\
 	bc	%cr4,MSR_PR,1f;	/* branch if MSR[PR] is clear */	\
-	lwz	%r1,CI_CURPCB(%r1);				\
+	GET_PCB(%r1);						\
 	addi	%r1,%r1,USPACE-CALLFRAMELEN; /* stack is top of user struct */ \
 1:
 

Reply via email to