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