Module Name:    src
Committed By:   christos
Date:           Tue Oct 26 16:16:38 UTC 2021

Modified Files:
        src/lib/libc/sys: Makefile.inc
        src/sys/arch/alpha/include: signal.h
        src/sys/arch/arm/include: signal.h
        src/sys/arch/hppa/include: signal.h
        src/sys/arch/i386/include: signal.h
        src/sys/arch/m68k/include: signal.h
        src/sys/arch/mips/include: signal.h
        src/sys/arch/powerpc/include: signal.h
        src/sys/arch/sh3/include: signal.h
        src/sys/arch/sparc/include: signal.h
        src/sys/arch/vax/include: signal.h
Added Files:
        src/lib/libc/sys: __sigaction14_sigtramp.c
Removed Files:
        src/lib/libc/arch/aarch64/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/alpha/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/arm/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/hppa/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/i386/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/ia64/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/m68k/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/mips/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/or1k/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/powerpc/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/powerpc64/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/riscv/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/sh3/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/sparc/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/sparc64/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/vax/sys: __sigaction14_sigtramp.c
        src/lib/libc/arch/x86_64/sys: __sigaction14_sigtramp.c

Log Message:
Merge all MD __sigaction14_sigtramp.c copies into one:
- sparc and sparc64 were not using version 0 sigcontext when there were
  no arguments in the signal version. This was probably a bug.
- vax is using +1 the version numbers of the other archs.
- Only hppa was defining __LIBC12_SOURCE__ so it was getting a working
  sigcontext before. all the other ports that supported sigcontext had
  the compat code disabled.
[pointed out by thorpej, thanks!]
If we want to remove sigcontext support from userland at least now there
is less work to do so.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r0 src/lib/libc/arch/aarch64/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.7 -r0 src/lib/libc/arch/alpha/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.7 -r0 src/lib/libc/arch/arm/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.4 -r0 src/lib/libc/arch/hppa/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.12 -r0 src/lib/libc/arch/i386/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.2 -r0 src/lib/libc/arch/ia64/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.9 -r0 src/lib/libc/arch/m68k/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.7 -r0 src/lib/libc/arch/mips/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.1 -r0 src/lib/libc/arch/or1k/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.9 -r0 src/lib/libc/arch/powerpc/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.2 -r0 \
    src/lib/libc/arch/powerpc64/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.1 -r0 src/lib/libc/arch/riscv/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.8 -r0 src/lib/libc/arch/sh3/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.7 -r0 src/lib/libc/arch/sparc/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.9 -r0 src/lib/libc/arch/sparc64/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.10 -r0 src/lib/libc/arch/vax/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.11 -r0 src/lib/libc/arch/x86_64/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.247 -r1.248 src/lib/libc/sys/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/lib/libc/sys/__sigaction14_sigtramp.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/alpha/include/signal.h
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/include/signal.h
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/hppa/include/signal.h
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/i386/include/signal.h
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/m68k/include/signal.h
cvs rdiff -u -r1.30 -r1.31 src/sys/arch/mips/include/signal.h
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/powerpc/include/signal.h
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/sh3/include/signal.h
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/sparc/include/signal.h
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/vax/include/signal.h

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/sys/Makefile.inc
diff -u src/lib/libc/sys/Makefile.inc:1.247 src/lib/libc/sys/Makefile.inc:1.248
--- src/lib/libc/sys/Makefile.inc:1.247	Fri Oct  1 13:13:44 2021
+++ src/lib/libc/sys/Makefile.inc	Tue Oct 26 12:16:36 2021
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.247 2021/10/01 17:13:44 christos Exp $
+#	$NetBSD: Makefile.inc,v 1.248 2021/10/26 16:16:36 christos Exp $
 #	@(#)Makefile.inc	8.3 (Berkeley) 10/24/94
 
 # sys sources
@@ -10,7 +10,7 @@ SRCS+=	cpuset.c
 SRCS+=	accept4.c clock_getcpuclockid.c eventfd_read.c eventfd_write.c \
 	posix_fadvise.c posix_madvise.c ppoll.c sched.c sigqueue.c \
 	sigtimedwait.c sigwait.c sigwaitinfo.c statvfs.c swapon.c semctl.c \
