Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libc/arch/sh5 Userland side of SH5 signals/setjmp.
details: https://anonhg.NetBSD.org/src/rev/83e957d8fbfa
branches: trunk
changeset: 533951:83e957d8fbfa
user: scw <scw%NetBSD.org@localhost>
date: Thu Jul 11 14:23:04 2002 +0000
description:
Userland side of SH5 signals/setjmp.
diffstat:
lib/libc/arch/sh5/Makefile.inc | 4 +-
lib/libc/arch/sh5/gen/Makefile.inc | 6 +-
lib/libc/arch/sh5/gen/__setjmp14.S | 184 +++++++++++++++++++
lib/libc/arch/sh5/gen/__sigsetjmp14.S | 73 +++++++
lib/libc/arch/sh5/gen/_setjmp.S | 241 ++++++++++++++++--------
lib/libc/arch/sh5/gen/sigsetjmp.S | 42 ----
lib/libc/arch/sh5/sys/__sigaction14_sigtramp.c | 58 ++++++
lib/libc/arch/sh5/sys/__sigtramp1.S | 51 +++++
8 files changed, 528 insertions(+), 131 deletions(-)
diffs (truncated from 725 to 300 lines):
diff -r 8b2a3c4afed3 -r 83e957d8fbfa lib/libc/arch/sh5/Makefile.inc
--- a/lib/libc/arch/sh5/Makefile.inc Thu Jul 11 14:16:42 2002 +0000
+++ b/lib/libc/arch/sh5/Makefile.inc Thu Jul 11 14:23:04 2002 +0000
@@ -1,4 +1,6 @@
-# $NetBSD: Makefile.inc,v 1.1 2002/07/05 13:32:58 scw Exp $
+# $NetBSD: Makefile.inc,v 1.2 2002/07/11 14:23:04 scw Exp $
KMINCLUDES=
KMSRCS=
+
+SRCS+= __sigaction14_sigtramp.c __sigtramp1.S
diff -r 8b2a3c4afed3 -r 83e957d8fbfa lib/libc/arch/sh5/gen/Makefile.inc
--- a/lib/libc/arch/sh5/gen/Makefile.inc Thu Jul 11 14:16:42 2002 +0000
+++ b/lib/libc/arch/sh5/gen/Makefile.inc Thu Jul 11 14:23:04 2002 +0000
@@ -1,9 +1,9 @@
-# $NetBSD: Makefile.inc,v 1.2 2002/07/10 13:09:04 scw Exp $
+# $NetBSD: Makefile.inc,v 1.3 2002/07/11 14:23:05 scw Exp $
-SRCS+= alloca.S \
+SRCS+= __setjmp14.S __sigsetjmp14.S _setjmp.S \
+ alloca.S \
byte_swap_2.S byte_swap_4.S byte_swap_8.S \
fabs.S flt_rounds.S \
- sigsetjmp.S _setjmp.S
SRCS+= ieee754_frexp.c ieee754_infinity.c ieee754_isinf.c ieee754_isnan.c \
ieee754_ldexp.c ieee754_modf.c ieee754_nanf.c
diff -r 8b2a3c4afed3 -r 83e957d8fbfa lib/libc/arch/sh5/gen/__setjmp14.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/arch/sh5/gen/__setjmp14.S Thu Jul 11 14:23:04 2002 +0000
@@ -0,0 +1,184 @@
+/* $NetBSD: __setjmp14.S,v 1.1 2002/07/11 14:23:05 scw Exp $ */
+
+/*
+ * Copyright 2002 Wasabi Systems, Inc.
+ * All rights reserved.
+ *
+ * Written by Steve C. Woodford for Wasabi Systems, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed for the NetBSD Project by
+ * Wasabi Systems, Inc.
+ * 4. The name of Wasabi Systems, Inc. may not be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <machine/asm.h>
+#include <machine/setjmp.h>
+
+/*
+ * C library -- setjmp, longjmp
+ *
+ * longjmp(a,v)
+ * will generate a "return(v)" from
+ * the last call to
+ * setjmp(a)
+ * by restoring registers from the stack,
+ * and the previous signal state.
+ */
+
+ENTRY_NOPROFILE(__setjmp14)
+ /* Save callee-saved register */
+ getcon usr, r1
+ st.q r2, _JB_R10, r10
+ st.q r2, _JB_R11, r11
+ st.q r2, _JB_R12, r12
+ st.q r2, _JB_R13, r13
+ st.q r2, _JB_R14, r14
+ st.q r2, _JB_R15, r15
+ st.q r2, _JB_R18, r18
+ LDUC32(0xACEBABE5, r0)
+ st.q r2, _JB_R24, r0 /* sigcontext magic number */
+ st.q r2, _JB_R26, r26
+ st.q r2, _JB_R27, r27
+ st.q r2, _JB_R28, r28
+ st.q r2, _JB_R29, r29
+ st.q r2, _JB_R30, r30
+ st.q r2, _JB_R31, r31
+ st.q r2, _JB_R32, r32
+ st.q r2, _JB_R33, r33
+ st.q r2, _JB_R34, r34
+ st.q r2, _JB_R35, r35
+ st.q r2, _JB_R44, r44
+ st.q r2, _JB_R45, r45
+ st.q r2, _JB_R46, r46
+ st.q r2, _JB_R47, r47
+ st.q r2, _JB_R48, r48
+ st.q r2, _JB_R49, r49
+ st.q r2, _JB_R50, r50
+ st.q r2, _JB_R51, r51
+ st.q r2, _JB_R52, r52
+ st.q r2, _JB_R53, r53
+ st.q r2, _JB_R54, r54
+ st.q r2, _JB_R55, r55
+ st.q r2, _JB_R56, r56
+ st.q r2, _JB_R57, r57
+ st.q r2, _JB_R58, r58
+ st.q r2, _JB_R59, r59
+ movi 1, r0
+ st.q r2, _JB_TR0, r0 /* Ensure caller-saved copies of */
+ st.q r2, _JB_TR1, r0 /* branch-target registers have valid */
+ st.q r2, _JB_TR2, r0 /* (albeit, pointing to nothing) */
+ st.q r2, _JB_TR3, r0 /* SHmedia addresses. */
+ st.q r2, _JB_TR4, r0
+ gettr tr5, r0
+ st.q r2, _JB_TR5, r0
+ gettr tr6, r0
+ st.q r2, _JB_TR6, r0
+ gettr tr7, r0
+ st.q r2, _JB_TR7, r0
+ pta/u 1f, tr0
+ shlri r1, 8, r3
+ andi r3, 0xff, r3
+ movi 0, r0 /* Assume not saved */
+ beq/u r3, r63, tr0 /* Jump if no FP regs used */
+ movi -3329, r0 /* Mask for FP regs saved/used */
+ and r1, r0, r1 /* Update USR */
+ fst.d r2, _JB_DR12, dr12 /* Quicker to save all callee-saved */
+ fst.d r2, _JB_DR14, dr14 /* than check USR bits */
+ fst.d r2, _JB_DR36, dr36
+ fst.d r2, _JB_DR38, dr38
+ fst.d r2, _JB_DR40, dr40
+ fst.d r2, _JB_DR42, dr42
+ fst.d r2, _JB_DR44, dr44
+ fst.d r2, _JB_DR46, dr46
+ fst.d r2, _JB_DR48, dr48
+ fst.d r2, _JB_DR50, dr50
+ fst.d r2, _JB_DR52, dr52
+ fst.d r2, _JB_DR54, dr54
+ fst.d r2, _JB_DR56, dr56
+ fst.d r2, _JB_DR58, dr58
+ fst.d r2, _JB_DR60, dr60
+ fst.d r2, _JB_DR62, dr62
+ fgetscr fr0
+ fst.d r2, _JB_FPSCR, dr0
+ movi 3, r0 /* Regs saved/used */
+1: st.l r2, _JB_SIGFPSTATE, r0
+ st.q r2, _JB_USR, r1
+
+ or r2, r63, r28 /* r28 is a safe-haven for jmpbuf */
+
+ /* Get signal information */
+ pta/l _C_LABEL(__sigprocmask14), tr0
+ movi 0, r2 /* how */
+ movi 0, r3 /* set (NULL) */
+ movi _JB_SIGMASK, r0
+ add r28, r0, r4 /* point to mask in jmpbuf */
+ blink tr0, r18
+
+ /* Prepare to fetch the current signal stack state */
+ pta/l _C_LABEL(__sigaltstack14), tr0
+#ifndef _LP64
+ addi r15, -12, r15 /* sizeof(struct sigaltstack) */
+#else
+ addi r15, -24, r15 /* sizeof(struct sigaltstack) */
+#endif
+ movi 0, r2 /* ss = NULL */
+ or r15, r63, r3 /* oss -> sigaltstack created above */
+ blink tr0, r18
+#ifndef _LP64
+ ld.l r15, 8, r0 /* Fetch oss->ss_flags */
+ addi r15, 12, r15 /* Clear stack */
+#else
+ ld.l r15, 16, r0 /* Fetch oss->ss_flags */
+ addi r15, 24, r15 /* Clear stack */
+#endif
+ ld.q r28, _JB_R18, r18 /* Restore return address */
+ pta/u Lbotch, tr0 /* Exit on error */
+ bgt/u r63, r2, tr0
+ andi r0, 1, r0 /* Get SA_ONSTACK flag */
+ st.l r28, _JB_SIGONSTACK, r0 /* Save it in sc_onstack */
+ st.l r28, _JB_SIGMASK13, r63 /* Zero unused fields */
+ st.l r28, _JB_SIGPAD, r63
+ ld.l r28, _JB_R18, r18 /* Restore return address */
+ ld.l r28, _JB_R28, r28 /* Restore r28 */
+ ptabs/l r18, tr0
+ movi 0, r2
+ blink tr0, r63
+
+
+ENTRY_NOPROFILE(__longjmp14)
+ LINK_FRAME(0)
+ pta/l _C_LABEL(__sigreturn14), tr0
+ cmpeq r3, r63, r3 /* Ensure a non-zero return value */
+ st.q r2, _JB_R2, r3 /* Modify jmp_buf's copy of r2 */
+ blink tr0, r18
+ UNLINK_FRAME(0)
+
+Lbotch: pta/l _C_LABEL(longjmperror), tr0
+ blink tr0, r18
+ pta/l _C_LABEL(abort), tr0
+ blink tr0, r63
+
diff -r 8b2a3c4afed3 -r 83e957d8fbfa lib/libc/arch/sh5/gen/__sigsetjmp14.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/arch/sh5/gen/__sigsetjmp14.S Thu Jul 11 14:23:04 2002 +0000
@@ -0,0 +1,73 @@
+/* $NetBSD: __sigsetjmp14.S,v 1.1 2002/07/11 14:23:05 scw Exp $ */
+
+/*
+ * Copyright 2002 Wasabi Systems, Inc.
+ * All rights reserved.
+ *
+ * Written by Steve C. Woodford for Wasabi Systems, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed for the NetBSD Project by
+ * Wasabi Systems, Inc.
+ * 4. The name of Wasabi Systems, Inc. may not be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <machine/asm.h>
+#include <machine/setjmp.h>
+
+/*
+ * C library -- sigsetjmp, siglongjmp
+ *
+ * siglongjmp(a,v)
+ * will generate a "return(v)" from
+ * the last call to
+ * sigsetjmp(a, mask)
+ * by restoring registers from the stack.
+ * If `mask' is non-zero, the previous signal
+ * state will be restored.
+ */
+
+ENTRY_NOPROFILE(__sigsetjmp14)
+#ifndef _LP64
+ st.l r2, _JBLEN, r3 /* Save mask */
+#else
+ st.q r2, _JBLEN, r3 /* Save mask */
+#endif
+ pta/l _C_LABEL(__setjmp14), tr0
+ pta/u _C_LABEL(_setjmp), tr1
+ beq/u r3, r63, tr1 /* If mask == 0, don't save signals */
+ blink tr0, r63 /* Else, save them */
+
+ENTRY_NOPROFILE(__siglongjmp14)
+#ifndef _LP64
+ ld.l r2, _JBLEN, r0 /* Fetch mask */
+#else
+ ld.q r2, _JBLEN, r0 /* Fetch mask */
+#endif
+ pta/l _C_LABEL(__longjmp14), tr0
+ pta/u _C_LABEL(_longjmp), tr1
+ beq/u r0, r63, tr1 /* If mask == 0, don't restore sigs */
+ blink tr0, r63 /* Else, restore them */
diff -r 8b2a3c4afed3 -r 83e957d8fbfa lib/libc/arch/sh5/gen/_setjmp.S
--- a/lib/libc/arch/sh5/gen/_setjmp.S Thu Jul 11 14:16:42 2002 +0000
+++ b/lib/libc/arch/sh5/gen/_setjmp.S Thu Jul 11 14:23:04 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: _setjmp.S,v 1.2 2002/07/10 11:05:19 scw Exp $ */
+/* $NetBSD: _setjmp.S,v 1.3 2002/07/11 14:23:05 scw Exp $ */
/*
Home |
Main Index |
Thread Index |
Old Index