1#ifndef _ASM_X86_SIGNAL_H
2#define _ASM_X86_SIGNAL_H
3
4#ifndef __ASSEMBLY__
5#include <linux/linkage.h>
6
7
8
9
10#define _NSIG 64
11
12#ifdef __i386__
13# define _NSIG_BPW 32
14#else
15# define _NSIG_BPW 64
16#endif
17
18#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
19
20typedef unsigned long old_sigset_t;
21
22typedef struct {
23 unsigned long sig[_NSIG_WORDS];
24} sigset_t;
25
26#ifndef CONFIG_COMPAT
27typedef sigset_t compat_sigset_t;
28#endif
29
30#endif
31#include <uapi/asm/signal.h>
32#ifndef __ASSEMBLY__
33extern void do_notify_resume(struct pt_regs *, void *, __u32);
34
35#define __ARCH_HAS_SA_RESTORER
36
37#include <asm/sigcontext.h>
38
39#ifdef __i386__
40
41#define __HAVE_ARCH_SIG_BITOPS
42
43#define sigaddset(set,sig) \
44 (__builtin_constant_p(sig) \
45 ? __const_sigaddset((set), (sig)) \
46 : __gen_sigaddset((set), (sig)))
47
48static inline void __gen_sigaddset(sigset_t *set, int _sig)
49{
50 asm("btsl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
51}
52
53static inline void __const_sigaddset(sigset_t *set, int _sig)
54{
55 unsigned long sig = _sig - 1;
56 set->sig[sig / _NSIG_BPW] |= 1 << (sig % _NSIG_BPW);
57}
58
59#define sigdelset(set, sig) \
60 (__builtin_constant_p(sig) \
61 ? __const_sigdelset((set), (sig)) \
62 : __gen_sigdelset((set), (sig)))
63
64
65static inline void __gen_sigdelset(sigset_t *set, int _sig)
66{
67 asm("btrl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
68}
69
70static inline void __const_sigdelset(sigset_t *set, int _sig)
71{
72 unsigned long sig = _sig - 1;
73 set->sig[sig / _NSIG_BPW] &= ~(1 << (sig % _NSIG_BPW));
74}
75
76static inline int __const_sigismember(sigset_t *set, int _sig)
77{
78 unsigned long sig = _sig - 1;
79 return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
80}
81
82static inline int __gen_sigismember(sigset_t *set, int _sig)
83{
84 int ret;
85 asm("btl %2,%1\n\tsbbl %0,%0"
86 : "=r"(ret) : "m"(*set), "Ir"(_sig-1) : "cc");
87 return ret;
88}
89
90#define sigismember(set, sig) \
91 (__builtin_constant_p(sig) \
92 ? __const_sigismember((set), (sig)) \
93 : __gen_sigismember((set), (sig)))
94
95static inline int sigfindinword(unsigned long word)
96{
97 asm("bsfl %1,%0" : "=r"(word) : "rm"(word) : "cc");
98 return word;
99}
100
101struct pt_regs;
102
103#else
104
105#undef __HAVE_ARCH_SIG_BITOPS
106
107#endif
108
109#endif
110#endif
111