Module Name:src
Committed By: matt
Date: Mon Dec 14 03:04:33 UTC 2009
Modified Files:
src/lib/libc/compat/arch/mips/gen: compat_setjmp.S compat_sigsetjmp.S
src/lib/libc/compat/arch/mips/sys: compat_Ovfork.S compat___semctl.S
compat___sigreturn14.S compat___sigtramp1.S compat_sigpending.S
compat_sigprocmask.S compat_sigreturn.S compat_sigsuspend.S
Log Message:
Merge from matt-nb5-mips64
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/arch/mips/gen/compat_setjmp.S \
src/lib/libc/compat/arch/mips/gen/compat_sigsetjmp.S
cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/arch/mips/sys/compat_Ovfork.S \
src/lib/libc/compat/arch/mips/sys/compat___sigreturn14.S \
src/lib/libc/compat/arch/mips/sys/compat_sigpending.S \
src/lib/libc/compat/arch/mips/sys/compat_sigprocmask.S \
src/lib/libc/compat/arch/mips/sys/compat_sigreturn.S \
src/lib/libc/compat/arch/mips/sys/compat_sigsuspend.S
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/compat/arch/mips/sys/compat___semctl.S \
src/lib/libc/compat/arch/mips/sys/compat___sigtramp1.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/compat/arch/mips/gen/compat_setjmp.S
diff -u src/lib/libc/compat/arch/mips/gen/compat_setjmp.S:1.1 src/lib/libc/compat/arch/mips/gen/compat_setjmp.S:1.2
--- src/lib/libc/compat/arch/mips/gen/compat_setjmp.S:1.1 Sat Sep 17 11:49:39 2005
+++ src/lib/libc/compat/arch/mips/gen/compat_setjmp.S Mon Dec 14 03:04:33 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_setjmp.S,v 1.1 2005/09/17 11:49:39 tsutsui Exp $ */
+/* $NetBSD: compat_setjmp.S,v 1.2 2009/12/14 03:04:33 matt Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -32,21 +32,18 @@
* SUCH DAMAGE.
*/
-#include machine/cdefs.h
#include sys/syscall.h
-#include mips/regnum.h
#include mips/asm.h
-#include machine/signal.h
-#include machine/setjmp.h
-#if defined(LIBC_SCCS) !defined(lint)
- ASMSTR(from: @(#)setjmp.s 8.1 (Berkeley) 6/4/93)
- ASMSTR($NetBSD: compat_setjmp.S,v 1.1 2005/09/17 11:49:39 tsutsui Exp $)
-#endif /* LIBC_SCCS and not lint */
+#include assym.h
-#ifdef __ABICALLS__
- .abicalls
+#if defined(LIBC_SCCS) !defined(lint)
+#if 0
+ RCSID(from: @(#)setjmp.s 8.1 (Berkeley) 6/4/93)
+#else
+ RCSID($NetBSD: compat_setjmp.S,v 1.2 2009/12/14 03:04:33 matt Exp $)
#endif
+#endif /* LIBC_SCCS and not lint */
/*
* C library -- setjmp, longjmp
@@ -59,86 +56,107 @@
* and a struct sigcontext, see signal.h
*/
-#define SETJMP_FRAME_SIZE (CALLFRAME_SIZ + 12)
+#define SETJMP_FRAME_SIZE (CALLFRAME_SIZ + STACK_T_SIZE)
NON_LEAF(setjmp, SETJMP_FRAME_SIZE, ra)
- .mask 0x8000, (CALLFRAME_RA - CALLFRAME_SIZ)
-#ifdef __ABICALLS__
- .set noreorder
- .cpload t9
- .set reorder
-#endif
- subu sp, sp, SETJMP_FRAME_SIZE # allocate stack frame
-#ifdef __ABICALLS__
- .cprestore 16
-#endif
- sw ra, CALLFRAME_RA(sp) # save state
- sw a0, SETJMP_FRAME_SIZE(sp)
- move a0, zero # get current signal mask
- jal _C_LABEL(sigblock)
- lw v1, SETJMP_FRAME_SIZE(sp) # v1 = jmpbuf
- sw v0, (1 * 4)(v1) # save sc_mask = sigblock(0)
- move a0, zero
- addu a1, sp, CALLFRAME_SIZ # pointer to struct sigaltstack
- jal _C_LABEL(__sigaltstack14)
- lw a0, SETJMP_FRAME_SIZE(sp) # restore jmpbuf
- lw v1, CALLFRAME_SIZ+8(sp) # get old ss_onstack
- and v1, v1, 1 # extract onstack flag
- sw v1, 0(a0) # save it in sc_onstack
- lw ra, CALLFRAME_RA(sp)
- addu sp, sp, SETJMP_FRAME_SIZE
- blt v0, zero, botch # check for sigstack() error
+ .mask 0x8001, (CALLFRAME_RA - CALLFRAME_SIZ)
+ SETUP_GP
+ PTR_SUBU sp, sp, SETJMP_FRAME_SIZE # allocate stack frame
+ SAVE_GP(CALLFRAME_GP)
+ SETUP_GP64(CALLFRAME_GP, setjmp)
+
+ REG_S ra, CALLFRAME_RA(sp) # save RA
+ REG_S s0, CALLFRAME_S0(sp) # save S0
+ move s0, a0# save sigcontext
+
+ /* Get the signal mask. */
+ move a0, zero # get current sigmask
+ jal _C_LABEL(sigblock)
+ nop
+ INT_S v0, _OFFSETOF_SC_MASK13(s0) # save sc_mask13
+
+ /* Get the signal stack. */
+ move a0, zero
+ PTR_ADDU a1, sp, CALLFRAME_SIZ # pointer to stack_t
+ jal _C_LABEL(__sigaltstack14)
+
+ move a0, s0# restore jmpbuf
+ INT_L v1, CALLFRAME_SIZ+_OFFSETOF_STACK_T_FLAGS(sp)
+ # get old ss_onstack
+ and v1, v1, SS_ONSTACK # extract onstack flag
+ INT_S v1, _OFFSETOF_SC_ONSTACK(a0) # save it in sc_onstack
+
+ REG_L s0, CALLFRAME_S0(sp) # restore S0
+ REG_L ra, CALLFRAME_RA(sp) # restore RA
+ blt v0, zero, botch # check for sigaltstack() error
+ nop
+ /*
+ * We know we won't need this routine's GP anymore.
+ */
+ RESTORE_GP64
+ PTR_ADDU sp, sp, SETJMP_FRAME_SIZE # pop stack frame
+
REG_PROLOGUE
- REG_S ra, (2 * 4)(a0) # sc_pc = return address
+ REG_S ra, _OFFSETOF_SC_PC(a0) # sc_pc = return address
REG_LI v0, 0xACEDBADE # sigcontext magic number
- REG_S v0, (_OFFSETOF_SC_REGS + SZREG * _R_ZERO)(a0) # saved in sc_regs[0]
- REG_S s0, (_OFFSETOF_SC_REGS + SZREG *