svn commit: r204513 - in user/jmallett/octeon: lib/libc/mips/gen sys/mips/include

Juli Mallett jmallett at FreeBSD.org
Mon Mar 1 10:43:13 UTC 2010


Author: jmallett
Date: Mon Mar  1 10:43:12 2010
New Revision: 204513
URL: http://svn.freebsd.org/changeset/base/204513

Log:
  Store registers in jmp buffers properly on n32 (and n64.)

Modified:
  user/jmallett/octeon/lib/libc/mips/gen/_setjmp.S
  user/jmallett/octeon/lib/libc/mips/gen/setjmp.S
  user/jmallett/octeon/lib/libc/mips/gen/sigsetjmp.S
  user/jmallett/octeon/sys/mips/include/setjmp.h

Modified: user/jmallett/octeon/lib/libc/mips/gen/_setjmp.S
==============================================================================
--- user/jmallett/octeon/lib/libc/mips/gen/_setjmp.S	Mon Mar  1 10:42:12 2010	(r204512)
+++ user/jmallett/octeon/lib/libc/mips/gen/_setjmp.S	Mon Mar  1 10:43:12 2010	(r204513)
@@ -65,21 +65,21 @@ LEAF(_setjmp)
 	.cprestore 16
 #endif
 	li	v0, _JB_MAGIC__SETJMP
-	sw	v0, (_JB_MAGIC  * SZREG)(a0)
-	sw	ra, (_JB_REG_RA * SZREG)(a0)
-	sw	s0, (_JB_REG_S0 * SZREG)(a0)
-	sw	s1, (_JB_REG_S1 * SZREG)(a0)
-	sw	s2, (_JB_REG_S2 * SZREG)(a0)
-	sw	s3, (_JB_REG_S3 * SZREG)(a0)
-	sw	s4, (_JB_REG_S4 * SZREG)(a0)
-	sw	s5, (_JB_REG_S5 * SZREG)(a0)
-	sw	s6, (_JB_REG_S6 * SZREG)(a0)
-	sw	s7, (_JB_REG_S7 * SZREG)(a0)
-	sw	s8, (_JB_REG_S8 * SZREG)(a0)
+	REG_S	v0, (_JB_MAGIC  * SZREG)(a0)
+	REG_S	ra, (_JB_REG_RA * SZREG)(a0)
+	REG_S	s0, (_JB_REG_S0 * SZREG)(a0)
+	REG_S	s1, (_JB_REG_S1 * SZREG)(a0)
+	REG_S	s2, (_JB_REG_S2 * SZREG)(a0)
+	REG_S	s3, (_JB_REG_S3 * SZREG)(a0)
+	REG_S	s4, (_JB_REG_S4 * SZREG)(a0)
+	REG_S	s5, (_JB_REG_S5 * SZREG)(a0)
+	REG_S	s6, (_JB_REG_S6 * SZREG)(a0)
+	REG_S	s7, (_JB_REG_S7 * SZREG)(a0)
+	REG_S	s8, (_JB_REG_S8 * SZREG)(a0)
 #ifdef __ABICALLS__
 	addu	sp, sp, CALLFRAME_SIZ	# un-allocate the stack frame
 #endif	
-	sw	sp, (_JB_REG_SP * SZREG)(a0)
+	REG_S	sp, (_JB_REG_SP * SZREG)(a0)
 	j	ra
 	move	v0, zero
 END(_setjmp)
@@ -91,20 +91,20 @@ LEAF(_longjmp)
 	subu	sp, sp, CALLFRAME_SIZ	# allocate stack frame
 	.cprestore 16
 #endif  
-	lw	v0, (_JB_MAGIC  * SZREG)(a0)
-	lw	ra, (_JB_REG_RA * SZREG)(a0)
+	REG_L	v0, (_JB_MAGIC  * SZREG)(a0)
+	REG_L	ra, (_JB_REG_RA * SZREG)(a0)
 	li	t0, _JB_MAGIC__SETJMP
 	bne	v0, t0, botch		# jump if error
-	lw	s0, (_JB_REG_S0 * SZREG)(a0)
-	lw	s1, (_JB_REG_S1 * SZREG)(a0)
-	lw	s2, (_JB_REG_S2 * SZREG)(a0)
-	lw	s3, (_JB_REG_S3 * SZREG)(a0)
-	lw	s4, (_JB_REG_S4 * SZREG)(a0)
-	lw	s5, (_JB_REG_S5 * SZREG)(a0)
-	lw	s6, (_JB_REG_S6 * SZREG)(a0)
-	lw	s7, (_JB_REG_S7 * SZREG)(a0)
-	lw	sp, (_JB_REG_SP * SZREG)(a0)
-	lw	s8, (_JB_REG_S8 * SZREG)(a0)
+	REG_L	s0, (_JB_REG_S0 * SZREG)(a0)
+	REG_L	s1, (_JB_REG_S1 * SZREG)(a0)
+	REG_L	s2, (_JB_REG_S2 * SZREG)(a0)
+	REG_L	s3, (_JB_REG_S3 * SZREG)(a0)
+	REG_L	s4, (_JB_REG_S4 * SZREG)(a0)
+	REG_L	s5, (_JB_REG_S5 * SZREG)(a0)
+	REG_L	s6, (_JB_REG_S6 * SZREG)(a0)
+	REG_L	s7, (_JB_REG_S7 * SZREG)(a0)
+	REG_L	sp, (_JB_REG_SP * SZREG)(a0)
+	REG_L	s8, (_JB_REG_S8 * SZREG)(a0)
 
 	j	ra
 	move	v0, a1

