|
@@ -323,6 +323,15 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|
|
|
|
|
#define NOTEST(n)
|
|
|
|
|
|
+#define EXCEPTION_PROLOG_COMMON_1() \
|
|
|
+ std r9,_CCR(r1); /* save CR in stackframe */ \
|
|
|
+ std r11,_NIP(r1); /* save SRR0 in stackframe */ \
|
|
|
+ std r12,_MSR(r1); /* save SRR1 in stackframe */ \
|
|
|
+ std r10,0(r1); /* make stack chain pointer */ \
|
|
|
+ std r0,GPR0(r1); /* save r0 in stackframe */ \
|
|
|
+ std r10,GPR1(r1); /* save r1 in stackframe */ \
|
|
|
+
|
|
|
+
|
|
|
/*
|
|
|
* The common exception prolog is used for all except a few exceptions
|
|
|
* such as a segment miss on a kernel address. We have to be prepared
|
|
@@ -347,12 +356,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|
|
addi r3,r13,area; /* r3 -> where regs are saved*/ \
|
|
|
RESTORE_CTR(r1, area); \
|
|
|
b bad_stack; \
|
|
|
-3: std r9,_CCR(r1); /* save CR in stackframe */ \
|
|
|
- std r11,_NIP(r1); /* save SRR0 in stackframe */ \
|
|
|
- std r12,_MSR(r1); /* save SRR1 in stackframe */ \
|
|
|
- std r10,0(r1); /* make stack chain pointer */ \
|
|
|
- std r0,GPR0(r1); /* save r0 in stackframe */ \
|
|
|
- std r10,GPR1(r1); /* save r1 in stackframe */ \
|
|
|
+3: EXCEPTION_PROLOG_COMMON_1(); \
|
|
|
beq 4f; /* if from kernel mode */ \
|
|
|
ACCOUNT_CPU_USER_ENTRY(r13, r9, r10); \
|
|
|
SAVE_PPR(area, r9, r10); \
|