2fe8fb192f
There is important information about booting non-ack images in docs/UPDATING. ack/aout-format images can't be built any more, and booting clang/ELF-format ones is a little different. Updating to the new boot monitor is recommended. Changes in this commit: . drop boot monitor -> allowing dropping ack support . facility to copy ELF boot files to /boot so that old boot monitor can still boot fairly easily, see UPDATING . no more ack-format libraries -> single-case libraries . some cleanup of OBJECT_FMT, COMPILER_TYPE, etc cases . drop several ack toolchain commands, but not all support commands (e.g. aal is gone but acksize is not yet). . a few libc files moved to netbsd libc dir . new /bin/date as minix date used code in libc/ . test compile fix . harmonize includes . /usr/lib is no longer special: without ack, /usr/lib plays no kind of special bootstrapping role any more and bootstrapping is done exclusively through packages, so releases depend even less on the state of the machine making them now. . rename nbsd_lib* to lib* . reduce mtree
207 lines
7.3 KiB
C
207 lines
7.3 KiB
C
#ifndef _SYS_SIGNAL_H_
|
|
#define _SYS_SIGNAL_H_
|
|
|
|
#include <sys/featuretest.h>
|
|
#include <sys/sigtypes.h>
|
|
|
|
#define _NSIG 26
|
|
#define NSIG _NSIG
|
|
|
|
|
|
/* Regular signals. */
|
|
#define SIGHUP 1 /* hangup */
|
|
#define SIGINT 2 /* interrupt (DEL) */
|
|
#define SIGQUIT 3 /* quit (ASCII FS) */
|
|
#define SIGILL 4 /* illegal instruction */
|
|
#define SIGTRAP 5 /* trace trap (not reset when caught) */
|
|
#define SIGABRT 6 /* IOT instruction */
|
|
#define SIGBUS 7 /* bus error */
|
|
#define SIGFPE 8 /* floating point exception */
|
|
#define SIGKILL 9 /* kill (cannot be caught or ignored) */
|
|
#define SIGUSR1 10 /* user defined signal # 1 */
|
|
#define SIGSEGV 11 /* segmentation violation */
|
|
#define SIGUSR2 12 /* user defined signal # 2 */
|
|
#define SIGPIPE 13 /* write on a pipe with no one to read it */
|
|
#define SIGALRM 14 /* alarm clock */
|
|
#define SIGTERM 15 /* software termination signal from kill */
|
|
#define SIGEMT 16 /* EMT instruction */
|
|
#define SIGCHLD 17 /* child process terminated or stopped */
|
|
#define SIGWINCH 21 /* window size has changed */
|
|
#define SIGVTALRM 24 /* virtual alarm */
|
|
#define SIGPROF 25 /* profiler alarm */
|
|
|
|
/* POSIX requires the following signals to be defined, even if they are
|
|
* not supported. Here are the definitions, but they are not supported.
|
|
*/
|
|
#define SIGCONT 18 /* continue if stopped */
|
|
#define SIGSTOP 19 /* stop signal */
|
|
#define SIGTSTP 20 /* interactive stop signal */
|
|
#define SIGTTIN 22 /* background process wants to read */
|
|
#define SIGTTOU 23 /* background process wants to write */
|
|
|
|
#ifdef _MINIX
|
|
#define SIGIOT SIGABRT /* for people who speak PDP-11 */
|
|
|
|
/* MINIX specific signals. These signals are not used by user proceses,
|
|
* but meant to inform system processes, like the PM, about system events.
|
|
* The order here determines the order signals are processed by system
|
|
* processes in user-space. Higher-priority signals should be first.
|
|
*/
|
|
/* Signals delivered by a signal manager. */
|
|
#define SIGSNDELAY 26 /* end of delay for signal delivery */
|
|
|
|
#define SIGS_FIRST SIGHUP /* first system signal */
|
|
#define SIGS_LAST SIGSNDELAY /* last system signal */
|
|
#define IS_SIGS(signo) (signo>=SIGS_FIRST && signo<=SIGS_LAST)
|
|
|
|
/* Signals delivered by the kernel. */
|
|
#define SIGKMEM 27 /* kernel memory request pending */
|
|
#define SIGKMESS 28 /* new kernel message */
|
|
#define SIGKSIGSM 29 /* kernel signal pending for signal manager */
|
|
#define SIGKSIG 30 /* kernel signal pending */
|
|
|
|
#define SIGK_FIRST SIGKMEM /* first kernel signal */
|
|
#define SIGK_LAST SIGKSIG /* last kernel signal */
|
|
#define IS_SIGK(signo) (signo>=SIGK_FIRST && signo<=SIGK_LAST)
|
|
|
|
/* Termination signals for Minix system processes. */
|
|
#define SIGS_IS_LETHAL(sig) \
|
|
(sig == SIGILL || sig == SIGBUS || sig == SIGFPE || sig == SIGSEGV \
|
|
|| sig == SIGEMT || sig == SIGABRT)
|
|
#define SIGS_IS_TERMINATION(sig) (SIGS_IS_LETHAL(sig) \
|
|
|| (sig == SIGKILL || sig == SIGPIPE))
|
|
#define SIGS_IS_STACKTRACE(sig) (SIGS_IS_LETHAL(sig) && sig != SIGABRT)
|
|
|
|
#endif
|
|
|
|
#include <sys/cdefs.h>
|
|
|
|
typedef void (*__sighandler_t)(int);
|
|
|
|
/* Macros used as function pointers. */
|
|
#define SIG_ERR ((__sighandler_t) -1) /* error return */
|
|
#define SIG_DFL ((__sighandler_t) 0) /* default signal handling */
|
|
#define SIG_IGN ((__sighandler_t) 1) /* ignore signal */
|
|
#define SIG_HOLD ((__sighandler_t) 2) /* block signal */
|
|
#define SIG_CATCH ((__sighandler_t) 3) /* catch signal */
|
|
|
|
#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
|
|
defined(_NETBSD_SOURCE)
|
|
|
|
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
|
defined(_NETBSD_SOURCE)
|
|
#include <sys/siginfo.h>
|
|
#endif
|
|
|
|
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
|
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
|
#include <sys/ucontext.h>
|
|
#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
|
|
|
/*
|
|
* Signal vector "template" used in sigaction call.
|
|
*/
|
|
struct sigaction {
|
|
union {
|
|
void (*_sa_handler)(int);
|
|
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
|
defined(_NETBSD_SOURCE)
|
|
void (*_sa_sigaction)(int, siginfo_t *, void *);
|
|
#endif
|
|
} _sa_u; /* signal handler */
|
|
sigset_t sa_mask; /* signal mask to apply */
|
|
int sa_flags; /* see signal options below */
|
|
};
|
|
|
|
#define sa_handler _sa_u._sa_handler
|
|
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
|
defined(_NETBSD_SOURCE)
|
|
#define sa_sigaction _sa_u._sa_sigaction
|
|
#endif
|
|
|
|
#include <machine/signal.h> /* sigcontext; codes for SIGILL, SIGFPE */
|
|
|
|
/* Fields for sa_flags. */
|
|
#define SA_ONSTACK 0x0001 /* deliver signal on alternate stack */
|
|
#define SA_RESETHAND 0x0002 /* reset signal handler when signal caught */
|
|
#define SA_NODEFER 0x0004 /* don't block signal while catching it */
|
|
#define SA_RESTART 0x0008 /* automatic system call restart */
|
|
#define SA_SIGINFO 0x0010 /* extended signal handling */
|
|
#define SA_NOCLDWAIT 0x0020 /* don't create zombies */
|
|
#define SA_NOCLDSTOP 0x0040 /* don't receive SIGCHLD when child stops */
|
|
|
|
/* POSIX requires these values for use with sigprocmask(2). */
|
|
#define SIG_BLOCK 0 /* for blocking signals */
|
|
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
|
#define SIG_SETMASK 2 /* for setting the signal mask */
|
|
#define SIG_INQUIRE 4 /* for internal use only */
|
|
|
|
#if defined(_NETBSD_SOURCE)
|
|
typedef void (*sig_t)(int); /* type of signal function */
|
|
#endif
|
|
|
|
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
|
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
|
/*
|
|
* Flags used with stack_t/struct sigaltstack.
|
|
*/
|
|
#define SS_ONSTACK 1 /* Process is executing on an alternate stack */
|
|
#define SS_DISABLE 2 /* Alternate stack is disabled */
|
|
|
|
#define MINSIGSTKSZ 2048 /* Minimal stack size is 2k */
|
|
#define SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended stack size */
|
|
#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
|
|
|
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
|
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
|
/*
|
|
* Structure used in sigstack call.
|
|
*/
|
|
struct sigstack {
|
|
void *ss_sp; /* signal stack pointer */
|
|
int ss_onstack; /* current status */
|
|
};
|
|
#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
|
|
|
#if defined(_NETBSD_SOURCE) && !defined(_KERNEL)
|
|
/*
|
|
* Macro for converting signal number to a mask suitable for
|
|
* sigblock().
|
|
*/
|
|
#define sigmask(n) __sigmask(n)
|
|
|
|
#define BADSIG SIG_ERR
|
|
#endif /* _NETBSD_SOURCE */
|
|
|
|
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
|
defined(_NETBSD_SOURCE)
|
|
struct sigevent {
|
|
int sigev_notify;
|
|
int sigev_signo;
|
|
union sigval sigev_value;
|
|
void (*sigev_notify_function)(union sigval);
|
|
void /* pthread_attr_t */ *sigev_notify_attributes;
|
|
};
|
|
|
|
#define SIGEV_NONE 0
|
|
#define SIGEV_SIGNAL 1
|
|
#define SIGEV_THREAD 2
|
|
#if defined(_NETBSD_SOURCE)
|
|
#define SIGEV_SA 3
|
|
#endif
|
|
#endif /* (_POSIX_C_SOURCE - 0) >= 199309L || ... */
|
|
|
|
#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
|
|
|
|
/*
|
|
* For historical reasons; programs expect signal's return value to be
|
|
* defined by <sys/signal.h>.
|
|
*/
|
|
__BEGIN_DECLS
|
|
void (*signal(int, void (*)(int)))(int);
|
|
__END_DECLS
|
|
#endif /* !_SYS_SIGNAL_H_ */
|
|
|
|
|
|
|
|
|