Modified: user/jmallett/octeon/lib/libc/mips/gen/setjmp.S
==============================================================================
--- user/jmallett/octeon/lib/libc/mips/gen/setjmp.S	Mon Mar  1 10:42:12 2010	(r204512)
+++ user/jmallett/octeon/lib/libc/mips/gen/setjmp.S	Mon Mar  1 10:43:12 2010	(r204513)
@@ -69,8 +69,8 @@ NESTED(setjmp, SETJMP_FRAME_SIZE, ra)
 #ifdef __ABICALLS__
 	.cprestore 16
 #endif
-	sw	ra, CALLFRAME_RA(sp)		# save RA
-	sw	a0, CALLFRAME_SIZ(sp)		# store env
+	REG_S	ra, CALLFRAME_RA(sp)		# save RA
+	REG_S	a0, CALLFRAME_SIZ(sp)		# store env
 
 	/* Get the signal mask. */
 	addu	a2, a0, _JB_SIGMASK * SZREG	# &oenv
@@ -80,23 +80,23 @@ NESTED(setjmp, SETJMP_FRAME_SIZE, ra)
 	jal	t9
 	nop
 
-	lw	a0, CALLFRAME_SIZ(sp)		# restore env pointer
-	lw	ra, CALLFRAME_RA(sp)		# restore RA
+	REG_L	a0, CALLFRAME_SIZ(sp)		# restore env pointer
+	REG_L	ra, CALLFRAME_RA(sp)		# restore RA
 	addu	sp, sp, SETJMP_FRAME_SIZE	# pop stack frame
 
 	li	v0, _JB_MAGIC_SETJMP
-	sw	v0, (_JB_MAGIC  * SZREG)(a0)
-	sw	ra, (_JB_REG_RA * SZREG)(a0)
-	sw	s0, (_JB_REG_S0 * SZREG)(a0)
-	sw	s1, (_JB_REG_S1 * SZREG)(a0)
-	sw	s2, (_JB_REG_S2 * SZREG)(a0)
-	sw	s3, (_JB_REG_S3 * SZREG)(a0)
-	sw	s4, (_JB_REG_S4 * SZREG)(a0)
-	sw	s5, (_JB_REG_S5 * SZREG)(a0)
-	sw	s6, (_JB_REG_S6 * SZREG)(a0)
-	sw	s7, (_JB_REG_S7 * SZREG)(a0)
-	sw	sp, (_JB_REG_SP * SZREG)(a0)
-	sw	s8, (_JB_REG_S8 * SZREG)(a0)
+	REG_S	v0, (_JB_MAGIC  * SZREG)(a0)
+	REG_S	ra, (_JB_REG_RA * SZREG)(a0)
+	REG_S	s0, (_JB_REG_S0 * SZREG)(a0)
+	REG_S	s1, (_JB_REG_S1 * SZREG)(a0)
+	REG_S	s2, (_JB_REG_S2 * SZREG)(a0)
+	REG_S	s3, (_JB_REG_S3 * SZREG)(a0)
+	REG_S	s4, (_JB_REG_S4 * SZREG)(a0)
+	REG_S	s5, (_JB_REG_S5 * SZREG)(a0)
+	REG_S	s6, (_JB_REG_S6 * SZREG)(a0)
+	REG_S	s7, (_JB_REG_S7 * SZREG)(a0)
+	REG_S	sp, (_JB_REG_SP * SZREG)(a0)
+	REG_S	s8, (_JB_REG_S8 * SZREG)(a0)
 
 	move	v0, zero
 	j	ra
@@ -114,14 +114,14 @@ NESTED(longjmp, LONGJMP_FRAME_SIZE, ra)
 #ifdef __ABICALLS__
 	.cprestore 16
 #endif
-	sw	ra, CALLFRAME_RA(sp)		# save RA
-	lw	v0, (_JB_MAGIC  * SZREG)(a0)
+	REG_S	ra, CALLFRAME_RA(sp)		# save RA
+	REG_L	v0, (_JB_MAGIC  * SZREG)(a0)
 	li	t0, _JB_MAGIC_SETJMP
 	bne	v0, t0, botch		# jump if error
 	nop
 
-	sw	a0, CALLFRAME_SIZ(sp)		# save env
-	sw	a1, (CALLFRAME_SIZ + SZREG)(sp)	# save return value
+	REG_S	a0, CALLFRAME_SIZ(sp)		# save env
+	REG_S	a1, (CALLFRAME_SIZ + SZREG)(sp)	# save return value
 
 	# set sigmask
 	addu	a1, a0, _JB_SIGMASK * SZREG	# &set
