block.c raw

   1  #include "pthread_impl.h"
   2  #include "syscall.h"
   3  #include <signal.h>
   4  
   5  static const unsigned long all_mask[] = {
   6  #if ULONG_MAX == 0xffffffff && _NSIG > 65
   7  	-1UL, -1UL, -1UL, -1UL
   8  #elif ULONG_MAX == 0xffffffff || _NSIG > 65
   9  	-1UL, -1UL
  10  #else
  11  	-1UL
  12  #endif
  13  };
  14  
  15  static const unsigned long app_mask[] = {
  16  #if ULONG_MAX == 0xffffffff
  17  #if _NSIG == 65
  18  	0x7fffffff, 0xfffffffc
  19  #else
  20  	0x7fffffff, 0xfffffffc, -1UL, -1UL
  21  #endif
  22  #else
  23  #if _NSIG == 65
  24  	0xfffffffc7fffffff
  25  #else
  26  	0xfffffffc7fffffff, -1UL
  27  #endif
  28  #endif
  29  };
  30  
  31  void __block_all_sigs(void *set)
  32  {
  33  	__syscall(SYS_rt_sigprocmask, SIG_BLOCK, &all_mask, set, _NSIG/8);
  34  }
  35  
  36  void __block_app_sigs(void *set)
  37  {
  38  	__syscall(SYS_rt_sigprocmask, SIG_BLOCK, &app_mask, set, _NSIG/8);
  39  }
  40  
  41  void __restore_sigs(void *set)
  42  {
  43  	__syscall(SYS_rt_sigprocmask, SIG_SETMASK, set, 0, _NSIG/8);
  44  }
  45