xref: /original-bsd/sys/sys/signalvar.h (revision 909c03fb)
1 /*
2  * Copyright (c) 1991 Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)signalvar.h	7.5 (Berkeley) 04/20/92
8  */
9 
10 #ifndef	_SIGNALVAR_H_		/* tmp for user.h */
11 #define	_SIGNALVAR_H_
12 
13 /*
14  * Kernel signal definitions and data structures,
15  * not exported to user programs.
16  */
17 
18 /*
19  * Process signal actions and state, needed only within the process
20  * (not necessarily resident).
21  */
22 struct	sigacts {
23 	sig_t	ps_sigact[NSIG];	/* disposition of signals */
24 	sigset_t ps_catchmask[NSIG];	/* signals to be blocked */
25 	sigset_t ps_sigonstack;		/* signals to take on sigstack */
26 	sigset_t ps_sigintr;		/* signals that interrupt syscalls */
27 	sigset_t ps_oldmask;		/* saved mask from before sigpause */
28 	int	ps_flags;		/* signal flags, below */
29 	struct	sigaltstack ps_sigstk;	/* sp & on stack state variable */
30 	int	ps_sig;			/* for core dump/debugger XXX */
31 	int	ps_code;		/* for core dump/debugger XXX */
32 	int	ps_addr;		/* for core dump/debugger XXX */
33 	sigset_t ps_usertramp;		/* SunOS compat; libc sigtramp XXX */
34 };
35 
36 /* signal flags */
37 #define	SAS_OLDMASK	0x01		/* need to restore mask before pause */
38 #define	SAS_ALTSTACK	0x02		/* have alternate signal stack */
39 
40 /* additional signal action values, used only temporarily/internally */
41 #define	SIG_CATCH	(void (*)())2
42 #define	SIG_HOLD	(void (*)())3
43 
44 /*
45  * get signal action for process and signal; currently only for current process
46  */
47 #define SIGACTION(p, sig)	(p->p_sigacts->ps_sigact[(sig)])
48 
49 /*
50  * Determine signal that should be delivered to process p, the current process,
51  * 0 if none.  If there is a pending stop signal with default action,
52  * the process stops in issig().
53  */
54 #define	CURSIG(p) \
55 	(((p)->p_sig == 0 || \
56 	    ((p)->p_flag&STRC) == 0 && ((p)->p_sig &~ (p)->p_sigmask) == 0) ? \
57 	    0 : issig(p))
58 
59 /*
60  * Clear a pending signal from a process.
61  */
62 #define	CLRSIG(p, sig)	{ (p)->p_sig &= ~sigmask(sig); }
63 
64 /*
65  * Signal properties and actions.
66  * The array below categorizes the signals and their default actions
67  * according to the following properties:
68  */
69 #define	SA_KILL		0x01		/* terminates process by default */
70 #define	SA_CORE		0x02		/* ditto and coredumps */
71 #define	SA_STOP		0x04		/* suspend process */
72 #define	SA_TTYSTOP	0x08		/* ditto, from tty */
73 #define	SA_IGNORE	0x10		/* ignore by default */
74 #define	SA_CONT		0x20		/* continue if suspended */
75 #define	SA_CANTMASK	0x40		/* non-maskable, catchable */
76 
77 #ifdef	SIGPROP
78 int sigprop[NSIG + 1] = {
79 	0,			/* unused */
80 	SA_KILL,		/* SIGHUP */
81 	SA_KILL,		/* SIGINT */
82 	SA_KILL|SA_CORE,	/* SIGQUIT */
83 	SA_KILL|SA_CORE,	/* SIGILL */
84 	SA_KILL|SA_CORE,	/* SIGTRAP */
85 	SA_KILL|SA_CORE,	/* SIGABRT */
86 	SA_KILL|SA_CORE,	/* SIGEMT */
87 	SA_KILL|SA_CORE,	/* SIGFPE */
88 	SA_KILL,		/* SIGKILL */
89 	SA_KILL|SA_CORE,	/* SIGBUS */
90 	SA_KILL|SA_CORE,	/* SIGSEGV */
91 	SA_KILL|SA_CORE,	/* SIGSYS */
92 	SA_KILL,		/* SIGPIPE */
93 	SA_KILL,		/* SIGALRM */
94 	SA_KILL,		/* SIGTERM */
95 	SA_IGNORE,		/* SIGURG */
96 	SA_STOP,		/* SIGSTOP */
97 	SA_STOP|SA_TTYSTOP,	/* SIGTSTP */
98 	SA_IGNORE|SA_CONT,	/* SIGCONT */
99 	SA_IGNORE,		/* SIGCHLD */
100 	SA_STOP|SA_TTYSTOP,	/* SIGTTIN */
101 	SA_STOP|SA_TTYSTOP,	/* SIGTTOU */
102 	SA_IGNORE,		/* SIGIO */
103 	SA_KILL,		/* SIGXCPU */
104 	SA_KILL,		/* SIGXFSZ */
105 	SA_KILL,		/* SIGVTALRM */
106 	SA_KILL,		/* SIGPROF */
107 	SA_IGNORE,		/* SIGWINCH  */
108 	SA_IGNORE,		/* SIGINFO */
109 	SA_KILL,		/* SIGUSR1 */
110 	SA_KILL,		/* SIGUSR2 */
111 };
112 
113 #define	stopsigmask	(sigmask(SIGSTOP)|sigmask(SIGTSTP)|\
114 			 sigmask(SIGTTIN)|sigmask(SIGTTOU))
115 #define	contsigmask	(sigmask(SIGCONT))
116 
117 #endif /* SIGPROP */
118 
119 #define	sigcantmask	(sigmask(SIGKILL)|sigmask(SIGSTOP))
120 
121 #ifdef KERNEL
122 /*
123  * Machine-independent functions:
124  */
125 void	siginit __P((struct proc *p));
126 void	execsigs __P((struct proc *p));
127 void	gsignal __P((int pgid, int sig));
128 void	pgsignal __P((struct pgrp *pgrp, int sig, int checkctty));
129 void	trapsignal __P((struct proc *p, int sig, unsigned code));
130 void	psignal __P((struct proc *p, int sig));
131 int	issig __P((struct proc *p));
132 void	psig __P((int sig));
133 int	coredump __P((struct proc *p));
134 
135 /*
136  * Machine-dependent functions:
137  */
138 void	sendsig __P((sig_t action, int sig, int returnmask, unsigned code));
139 #endif	/* KERNEL */
140 #endif	/* !_SIGNALVAR_H_ */
141