LCOV - code coverage report
Current view: top level - arch/x86/include/asm - signal.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 4 4 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       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           2 : } 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           1 : # 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           1 : 
     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           1 : 
     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 */

Generated by: LCOV version 1.10