1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _ASM_X86_SIGNAL_H
2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _ASM_X86_SIGNAL_H
3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __ASSEMBLY__
5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/types.h>
6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/time.h>
7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/compiler.h>
8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Avoid too many header ordering problems.  */
10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct siginfo;
11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __KERNEL__
13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/linkage.h>
14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Most things should be clean enough to redefine this at will, if care
16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru   is taken to make libc match.  */
17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _NSIG		64
19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __i386__
21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define _NSIG_BPW	32
22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else
23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# define _NSIG_BPW	64
24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _NSIG_WORDS	(_NSIG / _NSIG_BPW)
27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef unsigned long old_sigset_t;		/* at least 32 bits */
29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct {
31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sig[_NSIG_WORDS];
32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} sigset_t;
33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else
35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Here we must cater to libcs that poke about in kernel headers.  */
36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define NSIG		32
38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef unsigned long sigset_t;
39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __KERNEL__ */
41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __ASSEMBLY__ */
42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGHUP		 1
44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGINT		 2
45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGQUIT		 3
46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGILL		 4
47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGTRAP		 5
48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGABRT		 6
49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGIOT		 6
50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGBUS		 7
51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGFPE		 8
52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGKILL		 9
53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGUSR1		10
54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGSEGV		11
55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGUSR2		12
56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGPIPE		13
57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGALRM		14
58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGTERM		15
59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGSTKFLT	16
60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGCHLD		17
61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGCONT		18
62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGSTOP		19
63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGTSTP		20
64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGTTIN		21
65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGTTOU		22
66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGURG		23
67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGXCPU		24
68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGXFSZ		25
69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGVTALRM	26
70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGPROF		27
71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGWINCH	28
72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGIO		29
73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGPOLL		SIGIO
74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGLOST		29
76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru*/
77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGPWR		30
78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGSYS		31
79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define	SIGUNUSED	31
80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* These should not be considered constants from userland.  */
82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGRTMIN	32
83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGRTMAX	_NSIG
84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_FLAGS values:
87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_ONSTACK indicates that a registered stack_t will be used.
89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_RESTART flag to get restarting signals (which were the default long ago)
90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_RESETHAND clears the handler when the signal is delivered.
92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_NODEFER prevents the current signal from being masked in the handler.
94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru *
95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Unix names RESETHAND and NODEFER respectively.
97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_NOCLDSTOP	0x00000001u
99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_NOCLDWAIT	0x00000002u
100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_SIGINFO	0x00000004u
101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_ONSTACK	0x08000000u
102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_RESTART	0x10000000u
103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_NODEFER	0x40000000u
104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_RESETHAND	0x80000000u
105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_NOMASK	SA_NODEFER
107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_ONESHOT	SA_RESETHAND
108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SA_RESTORER	0x04000000
110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/*
112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * sigaltstack controls
113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */
114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SS_ONSTACK	1
115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SS_DISABLE	2
116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define MINSIGSTKSZ	2048
118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SIGSTKSZ	8192
119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm-generic/signal.h>
121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __ASSEMBLY__
123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __i386__
125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# ifdef __KERNEL__
126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct old_sigaction {
127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__sighandler_t sa_handler;
128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	old_sigset_t sa_mask;
129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sa_flags;
130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__sigrestore_t sa_restorer;
131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct sigaction {
134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__sighandler_t sa_handler;
135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sa_flags;
136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__sigrestore_t sa_restorer;
137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	sigset_t sa_mask;		/* mask last for extensibility */
138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct k_sigaction {
141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct sigaction sa;
142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# else /* __KERNEL__ */
144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* Here we must cater to libcs that poke about in kernel headers.  */
145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct sigaction {
147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	union {
148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	  __sighandler_t _sa_handler;
149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	  void (*_sa_sigaction)(int, struct siginfo *, void *);
150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	} _u;
151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	sigset_t sa_mask;
152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sa_flags;
153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	void (*sa_restorer)(void);
154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define sa_handler	_u._sa_handler
157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define sa_sigaction	_u._sa_sigaction
158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru# endif /* ! __KERNEL__ */
160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else /* __i386__ */
161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct sigaction {
163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__sighandler_t sa_handler;
164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sa_flags;
165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__sigrestore_t sa_restorer;
166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	sigset_t sa_mask;		/* mask last for extensibility */
167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct k_sigaction {
170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	struct sigaction sa;
171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru};
172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* !__i386__ */
174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct sigaltstack {
176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	void __user *ss_sp;
177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int ss_flags;
178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	size_t ss_size;
179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} stack_t;
180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __KERNEL__
182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm/sigcontext.h>
183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef __386__
185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __HAVE_ARCH_SIG_BITOPS
187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define sigaddset(set,sig)		   \
189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	(__builtin_constantp(sig) ?	   \
190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 __const_sigaddset((set),(sig)) :  \
191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 __gen_sigaddset((set),(sig)))
192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic __inline__ void __gen_sigaddset(sigset_t *set, int _sig)
194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__asm__("btsl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
196c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}
197c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
198c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic __inline__ void __const_sigaddset(sigset_t *set, int _sig)
199c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
200c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sig = _sig - 1;
201c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	set->sig[sig / _NSIG_BPW] |= 1 << (sig % _NSIG_BPW);
202c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}
203c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
204c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define sigdelset(set,sig)		   \
205c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	(__builtin_constant_p(sig) ?       \
206c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 __const_sigdelset((set),(sig)) :  \
207c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 __gen_sigdelset((set),(sig)))
208c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
209c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
210c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic __inline__ void __gen_sigdelset(sigset_t *set, int _sig)
211c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
212c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__asm__("btrl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
213c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}
214c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
215c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic __inline__ void __const_sigdelset(sigset_t *set, int _sig)
216c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
217c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sig = _sig - 1;
218c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	set->sig[sig / _NSIG_BPW] &= ~(1 << (sig % _NSIG_BPW));
219c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}
220c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
221c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic __inline__ int __const_sigismember(sigset_t *set, int _sig)
222c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
223c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	unsigned long sig = _sig - 1;
224c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
225c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}
226c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
227c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic __inline__ int __gen_sigismember(sigset_t *set, int _sig)
228c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
229c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	int ret;
230c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__asm__("btl %2,%1\n\tsbbl %0,%0"
231c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		: "=r"(ret) : "m"(*set), "Ir"(_sig-1) : "cc");
232c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	return ret;
233c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}
234c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
235c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define sigismember(set,sig)			\
236c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	(__builtin_constant_p(sig) ?		\
237c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 __const_sigismember((set),(sig)) :	\
238c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	 __gen_sigismember((set),(sig)))
239c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
240c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic __inline__ int sigfindinword(unsigned long word)
241c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{
242c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	__asm__("bsfl %1,%0" : "=r"(word) : "rm"(word) : "cc");
243c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	return word;
244c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}
245c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
246c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct pt_regs;
247c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
248c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ptrace_signal_deliver(regs, cookie)		\
249c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	do {						\
250c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		if (current->ptrace & PT_DTRACE) {	\
251c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			current->ptrace &= ~PT_DTRACE;	\
252c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru			(regs)->eflags &= ~TF_MASK;	\
253c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru		}					\
254c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru	} while (0)
255c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
256c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#else /* __i386__ */
257c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
258c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#undef __HAVE_ARCH_SIG_BITOPS
259c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
260c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ptrace_signal_deliver(regs, cookie) do { } while (0)
261c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
262c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* !__i386__ */
263c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __KERNEL__ */
264c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* __ASSEMBLY__ */
265c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru
266c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif
267