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