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)