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