/* signal.h Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012, 2013 Red Hat, Inc. This file is part of Cygwin. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #ifndef _CYGWIN_SIGNAL_H #define _CYGWIN_SIGNAL_H #ifdef __cplusplus extern "C" { #endif struct _fpstate { unsigned long cw; unsigned long sw; unsigned long tag; unsigned long ipoff; unsigned long cssel; unsigned long dataoff; unsigned long datasel; unsigned char _st[80]; unsigned long nxst; }; struct ucontext { unsigned long cr2; unsigned long dr0; unsigned long dr1; unsigned long dr2; unsigned long dr3; unsigned long dr6; unsigned long dr7; struct _fpstate fpstate; unsigned long gs; unsigned long fs; unsigned long es; unsigned long ds; unsigned long edi; unsigned long esi; unsigned long ebx; unsigned long edx; unsigned long ecx; unsigned long eax; unsigned long ebp; unsigned long eip; unsigned long cs; unsigned long eflags; unsigned long esp; unsigned long ss; unsigned char _internal; unsigned long oldmask; }; #define __COPY_CONTEXT_SIZE ((unsigned) &((struct ucontext *) 0)->_internal) typedef union sigval { int sival_int; /* integer signal value */ void *sival_ptr; /* pointer signal value */ } sigval_t; typedef struct sigevent { sigval_t sigev_value; /* signal value */ int sigev_signo; /* signal number */ int sigev_notify; /* notification type */ void (*sigev_notify_function) (sigval_t); /* notification function */ pthread_attr_t *sigev_notify_attributes; /* notification attributes */ } sigevent_t; #pragma pack(push,4) struct _sigcommune { __uint32_t _si_code; void *_si_read_handle; void *_si_write_handle; void *_si_process_handle; __extension__ union { int _si_fd; void *_si_pipe_fhandler; char *_si_str; }; }; typedef struct { int si_signo; /* signal number */ int si_code; /* signal code */ pid_t si_pid; /* sender's pid */ uid_t si_uid; /* sender's uid */ int si_errno; /* errno associated with signal */ __extension__ union { __uint32_t __pad[32]; /* plan for future growth */ struct _sigcommune _si_commune; /* cygwin ipc */ __extension__ union { /* timers */ struct { union { struct { timer_t si_tid; /* timer id */ unsigned int si_overrun; /* overrun count */ }; sigval_t si_sigval; /* signal value */ sigval_t si_value; /* signal value */ }; }; }; /* SIGCHLD */ __extension__ struct { int si_status; /* exit code */ clock_t si_utime; /* user time */ clock_t si_stime; /* system time */ }; __extension__ struct { /* core dumping signals */ void *si_addr; /* faulting address */ void *si_cyg; /* pointer to block containing cygwin-special info */ }; }; } siginfo_t; #pragma pack(pop) enum { SI_USER = 0, /* sent by kill, raise, pthread_kill */ SI_ASYNCIO = 2, /* sent by AIO completion (currently unimplemented) */ SI_MESGQ, /* sent by real time mesq state change (currently unimplemented) */ SI_TIMER, /* sent by timer expiration */ SI_QUEUE, /* sent by sigqueue (currently unimplemented) */ SI_KERNEL, /* sent by system */ ILL_ILLOPC, /* illegal opcode */ ILL_ILLOPN, /* illegal operand */ ILL_ILLADR, /* illegal addressing mode */ ILL_ILLTRP, /* illegal trap*/ ILL_PRVOPC, /* privileged opcode */ ILL_PRVREG, /* privileged register */ ILL_COPROC, /* coprocessor error */ ILL_BADSTK, /* internal stack error */ FPE_INTDIV, /* integer divide by zero */ FPE_INTOVF, /* integer overflow */ FPE_FLTDIV, /* floating point divide by zero */ FPE_FLTOVF, /* floating point overflow */ FPE_FLTUND, /* floating point underflow */ FPE_FLTRES, /* floating point inexact result */ FPE_FLTINV, /* floating point invalid operation */ FPE_FLTSUB, /* subscript out of range */ SEGV_MAPERR, /* address not mapped to object */ SEGV_ACCERR, /* invalid permissions for mapped object */ BUS_ADRALN, /* invalid address alignment. */ BUS_ADRERR, /* non-existant physical address. */ BUS_OBJERR, /* object specific hardware error. */ CLD_EXITED, /* child has exited */ CLD_KILLED, /* child was killed */ CLD_DUMPED, /* child terminated abnormally */ CLD_TRAPPED, /* traced child has trapped */ CLD_STOPPED, /* child has stopped */ CLD_CONTINUED /* stopped child has continued */ }; enum { SIGEV_SIGNAL = 0, /* a queued signal, with an application defined value, is generated when the event of interest occurs */ SIGEV_NONE, /* no asynchronous notification is delivered when the event of interest occurs */ SIGEV_THREAD /* a notification function is called to perform notification */ }; typedef __uint32_t sigset_t; typedef void (*_sig_func_ptr)(int); struct sigaction { __extension__ union { _sig_func_ptr sa_handler; /* SIG_DFL, SIG_IGN, or pointer to a function */ void (*sa_sigaction) ( int, siginfo_t *, void * ); }; sigset_t sa_mask; int sa_flags; }; #define SA_NOCLDSTOP 1 /* Do not generate SIGCHLD when children stop */ #define SA_SIGINFO 2 /* Invoke the signal catching function with three arguments instead of one */ #define SA_RESTART 0x10000000 /* Restart syscall on signal return */ #define SA_NODEFER 0x40000000 /* Don't automatically block the signal when its handler is being executed */ #define SA_RESETHAND 0x80000000 /* Reset to SIG_DFL on entry to handler */ #define SA_ONESHOT SA_RESETHAND /* Historical linux name */ #define SA_NOMASK SA_NODEFER /* Historical linux name */ /* Used internally by cygwin. Included here to group everything in one place. Do not use. */ #define _SA_INTERNAL_MASK 0xf000 /* bits in this range are internal */ #define SIGHUP 1 /* hangup */ #define SIGINT 2 /* interrupt */ #define SIGQUIT 3 /* quit */ #define SIGILL 4 /* illegal instruction (not reset when caught) */ #define SIGTRAP 5 /* trace trap (not reset when caught) */ #define SIGABRT 6 /* used by abort */ #define SIGEMT 7 /* EMT instruction */ #define SIGFPE 8 /* floating point exception */ #define SIGKILL 9 /* kill (cannot be caught or ignored) */ #define SIGBUS 10 /* bus error */ #define SIGSEGV 11 /* segmentation violation */ #define SIGSYS 12 /* bad argument to system call */ #define SIGPIPE 13 /* write on a pipe with no one to read it */ #define SIGALRM 14 /* alarm clock */ #define SIGTERM 15 /* software termination signal from kill */ #define SIGURG 16 /* urgent condition on IO channel */ #define SIGSTOP 17 /* sendable stop signal not from tty */ #define SIGTSTP 18 /* stop signal from tty */ #define SIGCONT 19 /* continue a stopped process */ #define SIGCHLD 20 /* to parent on child stop or exit */ #define SIGCLD 20 /* System V name for SIGCHLD */ #define SIGTTIN 21 /* to readers pgrp upon background tty read */ #define SIGTTOU 22 /* like TTIN for output if (tp->t_local<OSTOP) */ #define SIGIO 23 /* input/output possible signal */ #define SIGPOLL SIGIO /* System V name for SIGIO */ #define SIGXCPU 24 /* exceeded CPU time limit */ #define SIGXFSZ 25 /* exceeded file size limit */ #define SIGVTALRM 26 /* virtual time alarm */ #define SIGPROF 27 /* profiling time alarm */ #define SIGWINCH 28 /* window changed */ #define SIGLOST 29 /* resource lost (eg, record-lock lost) */ #define SIGPWR SIGLOST /* power failure */ #define SIGUSR1 30 /* user defined signal 1 */ #define SIGUSR2 31 /* user defined signal 2 */ /* Real-Time signals per SUSv3. RT_SIGMAX is defined as 8 in limits.h */ #define SIGRTMIN 32 #define SIGRTMAX ((SIGRTMIN) + 0) #define NSIG 33 /* signal 0 implied */ #define SIG_HOLD ((_sig_func_ptr)2) /* Signal in signal mask */ void psiginfo (const siginfo_t *, const char *); int sigwait (const sigset_t *, int *); int sigwaitinfo (const sigset_t *, siginfo_t *); int sighold (int); int sigignore (int); int sigrelse (int); _sig_func_ptr sigset (int, _sig_func_ptr); int sigqueue(pid_t, int, const union sigval); int siginterrupt (int, int); #ifdef __INSIDE_CYGWIN__ extern const char *sys_sigabbrev[]; extern const char *sys_siglist[]; #else extern const char __declspec(dllimport) *sys_sigabbrev[]; extern const char __declspec(dllimport) *sys_siglist[]; #endif #ifdef __cplusplus } #endif #endif /*_CYGWIN_SIGNAL_H*/