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