Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libc/arch/vax Enable the SIGINFO trampoline.
details: https://anonhg.NetBSD.org/src/rev/1759a3a91197
branches: trunk
changeset: 552696:1759a3a91197
user: matt <matt%NetBSD.org@localhost>
date: Tue Sep 30 19:05:41 2003 +0000
description:
Enable the SIGINFO trampoline.
diffstat:
lib/libc/arch/vax/Makefile.inc | 4 +-
lib/libc/arch/vax/sys/__sigaction14_sigtramp.c | 35 ++++++++++++++----
lib/libc/arch/vax/sys/__sigtramp3.S | 50 ++++++++++++++++++++++++++
3 files changed, 79 insertions(+), 10 deletions(-)
diffs (123 lines):
diff -r ba4640816b0a -r 1759a3a91197 lib/libc/arch/vax/Makefile.inc
--- a/lib/libc/arch/vax/Makefile.inc Tue Sep 30 18:58:39 2003 +0000
+++ b/lib/libc/arch/vax/Makefile.inc Tue Sep 30 19:05:41 2003 +0000
@@ -1,3 +1,3 @@
-# $NetBSD: Makefile.inc,v 1.3 2003/09/28 16:30:18 matt Exp $
+# $NetBSD: Makefile.inc,v 1.4 2003/09/30 19:05:41 matt Exp $
-SRCS+= __sigaction14_sigtramp.c __sigtramp2.S
+SRCS+= __sigaction14_sigtramp.c __sigtramp2.S __sigtramp3.S
diff -r ba4640816b0a -r 1759a3a91197 lib/libc/arch/vax/sys/__sigaction14_sigtramp.c
--- a/lib/libc/arch/vax/sys/__sigaction14_sigtramp.c Tue Sep 30 18:58:39 2003 +0000
+++ b/lib/libc/arch/vax/sys/__sigaction14_sigtramp.c Tue Sep 30 19:05:41 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: __sigaction14_sigtramp.c,v 1.3 2003/01/18 11:18:02 thorpej Exp $ */
+/* $NetBSD: __sigaction14_sigtramp.c,v 1.4 2003/09/30 19:05:41 matt Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -36,10 +36,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#define __LIBC12_SOURCE__
-
#include <sys/types.h>
+#include <sys/signal.h>
+#include <stddef.h>
#include <signal.h>
+#include <errno.h>
#include "extern.h"
@@ -48,13 +49,31 @@
int
__libc_sigaction14(int sig, const struct sigaction *act, struct sigaction *oact)
{
- extern int __sigtramp_sigcontext_2[];
+ extern const int __sigtramp_sigcontext_2[];
+ extern const int __sigtramp_siginfo_3[];
+ int rv;
+
+ /*
+ * If no sigaction, use the "default" trampoline since it won't
+ * be used.
+ */
+ if (act == NULL)
+ return __sigaction_sigtramp(sig, act, oact, NULL, 0);
/*
- * Right here we should select the SA_SIGINFO trampoline
- * if SA_SIGINFO is set in the sigaction.
+ * We select the non-SA_SIGINFO trampoline if SA_SIGINFO is not
+ * set in the sigaction.
*/
+ if ((act->sa_flags & SA_SIGINFO) == 0) {
+ rv = __sigaction_sigtramp(sig, act, oact,
+ __sigtramp_sigcontext_2, 2);
+ if (rv >= 0 || errno != EINVAL)
+ return rv;
+ }
- return (__sigaction_sigtramp(sig, act, oact,
- __sigtramp_sigcontext_2, 2));
+ /*
+ * If SA_SIGINFO was specificed or the compatibility trampolines
+ * can't be used, use the siginfo trampoline.
+ */
+ return __sigaction_sigtramp(sig, act, oact, __sigtramp_siginfo_3, 3);
}
diff -r ba4640816b0a -r 1759a3a91197 lib/libc/arch/vax/sys/__sigtramp3.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/arch/vax/sys/__sigtramp3.S Tue Sep 30 19:05:41 2003 +0000
@@ -0,0 +1,50 @@
+/* $NetBSD: __sigtramp3.S,v 1.1 2003/09/30 19:05:41 matt Exp $ */
+
+/*
+ * Copyright (c) 2003 Matt Thomas <matt%3am-software.com@localhost>
+ * All rights reserved.
+ *
+ * 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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.
+ */
+
+/*
+ * Signal trampoline; registers when called:
+ * pc, psl - obvious
+ * sp, ap - points to argument list
+ * 4(ap) -- signo
+ * 8(ap) -- pointer to siginfo
+ * 12(ap) -- pointer to ucontext
+ * fp - address of signal handler
+ */
+
+#include "SYS.h"
+
+ .text
+ _ALIGN_TEXT
+
+ .globl _C_LABEL(__sigtramp_siginfo_3)
+_C_LABEL(__sigtramp_siginfo_3):
+ callg (%ap),(%fp) # use global arg list
+ addl2 $8,%ap # arg is pointer to ucontext
+ SYSTRAP(setcontext) # exit from here
+ halt # illegal insn
Home |
Main Index |
Thread Index |
Old Index