aboutsummaryrefslogtreecommitdiff
path: root/src/lib/bsdsignal.c.pamphlet
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/bsdsignal.c.pamphlet')
-rw-r--r--src/lib/bsdsignal.c.pamphlet320
1 files changed, 0 insertions, 320 deletions
diff --git a/src/lib/bsdsignal.c.pamphlet b/src/lib/bsdsignal.c.pamphlet
deleted file mode 100644
index 5807659b..00000000
--- a/src/lib/bsdsignal.c.pamphlet
+++ /dev/null
@@ -1,320 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-
-\newcommand{\var}[1]{\textsl{#1}}
-
-\title{\File{src/lib/bsdsignal.c} Pamphlet}
-\author{The Axiom Team}
-
-\begin{document}
-\maketitle
-
-\begin{abstract}
-\end{abstract}
-\eject
-
-\tableofcontents
-\newpage
-
-\section{Executive Overview}
-
-\section{Signals}
-
-The system defines a set of signals that may be delivered to a process.
-Signal
-delivery resembles the occurrence of a hardware interrupt: the signal is
-normally blocked from further occurrence, the current process context is
-saved,
-and a new one is built. A process may specify a \emph{handler} to
-which a signal
-is delivered, or specify that a signal is to be \emph{ignored}. A process may
-also specify that a default action is to be taken by the system when a signal
-occurs. A signal may also be \emph{blocked}, in which case its delivery is
-postponed until it is \emph{unblocked}. The action to be taken on delivery is
-determined at the time of delivery. Normally, signal handlers execute on the
-current stack of the process. This may be changed, on a per-handler basis, so
-that signals are taken on a special \emph{signal stack}.
-
-Signal routines normally execute with the signal that caused their invocation
-\emph{blocked}, but other signals may yet occur. A global \emph{signal mask}
-defines the set of signals currently blocked from delivery to a process.
-The signal mask for a process is initialized from that of its parent
-(normally empty). It may be changed with a \emph{[[sigprocmask]](2)} call, or
-when a signal is delivered to the process.
-
-When a signal condition arises for a process, the signal is added to a set of
-signals pending for the process. If the signal is not currently \emph{blocked}
-by the process then it is delivered to the process. Signals may be delivered
-any time a process enters the operating system (e.g., during a system call,
-page fault or trap, or clock interrupt). If muliple signals are ready to be
-delivered at the same time, any signals that could be caused by traps are
-delivered first. Additional signals may be processed at the same time, with
-each appearing to interrupt the handlers for the previous signals before
-their first instructions. The set of pending signals is retuned by the
-\emph{[[sigpending]](2)} system call. When a caught signal is delivered,
-the current
-state of the process is saved, a new signal mask is calculated (as described
-below), and the signal handler is invoked. The call to the handler is arranged
-so that if the signal handling routine returns normally the process will resume
-execution in the context from before the signal's delivery. If the process
-wishes to resume in a different context, then it must arrange to restore
-the previous context itself.
-
-When a signal is delivered to a proces a new signal mask is installed for the
-duration of the process's signal handler (or until a \emph{[[sigprocmask]](2)}
-system call is made). This mask is formed by taking the union of the current
-signal mask set, the signal to be delivered, and the signal mask associated
-with the handler to be invoked.
-
-The \emph{[[sigaction]]()} system call assigns an action for a signal
-specified by \var{sig}. If \var{act} is non-zero, it specifies an action
-([[SIG_DFL]], [[SIG_IGN]], or a handler routine) and mask to be used when
-delivering the specified signal.
-If \var{oact} is non-zero, the previous handling information for the signal is
-returned to the user.
-
-Once a signal handler is installed, it normally remains installed until
-another
-[[sigaction()]] system call is made, or an \emph{[[execve]](2)} is performed.
-A
-signal-specific default action may be reset by setting [[sa_handler]] to
-[[SIG_DFL]]. The defaults are process termination, possibly with core dump;
-no action; stopping the process; or continuing the process. See the signal
-list below for each signal's default action. If [[sa_handler]] is [[SIG_DFL]],
-the default action for the signal is to discard the signal, and if a signal
-is pending, the pending signal is discarded even if the signal is masked. If
-[[sa_handler]] is set to [[SIG_IGN]] current and pending instances of the
-signal
-are ignored and discarded.
-
-Options may be specified by setting [[sa_flags]]. The meaning of the various
-bits is as follows:
-\begin{tabular}{ll}
-SA\_NOCLDSTOP & If this bit is set when installing a catching function for\\
- & the SIGCHLD signal, the SIGCHLD signal will be generated only\\
- & when a child process exits, not when a child process stops.\\
-SA\_NOCLDWAIT & If this bit is set when calling {\sl sigaction()} for the\\
- & SIGCHLD signal, the system will not create zombie processes\\
- & when children of the calling process exit. If the calling\\
- & process subsequently issues a {\sf wait()} (or equivalent),\\
- & it blocks until all of the calling process's child processes\\
- & terminate, and then returns a value of -1 with errno set to\\
- & ECHILD.\\
-SA\_ONSTACK & If this bit is set, the system will deliver the signal to\\
- & the process on a {\sl signal stack}, specified with\\
- & {\bf sigaltstack(2)}.\\
-SA\_NODEFER & If this bit is set, further occurrences of the delivered\\
- & signal are not masked during the execution of the handler.\\
-SA\_RESETHAND & If this bit is set, the handler is reset back to SIG\_DFL\\
- & at the moment the signal is delivered.\\
-SA\_RESTART & See the paragraph below\\
-SA\_SIGINFO & If this bit is set, the handler function is assumed to be\\
- & pointed to by the sa\_sigaction member of struct sigaction\\
- & and should match the prototype shown above or as below in\\
- & EXAMPLES. This bit should not be set when assigning SIG\_DFL\\
- & or SIG\_IGN
-\end{tabular}
-
-If a signal is caught during the system calls listed below, the call may be
-forced to terminate with the error [[EINTR]], the call may return with a data
-transfer shorter than requested, or the call may be restarted. Restart of
-pending calls is requested by setting the SA\_RESTART bit in {\sl sa\_flags}.
-The affected system calls include {\bf open(2)}, {\bf read(2)}, {\bf write(2)},
-{\bf sendto(2)}, {\bf recvfrom(2)}, {\bf sendmsg(2)} and {\bf recvmsg(2)}
-on a communications channel or a slow device (such as a terminal, but not a
-regular file) and during a {\bf wait(2)} or {\bf ioctl(2)}. However, calls
-that have already committed are not restarted, but instead return a partial
-success (for example, a short read count).
-
-After a {\bf fork(2)} or {\bf vfork(2)} all signals, the signal mask, the
-signal stack, and the restart/interrupt flags are inherited by the child.
-
-The {\bf execve(2)} system call reinstates the default action for all signals
-which were caught and resets all signals to be caught on the user stack.
-Ignored signals remain ignored; the signal mask remains the same; signals
-that restart pending system calls continue to do so.
-
-The following is a list of all signals with names as in the include file
-{\sl <signal.h>}:
-
-\begin{tabular}{lll}
-{\bf NAME} & {\bf Default Action} & Description\\
-SIGHUP & terminate process & terminal line hangup\\
-SIGINT & terminate process & interrupt program\\
-SIGQUIT & create core image & quit program\\
-SIGILL & create core image & illegal instruction\\
-SIGTRAP & create core image & trace trap\\
-SIGABRT & create core image & {\bf abort(3)} call (formerly SIGIOT)\\
-SIGEMT & create core image & emulate instruction executed\\
-SIGFPE & create core image & floating-point exception\\
-SIGKILL & terminate process & kill program\\
-SIGBUS & create core image & bus error\\
-SIGSEGV & create core image & segmentation violation\\
-SIGSYS & create core image & non-existent system call invoked\\
-SIGPIPE & terminate process & write on a pipe with no reader\\
-SIGALRM & terminate process & real-time timer expired\\
-SIGTERM & terminate process & software termination signal\\
-SIGURG & discard signal & urgent condition present on socket\\
-SIGSTOP & stop process & stop (cannot be caught or ignored)\\
-SIGSTP & stop process & stop signal generated from keyboard\\
-SIGCONT & discard signal & continue after stop\\
-SIGCHLD & discard signal & child status has changed\\
-SIGTTIN & stop process & background read attempted from \\
- & & control terminal\\
-SIGTTOU & stop process & background write attempted from\\
- & & control terminal\\
-SIGIO & discard signal & I/O is possible on a descriptor {\bf fcntl(2)}\\
-SIGXCPU & terminate process & cpu time limit exceeded {\bf setrlimit(2)}\\
-SIGXFSZ & terminate process & file size limit exceeded {\bf setrlimit(2)}\\
-SIGVTALRM & terminate process & virtual time alarm {\bf setitimer(2)}\\
-SIGPROF & terminate process & profiling timer alarm {\bf setitimer(2)}\\
-SIGWINCH & discard signal & Window size change\\
-SIGINFO & discard signal & status request from keyboard\\
-SIGUSR1 & terminate process & User defined signal 1\\
-SIGUSR2 & terminate process & User defined signal 2
-\end{tabular}
-
-The {\sl sigaction()} function returns the value 0 if successful; otherwise
-the value -1 is returned and the global variable {\sl errno} is set to indicate
-the error.
-
-Signal handlers should have either the ANSI C prototype:
-\begin{verbatim}
- void handler(int);
-\end{verbatim}
-or the POSIX SA\_SIGINFO prototype:
-\begin{verbatim}
- void handler(int, siginfo\_t *info, ucontext\_t *uap);
-\end{verbatim}
-
-The handler function should match the SA\_SIGINFO prototype if the SA\_SIGINFO
-bit is set in flags. It then should be pointed to by the sa\_sigaction member
-of struct sigaction. Note that you should not assign SIG\_DFL or SIG\_IGN this way.
-
-If the SA\_SIGINFO flag is not set, the handler function should match either
-the ANSI C or traditional BSD prototype and be pointed to by the sa\_handler
-member of struct sigaction. In practice, FreeBSD always sends the three
-arguments of the latter and since the ANSI C prototype is a subset, both
-will work. The sa\_handler member declaration in FreeBSD include files is
-that of ANSI C (as required by POSIX), so a function pointer of a BSD-style
-function needs to be casted to compile without warning. The traditional BSD
-style is not portable and since its capabilities are a full subset of a
-SA\_SIGNFO handler its use is deprecated.
-
-The {\sl sig} argument is the signal number, one of the SIG\ldots values from
-{\sl <signal.h>}.
-
-The {\sl code} argument of the BSD-style handler and the si\_code member of the
-info argument to a SA\_SIGINFO handler contain a numeric code explaining the
-cause of the signal, usually on of the SI\_\ldots values from {\sl <sys/signal.h>}
-or codes specific to a signal, i.e. one of the FPE\_\ldots values for SIGFPE.
-
-The {\sl uap} argument to a POSIX SA\_SIGINFO handler points to an instance of
-ucontext\_t.
-
-The {\bf sigaction()} system call will fail and no new signal handler will be
-installed if one of the following occurs:
-\begin{tabular}{ll}
-EFAULT & Either {\sl act} or {\sl oact} points to memory that is not a\\
- & valid part of the process address space\\
-EINVAL & The {\sl sig} argument is not a valid signal number\\
-EINVAL & An attempt is made to ignore or supply a handler for SIGKILL\\
- & or SIGSTOP
-\end{tabular}
-\section{MAC OSX and BSD platform change}
-<<*>>=
-<<license>>
-
-#include "axiom-c-macros.h"
-#include "bsdsignal.h"
-
-@
-The MACOSX platform is broken because no matter what you do it seems to
-include files from [[/usr/include/sys]] ahead of [[/usr/include]]. On linux
-systems these files include themselves which causes an infinite regression
-of includes that fails. GCC gracefully steps over that problem but the
-build fails anyway. On MACOSX the [[/usr/include/sys]] versions
-of files are badly broken with respect to the [[/usr/include]] versions.
-<<*>>=
-#if defined(MACOSXplatform)
-#include "/usr/include/signal.h"
-#else
-#include <signal.h>
-#endif
-
-#include "bsdsignal.H1"
-
-
-SignalHandlerFunc
-bsdSignal(int sig, SignalHandlerFunc action, int restartSystemCall)
-{
-#if HAVE_DECL_SIGACTION
-
- struct sigaction in,out;
- in.sa_handler = action;
- /* handler is reinstalled - calls are restarted if restartSystemCall */
-@
-
-We needed to change [[SIGCLD]] to [[SIGCHLD]] for the [[MAC OSX]] platform
-and we need to create a new platform variable. This change is made to
-propogate that platform variable.
-<<*>>=
-#ifdef SA_RESTART
- if(restartSystemCall) in.sa_flags = SA_RESTART;
- else in.sa_flags = 0;
-#elif defined(SA_INTERRUPT)
- if (restartSystemCall) in.sa_flags = 0;
- else in.sa_flags = SA_INTERRUPT;
-#else
- in.sa_flags = 0;
-#endif
-
- return (sigaction(sig, &in, &out) ? (SignalHandlerFunc) -1 :
- (SignalHandlerFunc) out.sa_handler);
-#else /* !HAVE_DECL_SIGACTION */
- return (SignalHandlerFunc) -1;
-#endif /* HAVE_DECL_SIGACTION */
-}
-
-
-@
-\section{License}
-<<license>>=
-/*
-Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - 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.
-
- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER
-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.
-*/
-@
-\newpage
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}