RTEMS CPU Kit with SuperCore  4.11.3
signalvar.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 1991, 1993
3  * The Regents of the University of California. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 4. Neither the name of the University nor the names of its contributors
14  * may be used to endorse or promote products derived from this software
15  * without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * @(#)signalvar.h 8.6 (Berkeley) 2/19/95
30  * $FreeBSD: src/sys/sys/signalvar.h,v 1.91 2010/07/08 19:15:26 jhb Exp $
31  */
32 
33 
34 #ifndef _SYS_SIGNALVAR_H_
35 #define _SYS_SIGNALVAR_H_
36 
37 /*
38  * Kernel signal definitions and data structures,
39  * not exported to user programs.
40  */
41 
42 #if !defined(__rtems__)
43 /*
44  * Process signal actions and state, needed only within the process
45  * (not necessarily resident).
46  */
47 struct sigacts {
48  sig_t ps_sigact[NSIG]; /* disposition of signals */
49  sigset_t ps_catchmask[NSIG]; /* signals to be blocked */
50  sigset_t ps_sigonstack; /* signals to take on sigstack */
51  sigset_t ps_sigintr; /* signals that interrupt syscalls */
52  sigset_t ps_sigreset; /* signals that reset when caught */
53  sigset_t ps_signodefer; /* signals not masked while handled */
54  sigset_t ps_oldmask; /* saved mask from before sigpause */
55  int ps_flags; /* signal flags, below */
56  struct sigaltstack ps_sigstk; /* sp & on stack state variable */
57  int ps_sig; /* for core dump/debugger XXX */
58  u_long ps_code; /* for core dump/debugger XXX */
59  sigset_t ps_usertramp; /* SunOS compat; libc sigtramp XXX */
60 };
61 #endif
62 
63 /* signal flags */
64 #define SAS_OLDMASK 0x01 /* need to restore mask before pause */
65 #define SAS_ALTSTACK 0x02 /* have alternate signal stack */
66 
67 /* additional signal action values, used only temporarily/internally */
68 #define SIG_CATCH ((__sighandler_t *)2)
69 #define SIG_HOLD ((__sighandler_t *)3)
70 
71 #if !defined(__rtems__)
72 /*
73  * get signal action for process and signal; currently only for current process
74  */
75 #define SIGACTION(p, sig) (p->p_sigacts->ps_sigact[(sig)])
76 #endif
77 
78 /*
79  * Determine signal that should be delivered to process p, the current
80  * process, 0 if none. If there is a pending stop signal with default
81  * action, the process stops in issignal().
82  */
83 #define CURSIG(p) \
84  (((p)->p_siglist == 0 || \
85  (((p)->p_flag & P_TRACED) == 0 && \
86  ((p)->p_siglist & ~(p)->p_sigmask) == 0)) ? \
87  0 : issignal(p))
88 
89 /*
90  * Clear a pending signal from a process.
91  */
92 #define CLRSIG(p, sig) { (p)->p_siglist &= ~sigmask(sig); }
93 
94 /*
95  * Signal properties and actions.
96  * The array below categorizes the signals and their default actions
97  * according to the following properties:
98  */
99 #define SA_KILL 0x01 /* terminates process by default */
100 #define SA_CORE 0x02 /* ditto and coredumps */
101 #define SA_STOP 0x04 /* suspend process */
102 #define SA_TTYSTOP 0x08 /* ditto, from tty */
103 #define SA_IGNORE 0x10 /* ignore by default */
104 #define SA_CONT 0x20 /* continue if suspended */
105 #define SA_CANTMASK 0x40 /* non-maskable, catchable */
106 
107 #ifdef SIGPROP
108 static int sigprop[NSIG + 1] = {
109  0, /* unused */
110  SA_KILL, /* SIGHUP */
111  SA_KILL, /* SIGINT */
112  SA_KILL|SA_CORE, /* SIGQUIT */
113  SA_KILL|SA_CORE, /* SIGILL */
114  SA_KILL|SA_CORE, /* SIGTRAP */
115  SA_KILL|SA_CORE, /* SIGABRT */
116  SA_KILL|SA_CORE, /* SIGEMT */
117  SA_KILL|SA_CORE, /* SIGFPE */
118  SA_KILL, /* SIGKILL */
119  SA_KILL|SA_CORE, /* SIGBUS */
120  SA_KILL|SA_CORE, /* SIGSEGV */
121  SA_KILL|SA_CORE, /* SIGSYS */
122  SA_KILL, /* SIGPIPE */
123  SA_KILL, /* SIGALRM */
124  SA_KILL, /* SIGTERM */
125  SA_IGNORE, /* SIGURG */
126  SA_STOP, /* SIGSTOP */
127  SA_STOP|SA_TTYSTOP, /* SIGTSTP */
128  SA_IGNORE|SA_CONT, /* SIGCONT */
129  SA_IGNORE, /* SIGCHLD */
130  SA_STOP|SA_TTYSTOP, /* SIGTTIN */
131  SA_STOP|SA_TTYSTOP, /* SIGTTOU */
132  SA_IGNORE, /* SIGIO */
133  SA_KILL, /* SIGXCPU */
134  SA_KILL, /* SIGXFSZ */
135  SA_KILL, /* SIGVTALRM */
136  SA_KILL, /* SIGPROF */
137  SA_IGNORE, /* SIGWINCH */
138  SA_IGNORE, /* SIGINFO */
139  SA_KILL, /* SIGUSR1 */
140  SA_KILL, /* SIGUSR2 */
141 };
142 
143 #define contsigmask (sigmask(SIGCONT))
144 #define stopsigmask (sigmask(SIGSTOP) | sigmask(SIGTSTP) | \
145  sigmask(SIGTTIN) | sigmask(SIGTTOU))
146 
147 #endif /* SIGPROP */
148 
149 #define sigcantmask (sigmask(SIGKILL) | sigmask(SIGSTOP))
150 
151 #ifdef _KERNEL
152 /*
153  * Machine-independent functions:
154  */
155 void execsigs(struct proc *p);
156 void gsignal(int pgid, int sig);
157 int issignal(struct proc *p);
158 void killproc(struct proc *p, char *why);
159 void pgsignal(struct pgrp *pgrp, int sig, int checkctty);
160 void postsig(int sig);
161 #ifndef __rtems__
162 /* clashes with psignal(3) */
163 void psignal(struct proc *p, int sig);
164 #endif
165 void setsigvec(struct proc *p, int signum, struct sigaction *sa);
166 void sigexit(struct proc *p, int signum);
167 void siginit(struct proc *p);
168 void trapsignal(struct proc *p, int sig, u_long code);
169 
170 /*
171  * Machine-dependent functions:
172  */
173 void sendsig(sig_t action, int sig, int returnmask, u_long code);
174 #endif /* _KERNEL */
175 
176 #endif /* !_SYS_SIGNALVAR_H_ */
Definition: rtems_bsdnet_internal.h:86
Definition: proc.h:5
Definition: signalvar.h:48
Definition: inftrees.h:25