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-defs.h> 121 122 #ifndef __ASSEMBLY__ 123 124 # ifdef __KERNEL__ 125 extern void do_notify_resume(struct pt_regs *, void *, __u32); 126 # endif /* __KERNEL__ */ 127 128 #ifdef __i386__ 129 # ifdef __KERNEL__ 130 struct old_sigaction { 131 __sighandler_t sa_handler; 132 old_sigset_t sa_mask; 133 unsigned long sa_flags; 134 __sigrestore_t sa_restorer; 135 }; 136 137 struct sigaction { 138 __sighandler_t sa_handler; 139 unsigned long sa_flags; 140 __sigrestore_t sa_restorer; 141 sigset_t sa_mask; /* mask last for extensibility */ 142 }; 143 144 struct k_sigaction { 145 struct sigaction sa; 146 }; 147 148 # else /* __KERNEL__ */ 149 /* Here we must cater to libcs that poke about in kernel headers. */ 150 151 struct sigaction { 152 union { 153 __sighandler_t _sa_handler; 154 void (*_sa_sigaction)(int, struct siginfo *, void *); 155 } _u; 156 sigset_t sa_mask; 157 unsigned long sa_flags; 158 void (*sa_restorer)(void); 159 }; 160 161 #define sa_handler _u._sa_handler 162 #define sa_sigaction _u._sa_sigaction 163 164 # endif /* ! __KERNEL__ */ 165 #else /* __i386__ */ 166 167 struct sigaction { 168 __sighandler_t sa_handler; 169 unsigned long sa_flags; 170 __sigrestore_t sa_restorer; 171 sigset_t sa_mask; /* mask last for extensibility */ 172 }; 173 174 struct k_sigaction { 175 struct sigaction sa; 176 }; 177 178 #endif /* !__i386__ */ 179 180 typedef struct sigaltstack { 181 void __user *ss_sp; 182 int ss_flags; 183 size_t ss_size; 184 } stack_t; 185 186 #ifdef __KERNEL__ 187 #include <asm/sigcontext.h> 188 189 #ifdef __i386__ 190 191 #define __HAVE_ARCH_SIG_BITOPS 192 193 #define sigaddset(set,sig) \ 194 (__builtin_constant_p(sig) \ 195 ? __const_sigaddset((set), (sig)) \ 196 : __gen_sigaddset((set), (sig))) 197 198 static inline void __gen_sigaddset(sigset_t *set, int _sig) 199 { 200 asm("btsl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc"); 201 } 202 203 static inline void __const_sigaddset(sigset_t *set, int _sig) 204 { 205 unsigned long sig = _sig - 1; 206 set->sig[sig / _NSIG_BPW] |= 1 << (sig % _NSIG_BPW); 207 } 208 209 #define sigdelset(set, sig) \ 210 (__builtin_constant_p(sig) \ 211 ? __const_sigdelset((set), (sig)) \ 212 : __gen_sigdelset((set), (sig))) 213 214 215 static inline void __gen_sigdelset(sigset_t *set, int _sig) 216 { 217 asm("btrl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc"); 218 } 219 220 static inline void __const_sigdelset(sigset_t *set, int _sig) 221 { 222 unsigned long sig = _sig - 1; 223 set->sig[sig / _NSIG_BPW] &= ~(1 << (sig % _NSIG_BPW)); 224 } 225 226 static inline int __const_sigismember(sigset_t *set, int _sig) 227 { 228 unsigned long sig = _sig - 1; 229 return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW)); 230 } 231 232 static inline int __gen_sigismember(sigset_t *set, int _sig) 233 { 234 int ret; 235 asm("btl %2,%1\n\tsbbl %0,%0" 236 : "=r"(ret) : "m"(*set), "Ir"(_sig-1) : "cc"); 237 return ret; 238 } 239 240 #define sigismember(set, sig) \ 241 (__builtin_constant_p(sig) \ 242 ? __const_sigismember((set), (sig)) \ 243 : __gen_sigismember((set), (sig))) 244 245 static inline int sigfindinword(unsigned long word) 246 { 247 asm("bsfl %1,%0" : "=r"(word) : "rm"(word) : "cc"); 248 return word; 249 } 250 251 struct pt_regs; 252 253 #else /* __i386__ */ 254 255 #undef __HAVE_ARCH_SIG_BITOPS 256 257 #endif /* !__i386__ */ 258 259 #define ptrace_signal_deliver(regs, cookie) do { } while (0) 260 261 #endif /* __KERNEL__ */ 262 #endif /* __ASSEMBLY__ */ 263 264 #endif /* _ASM_X86_SIGNAL_H */ 265