Module Name: src
Committed By: matt
Date: Mon Sep 7 22:05:45 UTC 2009
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]: locore.S
Log Message:
On N32/N64 save/restore gp since it's a callee-saved register.
Don't use proc0paddr, use lwp0->l_addr
To generate a diff of this commit:
cvs rdiff -u -r1.167.38.1 -r1.167.38.2 src/sys/arch/mips/mips/locore.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/mips/mips/locore.S
diff -u src/sys/arch/mips/mips/locore.S:1.167.38.1 src/sys/arch/mips/mips/locore.S:1.167.38.2
--- src/sys/arch/mips/mips/locore.S:1.167.38.1 Thu Aug 20 23:27:06 2009
+++ src/sys/arch/mips/mips/locore.S Mon Sep 7 22:05:45 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.167.38.1 2009/08/20 23:27:06 matt Exp $ */
+/* $NetBSD: locore.S,v 1.167.38.2 2009/09/07 22:05:45 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -101,7 +101,7 @@
#ifdef NOFPU /* No FPU; avoid touching FPU registers */
#ifdef _LP64
- li t0, MIPS_SR_KX
+ li t0, MIPS_SR_KX # turn on XKSEG and XKPHYS
#else
li t0, 0 # Disable interrupts and
#endif
@@ -145,7 +145,7 @@
jal _C_LABEL(mach_init) # mach_init(a0, a1, a2, a3)
nop
- PTR_L sp, _C_LABEL(proc0paddr) # switch to proc0 stack
+ PTR_L sp, L_ADDR(MIPS_CURLWP) # switch to lwp0 stack
nop
PTR_ADDU sp, USPACE - FRAME_SIZ - CALLFRAME_SIZ
jal _C_LABEL(main) # main(void)
@@ -185,6 +185,9 @@
REG_S s8, U_PCB_CONTEXT+SF_REG_S8(a2)
REG_S ra, U_PCB_CONTEXT+SF_REG_RA(a2)
REG_S t0, U_PCB_CONTEXT+SF_REG_SR(a2)
+#if defined(__mips_n32) || defined(__mips_n64)
+ REG_S gp, U_PCB_CONTEXT+SF_REG_GP(a2)
+#endif
#ifdef IPL_ICU_MASK
INT_L t0, _C_LABEL(md_imask)
INT_S t0, U_PCB_PPL(a2)
@@ -244,6 +247,9 @@
REG_L s5, U_PCB_CONTEXT+SF_REG_S5(a0)
REG_L s6, U_PCB_CONTEXT+SF_REG_S6(a0)
REG_L s7, U_PCB_CONTEXT+SF_REG_S7(a0)
+#if defined(__mips_n32) || defined(__mips_n64)
+ REG_L gp, U_PCB_CONTEXT+SF_REG_GP(a0)
+#endif
REG_L sp, U_PCB_CONTEXT+SF_REG_SP(a0)
REG_L s8, U_PCB_CONTEXT+SF_REG_S8(a0)
REG_EPILOGUE
@@ -267,6 +273,9 @@
REG_S s5, U_PCB_CONTEXT+SF_REG_S5(a0)
REG_S s6, U_PCB_CONTEXT+SF_REG_S6(a0)
REG_S s7, U_PCB_CONTEXT+SF_REG_S7(a0)
+#if defined(__mips_n32) || defined(__mips_n64)
+ REG_S gp, U_PCB_CONTEXT+SF_REG_GP(a0)
+#endif
REG_S sp, U_PCB_CONTEXT+SF_REG_SP(a0)
REG_S s8, U_PCB_CONTEXT+SF_REG_S8(a0)
REG_S ra, U_PCB_CONTEXT+SF_REG_RA(a0)
@@ -292,6 +301,9 @@
REG_S s5, SF_REG_S5(a0)
REG_S s6, SF_REG_S6(a0)
REG_S s7, SF_REG_S7(a0)
+#if defined(__mips_n32) || defined(__mips_n64)
+ REG_S gp, SF_REG_GP(a0)
+#endif
REG_S sp, SF_REG_SP(a0)
REG_S s8, SF_REG_S8(a0)
REG_S ra, SF_REG_RA(a0)
@@ -314,6 +326,9 @@
REG_L s5, SF_REG_S5(a0)
REG_L s6, SF_REG_S6(a0)
REG_L s7, SF_REG_S7(a0)
+#if defined(__mips_n32) || defined(__mips_n64)
+ REG_L gp, SF_REG_GP(a0)
+#endif
REG_L sp, SF_REG_SP(a0)
REG_L s8, SF_REG_S8(a0)
REG_EPILOGUE
@@ -444,9 +459,8 @@
LEAF(_splnone)
mtc0 zero, MIPS_COP_0_CAUSE # clear SOFT_INT bits
COP0_SYNC
-#if 0
- mfc0 v0, MIPS_COP_0_STATUS # enable all sources
- ori v0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
+#ifdef _LP64
+ li v0, (MIPS_INT_MASK | MIPS_SR_INT_IE | MIPS_SR_KX)
#else
li v0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
#endif