|
|
1.1 root 1: /*
2: * Copyright (c) 1991 Regents of the University of California.
3: * 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: * 3. All advertising materials mentioning features or use of this software
14: * must display the following acknowledgement:
15: * This product includes software developed by the University of
16: * California, Berkeley and its contributors.
17: * 4. Neither the name of the University nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: *
1.1.1.2 ! root 33: * from: @(#)signalvar.h 7.1 (Berkeley) 5/9/91
! 34: * signalvar.h,v 1.3 1993/05/20 16:23:07 cgd Exp
1.1 root 35: */
36:
1.1.1.2 ! root 37: #ifndef _SYS_SIGNALVAR_H_
! 38: #define _SYS_SIGNALVAR_H_
1.1 root 39:
40: /*
41: * Kernel signal definitions and data structures,
42: * not exported to user programs.
43: */
44:
45: /*
46: * Process signal actions and state, needed only within the process
47: * (not necessarily resident).
48: */
49: struct sigacts {
50: sig_t ps_sigact[NSIG]; /* disposition of signals */
51: sigset_t ps_catchmask[NSIG]; /* signals to be blocked */
52: sigset_t ps_sigonstack; /* signals to take on sigstack */
53: sigset_t ps_sigintr; /* signals that interrupt syscalls */
54: sigset_t ps_oldmask; /* saved mask from before sigpause */
55: int ps_flags; /* signal flags, below */
56: struct sigstack ps_sigstack; /* sp & on stack state variable */
57: int ps_sig; /* for core dump/debugger XXX */
58: int ps_code; /* for core dump/debugger XXX */
59: };
60:
61: #define ps_onstack ps_sigstack.ss_onstack
62: #define ps_sigsp ps_sigstack.ss_sp
63:
64: /* signal flags */
65: #define SA_OLDMASK 0x01 /* need to restore mask before pause */
66:
67: /* additional signal action values, used only temporarily/internally */
68: #define SIG_CATCH (void (*)())2
69: #define SIG_HOLD (void (*)())3
70:
71: /*
72: * get signal action for process and signal; currently only for current process
73: */
74: #define SIGACTION(p, sig) (p->p_sigacts->ps_sigact[(sig)])
75:
76: /*
77: * Determine signal that should be delivered to process p, the current process,
78: * 0 if none. If there is a pending stop signal with default action,
79: * the process stops in issig().
80: */
81: #define CURSIG(p) \
82: (((p)->p_sig == 0 || \
83: ((p)->p_flag&STRC) == 0 && ((p)->p_sig &~ (p)->p_sigmask) == 0) ? \
84: 0 : issig(p))
85:
86: /*
87: * Clear a pending signal from a process.
88: */
89: #define CLRSIG(p, sig) { (p)->p_sig &= ~sigmask(sig); }
90:
91: /*
92: * Signal properties and actions.
93: * The array below categorizes the signals and their default actions
94: * according to the following properties:
95: */
96: #define SA_KILL 0x01 /* terminates process by default */
97: #define SA_CORE 0x02 /* ditto and coredumps */
98: #define SA_STOP 0x04 /* suspend process */
99: #define SA_TTYSTOP (0x08|SA_STOP) /* ditto, from tty */
100: #define SA_IGNORE 0x10 /* ignore by default */
101: #define SA_CONT 0x20 /* continue if suspended */
102: #define SA_CANTMASK 0x40 /* non-maskable, catchable */
103:
104: #ifdef SIGPROP
105: int sigprop[NSIG + 1] = {
106: 0, /* unused */
107: SA_KILL, /* SIGHUP */
108: SA_KILL, /* SIGINT */
109: SA_KILL|SA_CORE, /* SIGQUIT */
110: SA_KILL|SA_CORE, /* SIGILL */
111: SA_KILL|SA_CORE, /* SIGTRAP */
112: SA_KILL|SA_CORE, /* SIGABRT */
113: SA_KILL|SA_CORE, /* SIGEMT */
114: SA_KILL|SA_CORE, /* SIGFPE */
115: SA_KILL, /* SIGKILL */
116: SA_KILL|SA_CORE, /* SIGBUS */
117: SA_KILL|SA_CORE, /* SIGSEGV */
118: SA_KILL|SA_CORE, /* SIGSYS */
119: SA_KILL, /* SIGPIPE */
120: SA_KILL, /* SIGALRM */
121: SA_KILL, /* SIGTERM */
122: SA_IGNORE, /* SIGURG */
123: SA_STOP, /* SIGSTOP */
124: SA_TTYSTOP, /* SIGTSTP */
125: SA_IGNORE|SA_CONT, /* SIGCONT */
126: SA_IGNORE, /* SIGCHLD */
127: SA_TTYSTOP, /* SIGTTIN */
128: SA_TTYSTOP, /* SIGTTOU */
129: SA_IGNORE, /* SIGIO */
130: SA_KILL, /* SIGXCPU */
131: SA_KILL, /* SIGXFSZ */
132: SA_KILL, /* SIGVTALRM */
133: SA_KILL, /* SIGPROF */
134: SA_IGNORE, /* SIGWINCH */
135: SA_IGNORE, /* SIGINFO */
136: SA_KILL, /* SIGUSR1 */
137: SA_KILL, /* SIGUSR2 */
138: };
139:
140: #define stopsigmask (sigmask(SIGSTOP)|sigmask(SIGTSTP)|\
141: sigmask(SIGTTIN)|sigmask(SIGTTOU))
142: #define contsigmask (sigmask(SIGCONT))
143:
144: #endif /* SIGPROP */
145:
146: #define sigcantmask (sigmask(SIGKILL)|sigmask(SIGSTOP))
147:
148: #ifdef KERNEL
149: /*
150: * Machine-independent functions:
151: */
152: void siginit __P((struct proc *p));
153: void execsigs __P((struct proc *p));
154: void gsignal __P((int pgid, int sig));
155: void pgsignal __P((struct pgrp *pgrp, int sig, int checkctty));
156: void trapsignal __P((struct proc *p, int sig, unsigned code));
157: void psignal __P((struct proc *p, int sig));
158: int issig __P((struct proc *p));
159: void psig __P((int sig));
160: int coredump __P((struct proc *p));
161:
162: /*
163: * Machine-dependent functions:
164: */
165: void sendsig __P((sig_t action, int sig, int returnmask, unsigned code));
166: #endif /* KERNEL */
1.1.1.2 ! root 167:
! 168: #endif /* !_SYS_SIGNALVAR_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.