X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=include%2Fsignal.h;h=0fdf720c6f387c4093c9fc648fa7c8c3908f28a7;hp=9db7b2e378fa8acc97e0f80acf923b4f8d51438d;hb=03a8362930c3c4fe49ee6b9cb2ba9f28153b15d3;hpb=417dbe92cbecae31aa569cb4033560eb140bff56 diff --git a/include/signal.h b/include/signal.h index 9db7b2e3..0fdf720c 100644 --- a/include/signal.h +++ b/include/signal.h @@ -8,11 +8,16 @@ extern "C" { #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) +#ifdef _GNU_SOURCE +#define __siginfo siginfo +#endif + #define __NEED_size_t #define __NEED_pid_t #define __NEED_uid_t #define __NEED_struct_timespec #define __NEED_pthread_t +#define __NEED_pthread_attr_t #define __NEED_time_t #define __NEED_clock_t #define __NEED_sigset_t @@ -20,8 +25,58 @@ extern "C" { #include -struct sigaction -{ +#define SIG_BLOCK 0 +#define SIG_UNBLOCK 1 +#define SIG_SETMASK 2 + +#define SIG_ERR ((void (*)(int))-1) +#define SIG_DFL ((void (*)(int)) 0) +#define SIG_IGN ((void (*)(int)) 1) +#define SIG_HOLD ((void (*)(int)) 2) + +#define SI_ASYNCNL (-60) +#define SI_TKILL (-6) +#define SI_SIGIO (-5) +#define SI_ASYNCIO (-4) +#define SI_MESGQ (-3) +#define SI_TIMER (-2) +#define SI_QUEUE (-1) +#define SI_USER 0 +#define SI_KERNEL 128 + +#define FPE_INTDIV 1 +#define FPE_INTOVF 2 +#define FPE_FLTDIV 3 +#define FPE_FLTOVF 4 +#define FPE_FLTUNT 5 +#define FPE_FLTRES 6 +#define FPE_FLTINV 7 +#define FPE_FLTSUB 8 + +#define ILL_ILLOPC 1 +#define ILL_ILLOPN 2 +#define ILL_ILLADR 3 +#define ILL_ILLTRP 4 +#define ILL_PRVOPC 5 +#define ILL_PRVREG 6 +#define ILL_COPROC 7 +#define ILL_BADSTK 8 + +#define SEGV_MAPERR 1 +#define SEGV_ACCERR 2 + +#define BUS_ADRALN 1 +#define BUS_ADRERR 2 +#define BUS_OBJERR 3 + +#define CLD_EXITED 1 +#define CLD_KILLED 2 +#define CLD_DUMPED 3 +#define CLD_TRAPPED 4 +#define CLD_STOPPED 5 +#define CLD_CONTINUED 6 + +struct sigaction { union { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); @@ -33,19 +88,71 @@ struct sigaction #define sa_handler __sa_handler.sa_handler #define sa_sigaction __sa_handler.sa_sigaction -typedef struct -{ +typedef struct { void *ss_sp; int ss_flags; size_t ss_size; } stack_t; -union sigval -{ +union sigval { int sival_int; void *sival_ptr; }; +struct __siginfo { + int si_signo, si_errno, si_code; + union { + char __pad[128 - 3*sizeof(int)]; + struct { + pid_t si_pid; + uid_t si_uid; + union sigval si_sigval; + } __rt; + struct { + unsigned int si_timer1, si_timer2; + } __timer; + struct { + pid_t si_pid; + uid_t si_uid; + int si_status; + clock_t si_utime, si_stime; + } __sigchld; + struct { + void *si_addr; + } __sigfault; + struct { + long si_band; + int si_fd; + } __sigpoll; + } __si_fields; +}; +#define si_pid __si_fields.__sigchld.si_pid +#define si_uid __si_fields.__sigchld.si_uid +#define si_status __si_fields.__sigchld.si_status +#define si_utime __si_fields.__sigchld.si_utime +#define si_stime __si_fields.__sigchld.si_stime +#define si_value __si_fields.__rt.si_sigval +#define si_addr __si_fields.__sigfault.si_addr +#define si_band __si_fields.__sigpoll.si_band +#define si_fd __si_fields.__sigpoll.si_fd +#define si_timer1 __si_fields.__timer.si_timer1 +#define si_timer2 __si_fields.__timer.si_timer2 +#define si_ptr __si_fields.__rt.si_sigval.sival_ptr +#define si_int __si_fields.__rt.si_sigval.sival_int + +struct sigevent { + union sigval sigev_value; + int sigev_signo; + int sigev_notify; + void (*sigev_notify_function)(union sigval); + pthread_attr_t *sigev_notify_attributes; + char __pad[56-3*sizeof(long)]; +}; + +#define SIGEV_SIGNAL 0 +#define SIGEV_NONE 1 +#define SIGEV_THREAD 2 + int __libc_current_sigrtmin(void); int __libc_current_sigrtmax(void); @@ -72,6 +179,9 @@ int sigqueue(pid_t, int, const union sigval); int pthread_sigmask(int, const sigset_t *, sigset_t *); int pthread_kill(pthread_t, int); +void psiginfo(const siginfo_t *, const char *); +void psignal(int, const char *); + #endif #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) @@ -83,12 +193,26 @@ int siginterrupt(int, int); int sigpause(int); int sigrelse(int); void (*sigset(int, void (*)(int)))(int); +#define TRAP_BRKPT 1 +#define TRAP_TRACE 2 +#define POLL_IN 1 +#define POLL_OUT 2 +#define POLL_MSG 3 +#define POLL_ERR 4 +#define POLL_PRI 5 +#define POLL_HUP 6 +#define SS_ONSTACK 1 +#define SS_DISABLE 2 +#define MINSIGSTKSZ 2048 +#define SIGSTKSZ 8192 #endif #ifdef _GNU_SOURCE -typedef int (*sighandler_t)(int); +typedef void (*sighandler_t)(int); void (*bsd_signal(int, void (*)(int)))(int); -#define __siginfo siginfo +int sigisemptyset(const sigset_t *); +#define SA_NOMASK SA_NODEFER +#define SA_ONESHOT SA_RESETHAND #endif #include