signal.h raw

   1  #ifndef _SIGNAL_H
   2  #define _SIGNAL_H
   3  
   4  #ifdef __cplusplus
   5  extern "C" {
   6  #endif
   7  
   8  #include <features.h>
   9  
  10  #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  11   || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
  12   || defined(_BSD_SOURCE)
  13  
  14  #ifdef _GNU_SOURCE
  15  #define __ucontext ucontext
  16  #endif
  17  
  18  #define __NEED_size_t
  19  #define __NEED_pid_t
  20  #define __NEED_uid_t
  21  #define __NEED_struct_timespec
  22  #define __NEED_pthread_t
  23  #define __NEED_pthread_attr_t
  24  #define __NEED_time_t
  25  #define __NEED_clock_t
  26  #define __NEED_sigset_t
  27  
  28  #include <bits/alltypes.h>
  29  
  30  #define SIG_BLOCK     0
  31  #define SIG_UNBLOCK   1
  32  #define SIG_SETMASK   2
  33  
  34  #define SI_ASYNCNL (-60)
  35  #define SI_TKILL (-6)
  36  #define SI_SIGIO (-5)
  37  #define SI_ASYNCIO (-4)
  38  #define SI_MESGQ (-3)
  39  #define SI_TIMER (-2)
  40  #define SI_QUEUE (-1)
  41  #define SI_USER 0
  42  #define SI_KERNEL 128
  43  
  44  typedef struct sigaltstack stack_t;
  45  
  46  #endif
  47  
  48  #include <bits/signal.h>
  49  
  50  #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
  51   || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
  52   || defined(_BSD_SOURCE)
  53  
  54  #define SIG_HOLD ((void (*)(int)) 2)
  55  
  56  #define FPE_INTDIV 1
  57  #define FPE_INTOVF 2
  58  #define FPE_FLTDIV 3
  59  #define FPE_FLTOVF 4
  60  #define FPE_FLTUND 5
  61  #define FPE_FLTRES 6
  62  #define FPE_FLTINV 7
  63  #define FPE_FLTSUB 8
  64  
  65  #define ILL_ILLOPC 1
  66  #define ILL_ILLOPN 2
  67  #define ILL_ILLADR 3
  68  #define ILL_ILLTRP 4
  69  #define ILL_PRVOPC 5
  70  #define ILL_PRVREG 6
  71  #define ILL_COPROC 7
  72  #define ILL_BADSTK 8
  73  
  74  #define SEGV_MAPERR 1
  75  #define SEGV_ACCERR 2
  76  #define SEGV_BNDERR 3
  77  #define SEGV_PKUERR 4
  78  #define SEGV_MTEAERR 8
  79  #define SEGV_MTESERR 9
  80  
  81  #define BUS_ADRALN 1
  82  #define BUS_ADRERR 2
  83  #define BUS_OBJERR 3
  84  #define BUS_MCEERR_AR 4
  85  #define BUS_MCEERR_AO 5
  86  
  87  #define CLD_EXITED 1
  88  #define CLD_KILLED 2
  89  #define CLD_DUMPED 3
  90  #define CLD_TRAPPED 4
  91  #define CLD_STOPPED 5
  92  #define CLD_CONTINUED 6
  93  
  94  union sigval {
  95  	int sival_int;
  96  	void *sival_ptr;
  97  };
  98  
  99  typedef struct {
 100  #ifdef __SI_SWAP_ERRNO_CODE
 101  	int si_signo, si_code, si_errno;
 102  #else
 103  	int si_signo, si_errno, si_code;
 104  #endif
 105  	union {
 106  		char __pad[128 - 2*sizeof(int) - sizeof(long)];
 107  		struct {
 108  			union {
 109  				struct {
 110  					pid_t si_pid;
 111  					uid_t si_uid;
 112  				} __piduid;
 113  				struct {
 114  					int si_timerid;
 115  					int si_overrun;
 116  				} __timer;
 117  			} __first;
 118  			union {
 119  				union sigval si_value;
 120  				struct {
 121  					int si_status;
 122  					clock_t si_utime, si_stime;
 123  				} __sigchld;
 124  			} __second;
 125  		} __si_common;
 126  		struct {
 127  			void *si_addr;
 128  			short si_addr_lsb;
 129  			union {
 130  				struct {
 131  					void *si_lower;
 132  					void *si_upper;
 133  				} __addr_bnd;
 134  				unsigned si_pkey;
 135  			} __first;
 136  		} __sigfault;
 137  		struct {
 138  			long si_band;
 139  			int si_fd;
 140  		} __sigpoll;
 141  		struct {
 142  			void *si_call_addr;
 143  			int si_syscall;
 144  			unsigned si_arch;
 145  		} __sigsys;
 146  	} __si_fields;
 147  } siginfo_t;
 148  #define si_pid     __si_fields.__si_common.__first.__piduid.si_pid
 149  #define si_uid     __si_fields.__si_common.__first.__piduid.si_uid
 150  #define si_status  __si_fields.__si_common.__second.__sigchld.si_status
 151  #define si_utime   __si_fields.__si_common.__second.__sigchld.si_utime
 152  #define si_stime   __si_fields.__si_common.__second.__sigchld.si_stime
 153  #define si_value   __si_fields.__si_common.__second.si_value
 154  #define si_addr    __si_fields.__sigfault.si_addr
 155  #define si_addr_lsb __si_fields.__sigfault.si_addr_lsb
 156  #define si_lower   __si_fields.__sigfault.__first.__addr_bnd.si_lower
 157  #define si_upper   __si_fields.__sigfault.__first.__addr_bnd.si_upper
 158  #define si_pkey    __si_fields.__sigfault.__first.si_pkey
 159  #define si_band    __si_fields.__sigpoll.si_band
 160  #define si_fd      __si_fields.__sigpoll.si_fd
 161  #define si_timerid __si_fields.__si_common.__first.__timer.si_timerid
 162  #define si_overrun __si_fields.__si_common.__first.__timer.si_overrun
 163  #define si_ptr     si_value.sival_ptr
 164  #define si_int     si_value.sival_int
 165  #define si_call_addr __si_fields.__sigsys.si_call_addr
 166  #define si_syscall __si_fields.__sigsys.si_syscall
 167  #define si_arch    __si_fields.__sigsys.si_arch
 168  
 169  struct sigaction {
 170  	union {
 171  		void (*sa_handler)(int);
 172  		void (*sa_sigaction)(int, siginfo_t *, void *);
 173  	} __sa_handler;
 174  	sigset_t sa_mask;
 175  	int sa_flags;
 176  	void (*sa_restorer)(void);
 177  };
 178  #define sa_handler   __sa_handler.sa_handler
 179  #define sa_sigaction __sa_handler.sa_sigaction
 180  
 181  #define SA_UNSUPPORTED 0x00000400
 182  #define SA_EXPOSE_TAGBITS 0x00000800
 183  
 184  struct sigevent {
 185  	union sigval sigev_value;
 186  	int sigev_signo;
 187  	int sigev_notify;
 188  	union {
 189  		char __pad[64 - 2*sizeof(int) - sizeof(union sigval)];
 190  		pid_t sigev_notify_thread_id;
 191  		struct {
 192  			void (*sigev_notify_function)(union sigval);
 193  			pthread_attr_t *sigev_notify_attributes;
 194  		} __sev_thread;
 195  	} __sev_fields;
 196  };
 197  
 198  #define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id
 199  #define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function
 200  #define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes
 201  
 202  #define SIGEV_SIGNAL 0
 203  #define SIGEV_NONE 1
 204  #define SIGEV_THREAD 2
 205  #define SIGEV_THREAD_ID 4
 206  
 207  int __libc_current_sigrtmin(void);
 208  int __libc_current_sigrtmax(void);
 209  
 210  #define SIGRTMIN  (__libc_current_sigrtmin())
 211  #define SIGRTMAX  (__libc_current_sigrtmax())
 212  
 213  int kill(pid_t, int);
 214  
 215  int sigemptyset(sigset_t *);
 216  int sigfillset(sigset_t *);
 217  int sigaddset(sigset_t *, int);
 218  int sigdelset(sigset_t *, int);
 219  int sigismember(const sigset_t *, int);
 220  
 221  int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict);
 222  int sigsuspend(const sigset_t *);
 223  int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict);
 224  int sigpending(sigset_t *);
 225  int sigwait(const sigset_t *__restrict, int *__restrict);
 226  int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict);
 227  int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict);
 228  int sigqueue(pid_t, int, union sigval);
 229  
 230  int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
 231  int pthread_kill(pthread_t, int);
 232  
 233  void psiginfo(const siginfo_t *, const char *);
 234  void psignal(int, const char *);
 235  
 236  #endif
 237  
 238  #if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
 239  int killpg(pid_t, int);
 240  int sigaltstack(const stack_t *__restrict, stack_t *__restrict);
 241  int sighold(int);
 242  int sigignore(int);
 243  int siginterrupt(int, int);
 244  int sigpause(int);
 245  int sigrelse(int);
 246  void (*sigset(int, void (*)(int)))(int);
 247  #define TRAP_BRKPT 1
 248  #define TRAP_TRACE 2
 249  #define TRAP_BRANCH 3
 250  #define TRAP_HWBKPT 4
 251  #define TRAP_UNK 5
 252  #define POLL_IN 1
 253  #define POLL_OUT 2
 254  #define POLL_MSG 3
 255  #define POLL_ERR 4
 256  #define POLL_PRI 5
 257  #define POLL_HUP 6
 258  #define SS_ONSTACK    1
 259  #define SS_DISABLE    2
 260  #define SS_AUTODISARM (1U << 31)
 261  #define SS_FLAG_BITS SS_AUTODISARM
 262  #endif
 263  
 264  #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
 265  #define NSIG _NSIG
 266  typedef void (*sig_t)(int);
 267  
 268  #define SYS_SECCOMP 1
 269  #define SYS_USER_DISPATCH 2
 270  #endif
 271  
 272  #ifdef _GNU_SOURCE
 273  typedef void (*sighandler_t)(int);
 274  void (*bsd_signal(int, void (*)(int)))(int);
 275  int sigisemptyset(const sigset_t *);
 276  int sigorset (sigset_t *, const sigset_t *, const sigset_t *);
 277  int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
 278  
 279  #define SA_NOMASK SA_NODEFER
 280  #define SA_ONESHOT SA_RESETHAND
 281  #endif
 282  
 283  #define SIG_ERR  ((void (*)(int))-1)
 284  #define SIG_DFL  ((void (*)(int)) 0)
 285  #define SIG_IGN  ((void (*)(int)) 1)
 286  
 287  typedef int sig_atomic_t;
 288  
 289  void (*signal(int, void (*)(int)))(int);
 290  int raise(int);
 291  
 292  #if _REDIR_TIME64
 293  #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
 294   || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
 295   || defined(_BSD_SOURCE)
 296  __REDIR(sigtimedwait, __sigtimedwait_time64);
 297  #endif
 298  #endif
 299  
 300  #ifdef __cplusplus
 301  }
 302  #endif
 303  
 304  #endif
 305