Module Name: src Committed By: matt Date: Wed Feb 3 23:46:47 UTC 2010
Modified Files: src/lib/libc/arch/mips/gen [matt-nb5-mips64]: _setjmp.S setjmp.S Log Message: Fix setjmp/longjmp (longjmp(a,v) was not returning v) Fix __setjmp14 to not mark fp as used when running softfloat. To generate a diff of this commit: cvs rdiff -u -r1.20.34.4 -r1.20.34.5 src/lib/libc/arch/mips/gen/_setjmp.S cvs rdiff -u -r1.17.34.4 -r1.17.34.5 src/lib/libc/arch/mips/gen/setjmp.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/arch/mips/gen/_setjmp.S diff -u src/lib/libc/arch/mips/gen/_setjmp.S:1.20.34.4 src/lib/libc/arch/mips/gen/_setjmp.S:1.20.34.5 --- src/lib/libc/arch/mips/gen/_setjmp.S:1.20.34.4 Wed Jan 27 06:55:25 2010 +++ src/lib/libc/arch/mips/gen/_setjmp.S Wed Feb 3 23:46:47 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: _setjmp.S,v 1.20.34.4 2010/01/27 06:55:25 matt Exp $ */ +/* $NetBSD: _setjmp.S,v 1.20.34.5 2010/02/03 23:46:47 matt Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -46,7 +46,7 @@ #if 0 RCSID("from: @(#)_setjmp.s 8.1 (Berkeley) 6/4/93") #else - RCSID("$NetBSD: _setjmp.S,v 1.20.34.4 2010/01/27 06:55:25 matt Exp $") + RCSID("$NetBSD: _setjmp.S,v 1.20.34.5 2010/02/03 23:46:47 matt Exp $") #endif #endif /* LIBC_SCCS and not lint */ @@ -68,7 +68,6 @@ REG_LI v0, 0xACEDBADE # sigcontext magic number REG_S ra, _OFFSETOF_SC_PC(a0) # sc_pc = return address REG_S v0, _OFFSETOF_SC_REGS(a0) # saved in sc_regs[0] - REG_S a1, _OFFSETOF_SC_REGS_V0(a0) # save return value REG_S s0, _OFFSETOF_SC_REGS_S0(a0) REG_S s1, _OFFSETOF_SC_REGS_S1(a0) REG_S s2, _OFFSETOF_SC_REGS_S2(a0) @@ -128,6 +127,7 @@ REG_LI t0, 0xACEDBADE bne v0, t0, botch # jump if error PTR_ADDU sp, sp, CALLFRAME_SIZ # does not matter, sanity + REG_S a1, _OFFSETOF_SC_REGS_V0(a0) # save return value REG_L s0, _OFFSETOF_SC_REGS_S0(a0) REG_L s1, _OFFSETOF_SC_REGS_S1(a0) REG_L s2, _OFFSETOF_SC_REGS_S2(a0) @@ -173,7 +173,7 @@ #endif /* SOFTFLOAT_FOR_GCC */ REG_EPILOGUE - REG_L v0, _OFFSETOF_SC_REGS_V0(a0) + move v0, a1 # get return value in 1st arg j ra nop Index: src/lib/libc/arch/mips/gen/setjmp.S diff -u src/lib/libc/arch/mips/gen/setjmp.S:1.17.34.4 src/lib/libc/arch/mips/gen/setjmp.S:1.17.34.5 --- src/lib/libc/arch/mips/gen/setjmp.S:1.17.34.4 Wed Jan 27 06:55:25 2010 +++ src/lib/libc/arch/mips/gen/setjmp.S Wed Feb 3 23:46:47 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: setjmp.S,v 1.17.34.4 2010/01/27 06:55:25 matt Exp $ */ +/* $NetBSD: setjmp.S,v 1.17.34.5 2010/02/03 23:46:47 matt Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -41,7 +41,7 @@ #if 0 RCSID("from: @(#)setjmp.s 8.1 (Berkeley) 6/4/93") #else - RCSID("$NetBSD: setjmp.S,v 1.17.34.4 2010/01/27 06:55:25 matt Exp $") + RCSID("$NetBSD: setjmp.S,v 1.17.34.5 2010/02/03 23:46:47 matt Exp $") #endif #endif /* LIBC_SCCS and not lint */ @@ -111,8 +111,12 @@ REG_S gp, _OFFSETOF_SC_REGS_GP(a0) REG_S sp, _OFFSETOF_SC_REGS_SP(a0) REG_S s8, _OFFSETOF_SC_REGS_S8(a0) +#ifndef SOFTFLOAT_FOR_GCC li v0, 1 # be nice if we could tell INT_S v0, _OFFSETOF_SC_FPUSED(a0) # sc_fpused = 1 +#else + INT_S zero, _OFFSETOF_SC_FPUSED(a0) # sc_fpused = 0 +#endif #ifndef SOFTFLOAT_FOR_GCC cfc1 v0, $31 INT_S v0, _OFFSETOF_SC_FPREGS_FCSR(a0)