1 /*	$OpenBSD: linux_signal.h,v 1.8 2002/03/14 01:26:50 millert Exp $	*/
2 /* 	$NetBSD: linux_signal.h,v 1.4 1995/08/27 20:51:51 fvdl Exp $	*/
3 
4 /*
5  * Copyright (c) 1995 Frank van der Linden
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed for the NetBSD Project
19  *      by Frank van der Linden
20  * 4. The name of the author may not be used to endorse or promote products
21  *    derived from this software without specific prior written permission
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 #ifndef _LINUX_SIGNAL_H
36 #define _LINUX_SIGNAL_H
37 
38 #define LINUX_SIGHUP	 1
39 #define LINUX_SIGINT	 2
40 #define LINUX_SIGQUIT	 3
41 #define LINUX_SIGILL	 4
42 #define LINUX_SIGTRAP	 5
43 #define LINUX_SIGABRT	 6
44 #define LINUX_SIGIOT	 6
45 #define LINUX_SIGBUS	 7
46 #define LINUX_SIGFPE	 8
47 #define LINUX_SIGKILL	 9
48 #define LINUX_SIGUSR1	10
49 #define LINUX_SIGSEGV	11
50 #define LINUX_SIGUSR2	12
51 #define LINUX_SIGPIPE	13
52 #define LINUX_SIGALRM	14
53 #define LINUX_SIGTERM	15
54 #define LINUX_SIGSTKFLT	16
55 #define LINUX_SIGCHLD	17
56 #define LINUX_SIGCONT	18
57 #define LINUX_SIGSTOP	19
58 #define LINUX_SIGTSTP	20
59 #define LINUX_SIGTTIN	21
60 #define LINUX_SIGTTOU	22
61 #define LINUX_SIGURG	23
62 #define LINUX_SIGXCPU	24
63 #define LINUX_SIGXFSZ	25
64 #define LINUX_SIGVTALRM	26
65 #define LINUX_SIGPROF	27
66 #define LINUX_SIGWINCH	28
67 #define LINUX_SIGIO	29
68 #define LINUX_SIGPWR	30
69 #define LINUX_SIGUNUSED	31
70 #define LINUX_NSIG	32
71 
72 #define LINUX__NSIG 		64
73 #define LINUX__NSIG_BPW		32
74 #define LINUX__NSIG_WORDS	(LINUX__NSIG / LINUX__NSIG_BPW)
75 
76 #define LINUX_SIG_BLOCK		0
77 #define LINUX_SIG_UNBLOCK	1
78 #define LINUX_SIG_SETMASK	2
79 
80 typedef u_long	linux_old_sigset_t;
81 typedef struct {
82 	u_long sig[LINUX__NSIG_WORDS];
83 } linux_sigset_t;
84 
85 typedef void	(*linux_handler_t)(int);
86 
87 struct linux_old_sigaction {
88 	linux_handler_t		sa__handler;
89 	linux_old_sigset_t	sa_mask;
90 	u_long			sa_flags;
91 	void			(*sa_restorer)(void);
92 };
93 
94 struct linux_sigaction {
95 	linux_handler_t		sa__handler;
96 	u_long			sa_flags;
97 	void			(*sa_restorer)(void);
98 	linux_sigset_t		sa_mask;
99 };
100 
101 /* sa_flags */
102 #define LINUX_SA_NOCLDSTOP	0x00000001
103 #define LINUX_SA_SIGINFO	0x00000004
104 #define LINUX_SA_ONSTACK	0x08000000
105 #define LINUX_SA_RESTART	0x10000000
106 #define LINUX_SA_INTERRUPT	0x20000000
107 #define LINUX_SA_NOMASK		0x40000000
108 #define LINUX_SA_ONESHOT	0x80000000
109 #define LINUX_SA_ALLBITS	0xf8000001
110 
111 struct linux_sigaltstack {
112 	void	*ss_sp;
113 	int	ss_flags;
114 	size_t	ss_size;
115 };
116 
117 /* ss_flags */
118 #define LINUX_SS_ONSTACK	0x00000001
119 #define LINUX_SS_DISABLE	0x00000002
120 
121 extern int bsd_to_linux_sig[];
122 extern int linux_to_bsd_sig[];
123 
124 void linux_old_to_bsd_sigset(const linux_old_sigset_t *, sigset_t *);
125 void bsd_to_linux_old_sigset(const sigset_t *, linux_old_sigset_t *);
126 
127 void linux_old_extra_to_bsd_sigset(const linux_old_sigset_t *,
128     const unsigned long *, sigset_t *);
129 void bsd_to_linux_old_extra_sigset(const sigset_t *,
130     linux_old_sigset_t *, unsigned long *);
131 
132 void linux_to_bsd_sigset(const linux_sigset_t *, sigset_t *);
133 void bsd_to_linux_sigset(const sigset_t *, linux_sigset_t *);
134 
135 void linux_old_to_bsd_sigaction(struct linux_old_sigaction *,
136     struct sigaction *);
137 void bsd_to_linux_old_sigaction(struct sigaction *,
138     struct linux_old_sigaction *);
139 
140 void linux_to_bsd_sigaction(struct linux_sigaction *,
141     struct sigaction *);
142 void bsd_to_linux_sigaction(struct sigaction *,
143     struct linux_sigaction *);
144 
145 int  linux_to_bsd_signal (int, int *);
146 int  bsd_to_linux_signal (int, int *);
147 
148 #endif /* !_LINUX_SIGNAL_H */
149