Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/sys Centrally define constants that define the signal re...
details: https://anonhg.NetBSD.org/src/rev/dccf9fa80b27
branches: trunk
changeset: 1024517:dccf9fa80b27
user: thorpej <thorpej%NetBSD.org@localhost>
date: Wed Oct 27 04:10:47 2021 +0000
description:
Centrally define constants that define the signal return trampoline
versioning scheme, and add a big block comment describing how it works.
diffstat:
sys/arch/vax/include/signal.h | 5 ++-
sys/sys/signal.h | 74 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 77 insertions(+), 2 deletions(-)
diffs (109 lines):
diff -r 8ccd2e929450 -r dccf9fa80b27 sys/arch/vax/include/signal.h
--- a/sys/arch/vax/include/signal.h Wed Oct 27 03:06:59 2021 +0000
+++ b/sys/arch/vax/include/signal.h Wed Oct 27 04:10:47 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: signal.h,v 1.19 2021/10/27 01:13:22 thorpej Exp $ */
+/* $NetBSD: signal.h,v 1.20 2021/10/27 04:10:48 thorpej Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991 Regents of the University of California.
@@ -40,6 +40,9 @@
#include <sys/siginfo.h>
#include <machine/trap.h>
+/* VAX versioned its sigcontext trampoline ABI (Sept 2002). */
+#define __SIGTRAMP_SIGCONTEXT_VERSION_MAX 2
+
typedef int sig_atomic_t;
#if defined(_NETBSD_SOURCE)
diff -r 8ccd2e929450 -r dccf9fa80b27 sys/sys/signal.h
--- a/sys/sys/signal.h Wed Oct 27 03:06:59 2021 +0000
+++ b/sys/sys/signal.h Wed Oct 27 04:10:47 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: signal.h,v 1.72 2017/04/21 15:10:35 christos Exp $ */
+/* $NetBSD: signal.h,v 1.73 2021/10/27 04:10:47 thorpej Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991, 1993
@@ -138,8 +138,80 @@
#define sa_sigaction _sa_u._sa_sigaction
#endif
+/*
+ * Signal return trampoline versioning:
+ *
+ * In historical BSD, the kernel provided the signal trampoline, copying
+ * it out to the process's stack. In NetBSD 2.0, the signal trampoline
+ * was moved into libc, and versioned in order to support the historical
+ * BSD "sigcontext" style of handler in addition to the modern "siginfo"
+ * style of handler. The trampoline and its ABI version are registered
+ * with the kernel along with the handlers.
+ *
+ * The versioning follows this general pattern:
+ *
+ * 0 Historical BSD style, trampoline provided by the kernel. This is
+ * now used only by COMPAT_* modules.
+ *
+ * 1 Legacy BSD "sigcontext" trampoline. This style is deprecated and
+ * no longer documented. However, on platforms that have a legacy
+ * "sigcontext" structure, it is still possible to register a handler
+ * that uses this trampoline.
+ *
+ * 2 Modern "siginfo" trampoline. This style is used if a handler
+ * explicitly requests "siginfo", or if the deprecation of "sigcontext"
+ * style handlers pre-dates support for the platform.
+ *
+ * Some architectures have, in the past, needed to version the "sigcontext"
+ * trampoline; an override mechanism (__SIGTRAMP_SIGCONTEXT_VERSION_MAX) is
+ * provided for this purpose. No more changes to the old "sigcontext"
+ * trampoline ABI will ever be performed, and support for it should not be
+ * included when adding support for new architectures. Those architectures
+ * that support the "sigcontext" trampoline must define
+ * __HAVE_STRUCT_SIGCONTEXT in <machine/signal.h>. If a 64-bit architecture
+ * needs to support "sigcontext" trampolines only for 32-bit compatibility,
+ * then __HAVE_STRUCT_SIGCONTEXT can be conditional on _KERNEL.
+ *
+ * If an architecture defines a sigcontext structure in <machine/signal.h>,
+ * it should be visible only for _KERNEL and _LIBC.
+ *
+ * In the unlikely event that an an architecture needs to version
+ * the "siginfo" trampoline, it can achieve this by overriding
+ * __SIGTRAMP_SIGINFO_VERSION_MAX.
+ */
+
#include <machine/signal.h> /* sigcontext; codes for SIGILL, SIGFPE */
+#define __SIGTRAMP_SIGCODE_VERSION 0
+
+#define __SIGTRAMP_SIGCONTEXT_VERSION_MIN 1
+
+#ifndef __SIGTRAMP_SIGCONTEXT_VERSION_MAX
+#define __SIGTRAMP_SIGCONTEXT_VERSION_MAX __SIGTRAMP_SIGCONTEXT_VERSION_MIN
+#endif
+
+#if __SIGTRAMP_SIGCONTEXT_VERSION_MAX < __SIGTRAMP_SIGCONTEXT_VERSION_MIN
+#error invalid __SIGTRAMP_SIGCONTEXT_VERSION_MAX
+#endif
+
+#define __SIGTRAMP_SIGINFO_VERSION_MIN (__SIGTRAMP_SIGCONTEXT_VERSION_MAX + 1)
+
+#ifndef __SIGTRAMP_SIGINFO_VERSION_MAX
+#define __SIGTRAMP_SIGINFO_VERSION_MAX __SIGTRAMP_SIGINFO_VERSION_MIN
+#endif
+
+#if __SIGTRAMP_SIGINFO_VERSION_MAX < __SIGTRAMP_SIGINFO_VERSION_MIN
+#error invalid __SIGTRAMP_SIGINFO_VERSION_MAX
+#endif
+
+#ifndef __SIGTRAMP_SIGCONTEXT_VERSION
+#define __SIGTRAMP_SIGCONTEXT_VERSION __SIGTRAMP_SIGCONTEXT_VERSION_MAX
+#endif
+
+#ifndef __SIGTRAMP_SIGINFO_VERSION
+#define __SIGTRAMP_SIGINFO_VERSION __SIGTRAMP_SIGINFO_VERSION_MAX
+#endif
+
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
#define SA_ONSTACK 0x0001 /* take signal on signal stack */
Home |
Main Index |
Thread Index |
Old Index