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