@@ -131,20 +131,20 @@ NESTED(longjmp, LONGJMP_FRAME_SIZE, ra)
 	jal	t9
 	nop
 
-	lw	a0, CALLFRAME_SIZ(sp)		# restore env
-	lw	a1, (CALLFRAME_SIZ + SZREG)(sp)	# restore return value
+	REG_L	a0, CALLFRAME_SIZ(sp)		# restore env
+	REG_L	a1, (CALLFRAME_SIZ + SZREG)(sp)	# restore return value
 
-	lw	ra, (_JB_REG_RA * SZREG)(a0)
-	lw	s0, (_JB_REG_S0 * SZREG)(a0)
-	lw	s1, (_JB_REG_S1 * SZREG)(a0)
-	lw	s2, (_JB_REG_S2 * SZREG)(a0)
-	lw	s3, (_JB_REG_S3 * SZREG)(a0)
-	lw	s4, (_JB_REG_S4 * SZREG)(a0)
-	lw	s5, (_JB_REG_S5 * SZREG)(a0)
-	lw	s6, (_JB_REG_S6 * SZREG)(a0)
-	lw	s7, (_JB_REG_S7 * SZREG)(a0)
-	lw	sp, (_JB_REG_SP * SZREG)(a0)
-	lw	s8, (_JB_REG_S8 * SZREG)(a0)
+	REG_L	ra, (_JB_REG_RA * SZREG)(a0)
+	REG_L	s0, (_JB_REG_S0 * SZREG)(a0)
+	REG_L	s1, (_JB_REG_S1 * SZREG)(a0)
+	REG_L	s2, (_JB_REG_S2 * SZREG)(a0)
+	REG_L	s3, (_JB_REG_S3 * SZREG)(a0)
+	REG_L	s4, (_JB_REG_S4 * SZREG)(a0)
+	REG_L	s5, (_JB_REG_S5 * SZREG)(a0)
+	REG_L	s6, (_JB_REG_S6 * SZREG)(a0)
+	REG_L	s7, (_JB_REG_S7 * SZREG)(a0)
+	REG_L	sp, (_JB_REG_SP * SZREG)(a0)
+	REG_L	s8, (_JB_REG_S8 * SZREG)(a0)
 	move	v0, a1
 	j	ra
 	nop

Modified: user/jmallett/octeon/lib/libc/mips/gen/sigsetjmp.S
==============================================================================
--- user/jmallett/octeon/lib/libc/mips/gen/sigsetjmp.S	Mon Mar  1 10:42:12 2010	(r204512)
+++ user/jmallett/octeon/lib/libc/mips/gen/sigsetjmp.S	Mon Mar  1 10:43:12 2010	(r204513)
@@ -64,10 +64,10 @@ LEAF(sigsetjmp)
 #endif
 	bne	a1, 0x0, 1f			# do saving of signal mask?
 	la	t9, _setjmp
-	jr t9
+	jr	t9
 
 1:	la	t9, setjmp
-	jr t9
+	jr	t9
 END(sigsetjmp)
 
 LEAF(siglongjmp)
@@ -76,7 +76,7 @@ LEAF(siglongjmp)
 	.cpload	t9
 	.set	reorder
 #endif
-	lw	t0, (_JB_MAGIC  * SZREG)(a0)
+	REG_L	t0, (_JB_MAGIC  * SZREG)(a0)
 	li	t1, _JB_MAGIC__SETJMP
 	bne	t0, t1, 1f			# setjmp or _setjmp magic?
 	la	t9, _longjmp

Modified: user/jmallett/octeon/sys/mips/include/setjmp.h
==============================================================================
--- user/jmallett/octeon/sys/mips/include/setjmp.h	Mon Mar  1 10:42:12 2010	(r204512)
+++ user/jmallett/octeon/sys/mips/include/setjmp.h	Mon Mar  1 10:43:12 2010	(r204513)
@@ -49,10 +49,18 @@
 #ifndef _LOCORE
 #ifndef __ASSEMBLER__
 #if __BSD_VISIBLE || __POSIX_VISIBLE || __XSI_VISIBLE
+#ifdef __mips_n32
+typedef struct _sigjmp_buf { long long _sjb[_JBLEN + 1]; } sigjmp_buf[1];
+#else
 typedef struct _sigjmp_buf { long _sjb[_JBLEN + 1]; } sigjmp_buf[1];
 #endif
+#endif
 
+#ifdef __mips_n32
+typedef struct _jmp_buf { long long _jb[_JBLEN + 1]; } jmp_buf[1];
+#else
 typedef struct _jmp_buf { long _jb[_JBLEN + 1]; } jmp_buf[1];
+#endif
 #endif /* __ASSEMBLER__ */
 #endif /* _LOCORE */
 


More information about the svn-src-user mailing list