xref: /original-bsd/sys/sys/signalvar.h (revision 27393bdf)
1 /*
2  * Copyright (c) 1991, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)signalvar.h	8.6 (Berkeley) 02/19/95
8  */
9 
10 #ifndef	_SYS_SIGNALVAR_H_		/* tmp for user.h */
11 #define	_SYS_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 	long	ps_code;		/* for core dump/debugger XXX */
32 	long	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
51  * process, 0 if none.  If there is a pending stop signal with default
52  * action, the process stops in issignal().
53  */
54 #define	CURSIG(p)							\
55 	(((p)->p_siglist == 0 ||					\
56 	    ((p)->p_flag & P_TRACED) == 0 &&				\
57 	    ((p)->p_siglist & ~(p)->p_sigmask) == 0) ?			\
58 	    0 : issignal(p))
59 
60 /*
61  * Clear a pending signal from a process.
62  */
63 #define	CLRSIG(p, sig)	{ (p)->p_siglist &= ~sigmask(sig); }
64 
65 /*
66  * Signal properties and actions.
67  * The array below categorizes the signals and their default actions
68  * according to the following properties:
69  */
70 #define	SA_KILL		0x01		/* terminates process by default */
71 #define	SA_CORE		0x02		/* ditto and coredumps */
72 #define	SA_STOP		0x04		/* suspend process */
73 #define	SA_TTYSTOP	0x08		/* ditto, from tty */
74 #define	SA_IGNORE	0x10		/* ignore by default */
75 #define	SA_CONT		0x20		/* continue if suspended */
76 #define	SA_CANTMASK	0x40		/* non-maskable, catchable */
77 
78 #ifdef	SIGPROP
79 int sigprop[NSIG + 1] = {
80 	0,			/* unused */
81 	SA_KILL,		/* SIGHUP */
82 	SA_KILL,		/* SIGINT */
83 	SA_KILL|SA_CORE,	/* SIGQUIT */
84 	SA_KILL|SA_CORE,	/* SIGILL */
85 	SA_KILL|SA_CORE,	/* SIGTRAP */
86 	SA_KILL|SA_CORE,	/* SIGABRT */
87 	SA_KILL|SA_CORE,	/* SIGEMT */
88 	SA_KILL|SA_CORE,	/* SIGFPE */
89 	SA_KILL,		/* SIGKILL */
90 	SA_KILL|SA_CORE,	/* SIGBUS */
91 	SA_KILL|SA_CORE,	/* SIGSEGV */
92 	SA_KILL|SA_CORE,	/* SIGSYS */
93 	SA_KILL,		/* SIGPIPE */
94 	SA_KILL,		/* SIGALRM */
95 	SA_KILL,		/* SIGTERM */
96 	SA_IGNORE,		/* SIGURG */
97 	SA_STOP,		/* SIGSTOP */
98 	SA_STOP|SA_TTYSTOP,	/* SIGTSTP */
99 	SA_IGNORE|SA_CONT,	/* SIGCONT */
100 	SA_IGNORE,		/* SIGCHLD */
101 	SA_STOP|SA_TTYSTOP,	/* SIGTTIN */
102 	SA_STOP|SA_TTYSTOP,	/* SIGTTOU */
103 	SA_IGNORE,		/* SIGIO */
104 	SA_KILL,		/* SIGXCPU */
105 	SA_KILL,		/* SIGXFSZ */
106 	SA_KILL,		/* SIGVTALRM */
107 	SA_KILL,		/* SIGPROF */
108 	SA_IGNORE,		/* SIGWINCH  */
109 	SA_IGNORE,		/* SIGINFO */
110 	SA_KILL,		/* SIGUSR1 */
111 	SA_KILL,		/* SIGUSR2 */
112 };
113 
114 #define	contsigmask	(sigmask(SIGCONT))
115 #define	stopsigmask	(sigmask(SIGSTOP) | sigmask(SIGTSTP) | \
116 			    sigmask(SIGTTIN) | sigmask(SIGTTOU))
117 
118 #endif /* SIGPROP */
119 
120 #define	sigcantmask	(sigmask(SIGKILL) | sigmask(SIGSTOP))
121 
122 #ifdef KERNEL
123 /*
124  * Machine-independent functions:
125  */
126 int	coredump __P((struct proc *p));
127 void	execsigs __P((struct proc *p));
128 void	gsignal __P((int pgid, int sig));
129 int	issignal __P((struct proc *p));
130 void	pgsignal __P((struct pgrp *pgrp, int sig, int checkctty));
131 void	postsig __P((int sig));
132 void	psignal __P((struct proc *p, int sig));
133 void	setsigvec __P((struct proc *p, int signum, struct sigaction *sa));
134 void	sigexit __P((struct proc *p, int signum));
135 void	siginit __P((struct proc *p));
136 void	trapsignal __P((struct proc *p, int sig, u_long code));
137 
138 /*
139  * Machine-dependent functions:
140  */
141 void	sendsig __P((sig_t action, int sig, int returnmask, u_long code));
142 #endif	/* KERNEL */
143 #endif	/* !_SYS_SIGNALVAR_H_ */
144