Zephyr API Documentation 4.2.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
posix_signal.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 The Zephyr Contributors
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#ifndef ZEPHYR_INCLUDE_POSIX_POSIX_SIGNAL_H_
7#define ZEPHYR_INCLUDE_POSIX_POSIX_SIGNAL_H_
8
9#if defined(_POSIX_C_SOURCE) || defined(__DOXYGEN__)
10
11#include <zephyr/toolchain.h>
12#include <zephyr/sys/util.h>
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18/* SIG_DFL must be defined by the libc signal.h */
19/* SIG_ERR must be defined by the libc signal.h */
20
21#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
22#define SIG_HOLD ((void *)-2)
23#endif
24
25/* SIG_IGN must be defined by the libc signal.h */
26
27#if defined(_POSIX_THREADS) || defined(__DOXYGEN__)
28
29#if !defined(_PTHREAD_T_DECLARED) && !defined(__pthread_t_defined)
30typedef unsigned int pthread_t;
31#define _PTHREAD_T_DECLARED
32#define __pthread_t_defined
33#endif
34
35#endif /* defined(_POSIX_THREADS) || defined(__DOXYGEN__) */
36
37/* size_t must be defined by the libc stddef.h */
38#include <stddef.h>
39
40#if !defined(_UID_T_DECLARED) && !defined(__uid_t_defined)
41typedef int uid_t;
42#define _UID_T_DECLARED
43#define __uid_t_defined
44#endif
45
46#if !defined(_TIME_T_DECLARED) && !defined(__time_t_defined)
47typedef long time_t;
48#define _TIME_T_DECLARED
49#define __time_t_defined
50#endif
51
52#if !defined(_TIMESPEC_DECLARED) && !defined(__timespec_defined)
53struct timespec {
55 long tv_nsec;
56};
57#define _TIMESPEC_DECLARED
58#define __timespec_defined
59#endif
60
61/* sig_atomic_t must be defined by the libc signal.h */
62
63#define SIGRTMIN 32
64#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
65BUILD_ASSERT(CONFIG_POSIX_RTSIG_MAX >= 0);
66#define SIGRTMAX (SIGRTMIN + CONFIG_POSIX_RTSIG_MAX)
67#else
68#define SIGRTMAX SIGRTMIN
69#endif
70
71#if !defined(_SIGSET_T_DECLARED) && !defined(__sigset_t_defined)
72typedef struct {
73 unsigned long sig[DIV_ROUND_UP(SIGRTMAX + 1, BITS_PER_LONG)];
74} sigset_t;
75#define _SIGSET_T_DECLARED
76#define __sigset_t_defined
77#endif
78
79#if !defined(_PID_T_DECLARED) && !defined(__pid_t_defined)
80typedef long pid_t;
81#define _PID_T_DECLARED
82#define __pid_t_defined
83#endif
84
85#if defined(_POSIX_THREADS) || defined(__DOXYGEN__)
86
87#if !defined(_PTHREAD_ATTR_T_DECLARED) && !defined(__pthread_attr_t_defined)
88typedef struct {
89 void *stack;
90 unsigned int details[2];
92#define _PTHREAD_ATTR_T_DECLARED
93#define __pthread_attr_t_defined
94#endif
95
96#endif
97
98#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
99
100union sigval; /* forward declaration (to preserve spec order) */
101
102#if !defined(_SIGEVENT_DECLARED) && !defined(__sigevent_defined)
103typedef struct {
104#if defined(_POSIX_THREADS) || defined(__DOXYGEN__)
106#endif
110} sigevent_t;
111#define _SIGEVENT_DECLARED
112#define __sigevent_defined
113#endif
114
115#define SIGEV_NONE 1
116#define SIGEV_SIGNAL 2
117#define SIGEV_THREAD 3
118
119/* Signal constants are defined below */
120
121#endif /* defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__) */
122
123#if !defined(_SIGVAL_DECLARED) && !defined(__sigval_defined)
124union sigval {
127};
128#define _SIGVAL_DECLARED
129#define __sigval_defined
130#endif
131
132/* SIGRTMIN and SIGRTMAX defined above */
133
134#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
135
136#if !defined(_SIGACTION_DECLARED) && !defined(__sigaction_defined)
137struct sigaction {
138 union {
139 void (*sa_handler)(int sig);
140 void (*sa_sigaction)(int sig, siginfo_t *info, void *context);
141 };
144};
145#define _SIGACTION_DECLARED
146#define __sigaction_defined
147#endif
148
149#define SIG_BLOCK 1
150#define SIG_UNBLOCK 2
151#define SIG_SETMASK 0
152
153#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
154#define SA_NOCLDSTOP 0x00000001
155#define SA_ONSTACK 0x00000002
156#endif
157#define SA_RESETHAND 0x00000004
158#define SA_RESTART 0x00000008
159#define SA_SIGINFO 0x00000010
160#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
161#define SA_NOCLDWAIT 0x00000020
162#endif
163#define SA_NODEFER 0x00000040
164#define SS_ONSTACK 0x00000001
165#define SS_DISABLE 0x00000002
166#define MINSIGSTKSZ 4096
167#define SIGSTKSZ 4096
168
169#if !defined(_MCONTEXT_T_DECLARED) && !defined(__mcontext_t_defined)
170typedef struct {
171 /* FIXME: there should be a much better Zephyr-specific structure that can be used here */
172 unsigned long gregs[32];
173 unsigned long flags;
174} mcontext_t;
175#define _MCONTEXT_T_DECLARED
176#define __mcontext_defined
177#endif
178
179#if !defined(_UCONTEXT_T_DECLARED) && !defined(__ucontext_t_defined)
186#define _UCONTEXT_T_DECLARED
187#define __ucontext_defined
188#endif
189
190#if !defined(_STACK_T_DECLARED) && !defined(__stack_t_defined)
191typedef struct {
192 void *ss_sp;
193 size_t ss_size;
195} stack_t;
196#define _STACK_T_DECLARED
197#define __stack_t_defined
198#endif
199
200#endif /* defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__) */
201
202#if !defined(_SIGINFO_T_DECLARED) && !defined(__siginfo_t_defined)
203typedef struct {
204 void *si_addr;
205#if defined(_XOPEN_STREAMS) || defined(__DOXYGEN__)
207#endif
213#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
215#endif
217} siginfo_t;
218#define _SIGINFO_T_DECLARED
219#define __siginfo_t_defined
220#endif
221
222/* Siginfo codes are defined below */
223
224#if !defined(_SIGHANDLER_T_DECLARED) && !defined(__sighandler_t_defined)
225typedef void (*sighandler_t)(int sig);
226#define _SIGHANDLER_T_DECLARED
227#define __sighandler_t_defined
228#endif
229
230int kill(pid_t pid, int sig);
231#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
232int killpg(pid_t pgrp, int sig);
233#endif
234void psiginfo(const siginfo_t *info, const char *message);
235void psignal(int sig, const char *message);
236#if defined(_POSIX_THREADS) || defined(__DOXYGEN__)
237int pthread_kill(pthread_t thread, int sig);
238int pthread_sigmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
239#endif
240/* raise() must be defined by the libc signal.h */
241#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
243int sigaction(int sig, const struct sigaction *ZRESTRICT act, struct sigaction *ZRESTRICT oact);
245#endif
246int sigaddset(sigset_t *set, int sig);
247#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
249#endif
250int sigdelset(sigset_t *set, int sig);
253#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
254int sighold(int sig);
255int sigignore(int sig);
256int siginterrupt(int sig, int flag);
257#endif
258int sigismember(const sigset_t *set, int sig);
259/* signal() must be defined by the libc signal.h */
260#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
261int sigpause(int sig);
262#endif
264int sigprocmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
265#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
266int sigqueue(pid_t pid, int sig, union sigval value);
267#endif
268#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
269int sigrelse(int sig);
271#endif
272int sigsuspend(const sigset_t *set);
273#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
275 const struct timespec *ZRESTRICT timeout);
276#endif
277int sigwait(const sigset_t *ZRESTRICT set, int *ZRESTRICT sig);
278#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
280#endif
281
282/* Note: only ANSI / ISO C signals are guarded below */
283
284#define SIGHUP 1
285#if !defined(SIGINT) || defined(__DOXYGEN__)
286#define SIGINT 2
287#endif
288#define SIGQUIT 3
289#if !defined(SIGILL) || defined(__DOXYGEN__)
290#define SIGILL 4
291#endif
292#define SIGTRAP 5
293#if !defined(SIGABRT) || defined(__DOXYGEN__)
294#define SIGABRT 6
295#endif
296#define SIGBUS 7
297#if !defined(SIGFPE) || defined(__DOXYGEN__)
298#define SIGFPE 8
299#endif
300#define SIGKILL 9
301#define SIGUSR1 10
302#if !defined(SIGSEGV) || defined(__DOXYGEN__)
303#define SIGSEGV 11
304#endif
305#define SIGUSR2 12
306#define SIGPIPE 13
307#define SIGALRM 14
308#if !defined(SIGTERM) || defined(__DOXYGEN__)
309#define SIGTERM 15
310#endif
311/* 16 not used */
312#define SIGCHLD 17
313#define SIGCONT 18
314#define SIGSTOP 19
315#define SIGTSTP 20
316#define SIGTTIN 21
317#define SIGTTOU 22
318#define SIGURG 23
319#define SIGXCPU 24
320#define SIGXFSZ 25
321#define SIGVTALRM 26
322#define SIGPROF 27
323/* 28 not used */
324#define SIGPOLL 29
325/* 30 not used */
326#define SIGSYS 31
327
328#if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
329
330/* SIGILL */
331#define ILL_ILLOPC 1
332#define ILL_ILLOPN 2
333#define ILL_ILLADR 3
334#define ILL_ILLTRP 4
335#define ILL_PRVOPC 5
336#define ILL_PRVREG 6
337#define ILL_COPROC 7
338#define ILL_BADSTK 8
339
340/* SIGFPE */
341#define FPE_INTDIV 9
342#define FPE_INTOVF 10
343#define FPE_FLTDIV 11
344#define FPE_FLTOVF 12
345#define FPE_FLTUND 13
346#define FPE_FLTRES 15
347#define FPE_FLTINV 16
348#define FPE_FLTSUB 17
349
350/* SIGSEGV */
351#define SEGV_MAPERR 18
352#define SEGV_ACCERR 19
353
354/* SIGBUS */
355#define BUS_ADRALN 20
356#define BUS_ADRERR 21
357#define BUS_OBJERR 22
358
359#if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
360/* SIGTRAP */
361#define TRAP_BRKPT 23
362#define TRAP_TRACE 24
363#endif
364
365/* SIGCHLD */
366#define CLD_EXITED 25
367#define CLD_KILLED 26
368#define CLD_DUMPED 27
369#define CLD_TRAPPED 28
370#define CLD_STOPPED 29
371#define CLD_CONTINUED 30
372
373#if defined(_XOPEN_STREAMS) || defined(__DOXYGEN__)
374/* SIGPOLL */
375#define POLL_IN 31
376#define POLL_OUT 32
377#define POLL_MSG 33
378#define POLL_ERR 34
379#define POLL_PRI 35
380#define POLL_HUP 36
381#endif
382
383/* Any */
384#define SI_USER 37
385#define SI_QUEUE 38
386#define SI_TIMER 39
387#define SI_ASYNCIO 40
388#define SI_MESGQ 41
389
390#endif
391
392#ifdef __cplusplus
393}
394#endif
395
396#endif /* defined(_POSIX_C_SOURCE) || defined(__DOXYGEN__) */
397
398#endif /* ZEPHYR_INCLUDE_POSIX_POSIX_SIGNAL_H_ */
_TIME_T_ time_t
Definition _timespec.h:14
#define BITS_PER_LONG
Number of bits in a long int.
Definition util.h:71
#define DIV_ROUND_UP(n, d)
Divide and round up.
Definition util.h:348
#define ZRESTRICT
Definition common.h:37
#define BUILD_ASSERT(EXPR, MSG...)
Definition llvm.h:51
int sigignore(int sig)
long pid_t
Definition posix_signal.h:80
int pthread_sigmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset)
int sigdelset(sigset_t *set, int sig)
int kill(pid_t pid, int sig)
int sigqueue(pid_t pid, int sig, union sigval value)
int killpg(pid_t pgrp, int sig)
#define SIGRTMAX
Definition posix_signal.h:66
int sigtimedwait(const sigset_t *ZRESTRICT set, siginfo_t *ZRESTRICT info, const struct timespec *ZRESTRICT timeout)
int sigemptyset(sigset_t *set)
int pthread_kill(pthread_t thread, int sig)
int siginterrupt(int sig, int flag)
int sigaction(int sig, const struct sigaction *ZRESTRICT act, struct sigaction *ZRESTRICT oact)
int sigismember(const sigset_t *set, int sig)
int sigsuspend(const sigset_t *set)
int sigprocmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset)
int sigpending(sigset_t *set)
long time_t
Definition posix_signal.h:47
void(* sighandler_t)(int sig)
Definition posix_signal.h:225
int sigfillset(sigset_t *set)
int sigrelse(int sig)
int sighold(int sig)
int sigwait(const sigset_t *ZRESTRICT set, int *ZRESTRICT sig)
int sigpause(int sig)
void psiginfo(const siginfo_t *info, const char *message)
unsigned int pthread_t
Definition posix_signal.h:30
int sigaddset(sigset_t *set, int sig)
int sigwaitinfo(const sigset_t *ZRESTRICT set, siginfo_t *ZRESTRICT info)
sighandler_t sigset(int sig, sighandler_t disp)
int sigaltstack(const stack_t *ZRESTRICT ss, stack_t *ZRESTRICT oss)
void psignal(int sig, const char *message)
int uid_t
Definition posix_signal.h:41
Definition posix_signal.h:170
unsigned long flags
Definition posix_signal.h:173
unsigned long gregs[32]
Definition posix_signal.h:172
Definition posix_signal.h:88
void * stack
Definition posix_signal.h:89
unsigned int details[2]
Definition posix_signal.h:90
Definition posix_signal.h:137
void(* sa_sigaction)(int sig, siginfo_t *info, void *context)
Definition posix_signal.h:140
sigset_t sa_mask
Definition posix_signal.h:142
void(* sa_handler)(int sig)
Definition posix_signal.h:139
int sa_flags
Definition posix_signal.h:143
Definition posix_signal.h:103
int sigev_notify
Definition posix_signal.h:108
union sigval sigev_value
Definition posix_signal.h:107
int sigev_signo
Definition posix_signal.h:109
pthread_attr_t * sigev_thread_attr
Definition posix_signal.h:105
Definition posix_signal.h:203
int si_code
Definition posix_signal.h:212
uid_t si_uid
Definition posix_signal.h:210
int si_signo
Definition posix_signal.h:211
pid_t si_pid
Definition posix_signal.h:209
long si_band
Definition posix_signal.h:206
int si_status
Definition posix_signal.h:216
void * si_addr
Definition posix_signal.h:204
int si_errno
Definition posix_signal.h:214
union sigval si_value
Definition posix_signal.h:208
Definition posix_signal.h:72
unsigned long sig[DIV_ROUND_UP((32+CONFIG_POSIX_RTSIG_MAX)+1, BITS_PER_LONG)]
Definition posix_signal.h:73
Definition posix_signal.h:191
void * ss_sp
Definition posix_signal.h:192
int ss_flags
Definition posix_signal.h:194
size_t ss_size
Definition posix_signal.h:193
Definition posix_signal.h:53
long tv_nsec
Definition posix_signal.h:55
time_t tv_sec
Definition posix_signal.h:54
Definition posix_signal.h:180
stack_t uc_stack
Definition posix_signal.h:183
struct ucontext * uc_link
Definition posix_signal.h:181
mcontext_t uc_mcontext
Definition posix_signal.h:184
sigset_t uc_sigmask
Definition posix_signal.h:182
Misc utilities.
Macros to abstract toolchain specific capabilities.
#define TOOLCHAIN_DISABLE_WARNING(warning)
Disable the specified compiler warning for all compilers.
Definition toolchain.h:254
#define TOOLCHAIN_ENABLE_WARNING(warning)
Re-enable the specified compiler warning for all compilers.
Definition toolchain.h:264
#define TOOLCHAIN_WARNING_SHADOW
Toolchain-specific warning for shadow variables.
Definition toolchain.h:224
Definition posix_signal.h:124
void * sival_ptr
Definition posix_signal.h:126
int sival_int
Definition posix_signal.h:125