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