1 /*
2  * Copyright (c) 2018 Intel Corporation
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef ZEPHYR_INCLUDE_POSIX_SIGNAL_H_
7 #define ZEPHYR_INCLUDE_POSIX_SIGNAL_H_
8 
9 #include "posix_types.h"
10 #include "posix_features.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 #define SIGHUP    1  /**< Hangup */
17 #define SIGINT    2  /**< Interrupt */
18 #define SIGQUIT   3  /**< Quit */
19 #define SIGILL    4  /**< Illegal instruction */
20 #define SIGTRAP   5  /**< Trace/breakpoint trap */
21 #define SIGABRT   6  /**< Aborted */
22 #define SIGBUS    7  /**< Bus error */
23 #define SIGFPE    8  /**< Arithmetic exception */
24 #define SIGKILL   9  /**< Killed */
25 #define SIGUSR1   10 /**< User-defined signal 1 */
26 #define SIGSEGV   11 /**< Invalid memory reference */
27 #define SIGUSR2   12 /**< User-defined signal 2 */
28 #define SIGPIPE   13 /**< Broken pipe */
29 #define SIGALRM   14 /**< Alarm clock */
30 #define SIGTERM   15 /**< Terminated */
31 /* 16 not used */
32 #define SIGCHLD   17 /**< Child status changed */
33 #define SIGCONT   18 /**< Continued */
34 #define SIGSTOP   19 /**< Stop executing */
35 #define SIGTSTP   20 /**< Stopped */
36 #define SIGTTIN   21 /**< Stopped (read) */
37 #define SIGTTOU   22 /**< Stopped (write) */
38 #define SIGURG    23 /**< Urgent I/O condition */
39 #define SIGXCPU   24 /**< CPU time limit exceeded */
40 #define SIGXFSZ   25 /**< File size limit exceeded */
41 #define SIGVTALRM 26 /**< Virtual timer expired */
42 #define SIGPROF   27 /**< Profiling timer expired */
43 /* 28 not used */
44 #define SIGPOLL   29 /**< Pollable event occurred */
45 /* 30 not used */
46 #define SIGSYS    31 /**< Bad system call */
47 
48 #define SIGRTMIN 32
49 #define SIGRTMAX (SIGRTMIN + RTSIG_MAX)
50 #define _NSIG (SIGRTMAX + 1)
51 
52 BUILD_ASSERT(RTSIG_MAX >= 0);
53 
54 typedef struct {
55 	unsigned long sig[DIV_ROUND_UP(_NSIG, BITS_PER_LONG)];
56 } sigset_t;
57 
58 #ifndef SIGEV_NONE
59 #define SIGEV_NONE 1
60 #endif
61 
62 #ifndef SIGEV_SIGNAL
63 #define SIGEV_SIGNAL 2
64 #endif
65 
66 #ifndef SIGEV_THREAD
67 #define SIGEV_THREAD 3
68 #endif
69 
70 #ifndef SIG_BLOCK
71 #define SIG_BLOCK 0
72 #endif
73 #ifndef SIG_SETMASK
74 #define SIG_SETMASK 1
75 #endif
76 #ifndef SIG_UNBLOCK
77 #define SIG_UNBLOCK 2
78 #endif
79 
80 typedef int	sig_atomic_t;		/* Atomic entity type (ANSI) */
81 
82 union sigval {
83 	void *sival_ptr;
84 	int sival_int;
85 };
86 
87 struct sigevent {
88 	void (*sigev_notify_function)(union sigval val);
89 	pthread_attr_t *sigev_notify_attributes;
90 	union sigval sigev_value;
91 	int sigev_notify;
92 	int sigev_signo;
93 };
94 
95 char *strsignal(int signum);
96 int sigemptyset(sigset_t *set);
97 int sigfillset(sigset_t *set);
98 int sigaddset(sigset_t *set, int signo);
99 int sigdelset(sigset_t *set, int signo);
100 int sigismember(const sigset_t *set, int signo);
101 int sigprocmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
102 
103 int pthread_sigmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
104 
105 #ifdef __cplusplus
106 }
107 #endif
108 
109 #endif /* ZEPHYR_INCLUDE_POSIX_SIGNAL_H_ */
110