Date: Mon, 1 Mar 2010 10:43:13 +0000 (UTC) From: Juli Mallett <jmallett@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r204513 - in user/jmallett/octeon: lib/libc/mips/gen sys/mips/include Message-ID: <201003011043.o21AhDXB074709@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003011043.o21AhDXB074709>