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)

Reply via email to