-	vadvise.c
+	vadvise.c __sigaction14_sigtramp.c
 
 .if ${RUMPRUN} != "yes"
 # modules with non-default implementations on at least one architecture:

Index: src/sys/arch/alpha/include/signal.h
diff -u src/sys/arch/alpha/include/signal.h:1.17 src/sys/arch/alpha/include/signal.h:1.18
--- src/sys/arch/alpha/include/signal.h:1.17	Mon Mar 25 15:24:30 2019
+++ src/sys/arch/alpha/include/signal.h	Tue Oct 26 12:16:34 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: signal.h,v 1.17 2019/03/25 19:24:30 maxv Exp $ */
+/* $NetBSD: signal.h,v 1.18 2021/10/26 16:16:34 christos Exp $ */
 
 /*
  * Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -66,6 +66,7 @@ struct sigcontext13 {
 #endif /* _KERNEL && COMPAT_13 */
 
 #if defined(_LIBC) || (defined(_KERNEL) && defined(COMPAT_16))
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	long	sc_onstack;		/* sigstack state to restore */
 	long	__sc_mask13;		/* signal mask to restore (old style) */

Index: src/sys/arch/arm/include/signal.h
diff -u src/sys/arch/arm/include/signal.h:1.16 src/sys/arch/arm/include/signal.h:1.17
--- src/sys/arch/arm/include/signal.h:1.16	Wed Oct  6 01:33:15 2021
+++ src/sys/arch/arm/include/signal.h	Tue Oct 26 12:16:34 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.16 2021/10/06 05:33:15 skrll Exp $	*/
+/*	$NetBSD: signal.h,v 1.17 2021/10/26 16:16:34 christos Exp $	*/
 
 /*
  * Copyright (c) 1994-1996 Mark Brinicombe.
@@ -92,6 +92,7 @@ struct sigcontext13 {
 };
 #endif /* __LIBC12_SOURCE__ || _KERNEL */
 
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	int	sc_onstack;		/* sigstack state to restore */
 	int	__sc_mask13;		/* signal mask to restore (old style) */

Index: src/sys/arch/hppa/include/signal.h
diff -u src/sys/arch/hppa/include/signal.h:1.8 src/sys/arch/hppa/include/signal.h:1.9
--- src/sys/arch/hppa/include/signal.h:1.8	Tue Apr 16 08:25:17 2019
+++ src/sys/arch/hppa/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.8 2019/04/16 12:25:17 skrll Exp $	*/
+/*	$NetBSD: signal.h,v 1.9 2021/10/26 16:16:35 christos Exp $	*/
 
 /*	$OpenBSD: signal.h,v 1.1 1998/06/23 19:45:27 mickey Exp $	*/
 
@@ -48,7 +48,8 @@ typedef int sig_atomic_t;
  * to the handler to allow it to restore state properly if
  * a non-standard exit is performed.
  */
-struct	sigcontext {
+#define	__HAVE_STRUCT_SIGCONTEXT
+struct sigcontext {
 	int	sc_onstack;		/* sigstack state to restore */
 	int	__sc_mask13;		/* signal mask to restore (old style) */
 	int	sc_sp;			/* sp to restore */

Index: src/sys/arch/i386/include/signal.h
diff -u src/sys/arch/i386/include/signal.h:1.29 src/sys/arch/i386/include/signal.h:1.30
--- src/sys/arch/i386/include/signal.h:1.29	Wed Nov 19 13:35:59 2008
+++ src/sys/arch/i386/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.29 2008/11/19 18:35:59 ad Exp $	*/
+/*	$NetBSD: signal.h,v 1.30 2021/10/26 16:16:35 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1991 Regents of the University of California.
@@ -78,6 +78,7 @@ struct sigcontext13 {
 	int	sc_err;
 };
 
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	int	sc_gs;
 	int	sc_fs;

Index: src/sys/arch/m68k/include/signal.h
diff -u src/sys/arch/m68k/include/signal.h:1.25 src/sys/arch/m68k/include/signal.h:1.26
--- src/sys/arch/m68k/include/signal.h:1.25	Tue Jan 27 15:30:12 2009
+++ src/sys/arch/m68k/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.25 2009/01/27 20:30:12 martin Exp $	*/
+/*	$NetBSD: signal.h,v 1.26 2021/10/26 16:16:35 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1991 Regents of the University of California.
@@ -65,6 +65,7 @@ struct sigcontext13 {
 #endif /* __LIBC12_SOURCE__ || _KERNEL */
 
 #if defined(_LIBC) || defined(_KERNEL)
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	int	sc_onstack;		/* sigstack state to restore */
 	int	__sc_mask13;		/* signal mask to restore (old style) */

Index: src/sys/arch/mips/include/signal.h
diff -u src/sys/arch/mips/include/signal.h:1.30 src/sys/arch/mips/include/signal.h:1.31
--- src/sys/arch/mips/include/signal.h:1.30	Sun Jan 24 11:00:29 2016
+++ src/sys/arch/mips/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.30 2016/01/24 16:00:29 christos Exp $	*/
+/*	$NetBSD: signal.h,v 1.31 2021/10/26 16:16:35 christos Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -106,6 +106,7 @@ struct sigcontext { \
 _SIGCONTEXT_DEFINE(sigcontext, int, int);
 #endif
 #ifdef _LIBC
+#define	__HAVE_STRUCT_SIGCONTEXT
 _SIGCONTEXT_DEFINE(sigcontext, __register_t, __fpregister_t);
 #endif
 

Index: src/sys/arch/powerpc/include/signal.h
diff -u src/sys/arch/powerpc/include/signal.h:1.22 src/sys/arch/powerpc/include/signal.h:1.23
--- src/sys/arch/powerpc/include/signal.h:1.22	Mon Jul  6 05:34:17 2020
+++ src/sys/arch/powerpc/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.22 2020/07/06 09:34:17 rin Exp $	*/
+/*	$NetBSD: signal.h,v 1.23 2021/10/26 16:16:35 christos Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -54,6 +54,7 @@ struct sigcontext13 {
 /*
  * struct sigcontext introduced in NetBSD 1.4
  */
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	int sc_onstack;			/* saved onstack flag */
 	int __sc_mask13;		/* saved signal mask (old style) */

Index: src/sys/arch/sh3/include/signal.h
diff -u src/sys/arch/sh3/include/signal.h:1.14 src/sys/arch/sh3/include/signal.h:1.15
--- src/sys/arch/sh3/include/signal.h:1.14	Wed Nov 29 12:43:20 2017
+++ src/sys/arch/sh3/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.14 2017/11/29 17:43:20 christos Exp $	*/
+/*	$NetBSD: signal.h,v 1.15 2021/10/26 16:16:35 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1991 Regents of the University of California.
@@ -77,6 +77,7 @@ struct sigcontext13 {
 };
 #endif
 
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	int	sc_spc;
 	int	sc_ssr;

Index: src/sys/arch/sparc/include/signal.h
diff -u src/sys/arch/sparc/include/signal.h:1.23 src/sys/arch/sparc/include/signal.h:1.24
--- src/sys/arch/sparc/include/signal.h:1.23	Wed Nov 29 12:49:03 2017
+++ src/sys/arch/sparc/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: signal.h,v 1.23 2017/11/29 17:49:03 christos Exp $ */
+/*	$NetBSD: signal.h,v 1.24 2021/10/26 16:16:35 christos Exp $ */
 
 /*
  * Copyright (c) 1992, 1993
@@ -78,6 +78,7 @@ struct sigcontext13 {
 	long	sc_o0;			/* %o0 to restore */
 };
 #endif /* __LIBC12_SOURCE__ || _KERNEL */
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	int		sc_onstack;	/* sigstack state to restore */
 	int		__sc_mask13;	/* signal mask to restore (old style) */

Index: src/sys/arch/vax/include/signal.h
diff -u src/sys/arch/vax/include/signal.h:1.17 src/sys/arch/vax/include/signal.h:1.18
--- src/sys/arch/vax/include/signal.h:1.17	Sat Dec 29 06:30:12 2018
+++ src/sys/arch/vax/include/signal.h	Tue Oct 26 12:16:35 2021
@@ -1,4 +1,4 @@
-/*      $NetBSD: signal.h,v 1.17 2018/12/29 11:30:12 maxv Exp $   */
+/*      $NetBSD: signal.h,v 1.18 2021/10/26 16:16:35 christos Exp $   */
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1991 Regents of the University of California.
@@ -36,6 +36,9 @@
 #ifndef _VAX_SIGNAL_H_
 #define _VAX_SIGNAL_H_
 
+#define __SIGTRAMP_SIGCONTEXT_VERSION	2
+#define __SIGTRAMP_SIGINFO_VERSION	3
+
 #include <sys/featuretest.h>
 #include <sys/siginfo.h>
 #include <machine/trap.h>
@@ -63,6 +66,7 @@ struct sigcontext13 {
 };
 #endif /* __LIBC12_SOURCE__ || _KERNEL */
 
+#define	__HAVE_STRUCT_SIGCONTEXT
 struct sigcontext {
 	int	sc_onstack;		/* sigstack state to restore */
 	int	__sc_mask13;		/* signal mask to restore (old style) */

Added files:

Index: src/lib/libc/sys/__sigaction14_sigtramp.c
diff -u /dev/null src/lib/libc/sys/__sigaction14_sigtramp.c:1.1
--- /dev/null	Tue Oct 26 12:16:38 2021
+++ src/lib/libc/sys/__sigaction14_sigtramp.c	Tue Oct 26 12:16:36 2021
@@ -0,0 +1,94 @@
+/*	$NetBSD: __sigaction14_sigtramp.c,v 1.1 2021/10/26 16:16:36 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2002 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``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 FOUNDATION OR CONTRIBUTORS
+ * 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 <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: __sigaction14_sigtramp.c,v 1.1 2021/10/26 16:16:36 christos Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/types.h>
+#include <stddef.h>
+#include <signal.h>
+#include <errno.h>
+
+#include "extern.h"
+
+#ifndef __SIGTRAMP_SIGCONTEXT_VERSION
+#define __SIGTRAMP_SIGCONTEXT_VERSION 1
+#endif
+#ifndef __SIGTRAMP_SIGINFO_VERSION
+#define __SIGTRAMP_SIGINFO_VERSION 2
+#endif
+#define C(a,b) __CONCAT(a,b)
+#define __SIGTRAMP_SIGCONTEXT  \
+    C(__sigtramp_sigcontext_,__SIGTRAMP_SIGCONTEXT_VERSION)
+#define __SIGTRAMP_SIGINFO  \
+    C(__sigtramp_siginfo_,__SIGTRAMP_SIGINFO_VERSION)
+
+__weak_alias(__sigaction14, __libc_sigaction14)
+
+#define __LIBC12_SOURCE__
+
+int
+__libc_sigaction14(int sig, const struct sigaction *act, struct sigaction *oact)
+{
+	extern const int __SIGTRAMP_SIGINFO[];
+
+	/*
+	 * If no sigaction, use the "default" trampoline since it won't
+	 * be used.
+	 */
+	if (act == NULL)
+		return  __sigaction_sigtramp(sig, act, oact, NULL, 0);
+
+#if defined(__HAVE_STRUCT_SIGCONTEXT) &&  defined(__LIBC12_SOURCE__)
+	/*
+	 * We select the non-SA_SIGINFO trampoline if SA_SIGINFO is not
+	 * set in the sigaction.
+	 */
+	if ((act->sa_flags & SA_SIGINFO) == 0) {
+		extern const int __SIGTRAMP_SIGCONTEXT[];
+		int sav = errno;
+		int rv =  __sigaction_sigtramp(sig, act, oact,
+		    __SIGTRAMP_SIGCONTEXT, __SIGTRAMP_SIGCONTEXT_VERSION);
+		if (rv >= 0 || errno != EINVAL)
+			return rv;
+		errno = sav;
+	}
+#endif
+
+	/*
+	 * If SA_SIGINFO was specified or the compatibility trampolines
+	 * can't be used, use the siginfo trampoline.
+	 */
+	return __sigaction_sigtramp(sig, act, oact,
+	    __SIGTRAMP_SIGINFO, __SIGTRAMP_SIGINFO_VERSION);
+}

Reply via email to