LCOV - code coverage report
Current view: top level - zephyr/posix - posix_signal.h Coverage Total Hit
Test: new.info Lines: 41.5 % 164 68
Test Date: 2025-09-25 19:22:35

            Line data    Source code
       1            0 : /*
       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
      15              : extern "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            0 : #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)
      30            0 : typedef 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)
      41            0 : typedef 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)
      47            0 : typedef long time_t;
      48              : #define _TIME_T_DECLARED
      49              : #define __time_t_defined
      50              : #endif
      51              : 
      52              : #if !defined(_TIMESPEC_DECLARED) && !defined(__timespec_defined)
      53            0 : struct timespec {
      54            0 :         time_t tv_sec;
      55            0 :         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            0 : #define SIGRTMIN 32
      64              : #if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
      65              : BUILD_ASSERT(CONFIG_POSIX_RTSIG_MAX >= 0);
      66            0 : #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)
      72            0 : typedef struct {
      73            0 :         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)
      80            0 : typedef 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)
      88            0 : typedef struct {
      89            0 :         void *stack;
      90            0 :         unsigned int details[2];
      91              : } pthread_attr_t;
      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              : 
     100              : union sigval; /* forward declaration (to preserve spec order) */
     101              : 
     102              : #if !defined(_SIGEVENT_DECLARED) && !defined(__sigevent_defined)
     103            0 : typedef struct {
     104              : #if defined(_POSIX_THREADS) || defined(__DOXYGEN__)
     105            0 :         pthread_attr_t *sigev_thread_attr;
     106              : #endif
     107            0 :         union sigval sigev_value;
     108            0 :         int sigev_notify;
     109            0 :         int sigev_signo;
     110              : } sigevent_t;
     111              : #define _SIGEVENT_DECLARED
     112              : #define __sigevent_defined
     113              : #endif
     114              : 
     115            0 : #define SIGEV_NONE   1
     116            0 : #define SIGEV_SIGNAL 2
     117            0 : #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)
     124            0 : union sigval {
     125            0 :         int sival_int;
     126            0 :         void *sival_ptr;
     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)
     137            0 : struct sigaction {
     138              :         union {
     139            0 :                 void (*sa_handler)(int sig);
     140            0 :                 void (*sa_sigaction)(int sig, siginfo_t *info, void *context);
     141            0 :         };
     142            0 :         sigset_t sa_mask;
     143            0 :         int sa_flags;
     144              : };
     145              : #define _SIGACTION_DECLARED
     146              : #define __sigaction_defined
     147              : #endif
     148              : 
     149            0 : #define SIG_BLOCK   1
     150            0 : #define SIG_UNBLOCK 2
     151            0 : #define SIG_SETMASK 0
     152              : 
     153              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     154            0 : #define SA_NOCLDSTOP 0x00000001
     155            0 : #define SA_ONSTACK   0x00000002
     156              : #endif
     157            0 : #define SA_RESETHAND 0x00000004
     158            0 : #define SA_RESTART   0x00000008
     159            0 : #define SA_SIGINFO   0x00000010
     160              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     161            0 : #define SA_NOCLDWAIT 0x00000020
     162              : #endif
     163            0 : #define SA_NODEFER  0x00000040
     164              : 
     165            0 : #define SS_ONSTACK  0x00000001
     166            0 : #define SS_DISABLE  0x00000002
     167              : 
     168            0 : #define MINSIGSTKSZ K_KERNEL_STACK_LEN(0)
     169            0 : #define SIGSTKSZ    4096
     170              : 
     171              : #if !defined(_MCONTEXT_T_DECLARED) && !defined(__mcontext_t_defined)
     172            0 : typedef struct {
     173              : #if defined(CONFIG_CPP)
     174              :         char dummy;
     175              : #endif
     176              : } mcontext_t;
     177              : #define _MCONTEXT_T_DECLARED
     178              : #define __mcontext_defined
     179              : #endif
     180              : 
     181              : #if !defined(_UCONTEXT_T_DECLARED) && !defined(__ucontext_t_defined)
     182            0 : typedef struct {
     183            0 :         struct ucontext *uc_link;
     184            0 :         sigset_t uc_sigmask;
     185            0 :         stack_t uc_stack;
     186            0 :         mcontext_t uc_mcontext;
     187              : } ucontext_t;
     188              : #define _UCONTEXT_T_DECLARED
     189              : #define __ucontext_defined
     190              : #endif
     191              : 
     192              : #if !defined(_STACK_T_DECLARED) && !defined(__stack_t_defined)
     193            0 : typedef struct {
     194            0 :         void *ss_sp;
     195            0 :         size_t ss_size;
     196            0 :         int ss_flags;
     197              : } stack_t;
     198              : #define _STACK_T_DECLARED
     199              : #define __stack_t_defined
     200              : #endif
     201              : 
     202              : #endif /* defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__) */
     203              : 
     204              : #if !defined(_SIGINFO_T_DECLARED) && !defined(__siginfo_t_defined)
     205            0 : typedef struct {
     206            0 :         void *si_addr;
     207              : #if defined(_XOPEN_STREAMS) || defined(__DOXYGEN__)
     208            0 :         long si_band;
     209              : #endif
     210            0 :         union sigval si_value;
     211            0 :         pid_t si_pid;
     212            0 :         uid_t si_uid;
     213            0 :         int si_signo;
     214            0 :         int si_code;
     215              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     216            0 :         int si_errno;
     217              : #endif
     218            0 :         int si_status;
     219              : } siginfo_t;
     220              : #define _SIGINFO_T_DECLARED
     221              : #define __siginfo_t_defined
     222              : #endif
     223              : 
     224              : /* Siginfo codes are defined below */
     225              : 
     226              : #if !defined(_SIGHANDLER_T_DECLARED) && !defined(__sighandler_t_defined)
     227            0 : typedef void (*sighandler_t)(int sig);
     228              : #define _SIGHANDLER_T_DECLARED
     229              : #define __sighandler_t_defined
     230              : #endif
     231              : 
     232            0 : int kill(pid_t pid, int sig);
     233              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     234            0 : int killpg(pid_t pgrp, int sig);
     235              : #endif
     236            0 : void psiginfo(const siginfo_t *info, const char *message);
     237            0 : void psignal(int sig, const char *message);
     238              : #if defined(_POSIX_THREADS) || defined(__DOXYGEN__)
     239            0 : int pthread_kill(pthread_t thread, int sig);
     240            0 : int pthread_sigmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
     241              : #endif
     242              : /* raise() must be defined by the libc signal.h */
     243              : #if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
     244            0 : TOOLCHAIN_DISABLE_WARNING(TOOLCHAIN_WARNING_SHADOW);
     245            0 : int sigaction(int sig, const struct sigaction *ZRESTRICT act, struct sigaction *ZRESTRICT oact);
     246            0 : TOOLCHAIN_ENABLE_WARNING(TOOLCHAIN_WARNING_SHADOW);
     247              : #endif
     248            0 : int sigaddset(sigset_t *set, int sig);
     249              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     250            0 : int sigaltstack(const stack_t *ZRESTRICT ss, stack_t *ZRESTRICT oss);
     251              : #endif
     252            0 : int sigdelset(sigset_t *set, int sig);
     253            0 : int sigemptyset(sigset_t *set);
     254            0 : int sigfillset(sigset_t *set);
     255              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     256            0 : int sighold(int sig);
     257            0 : int sigignore(int sig);
     258            0 : int siginterrupt(int sig, int flag);
     259              : #endif
     260            0 : int sigismember(const sigset_t *set, int sig);
     261              : /* signal() must be defined by the libc signal.h */
     262              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     263            0 : int sigpause(int sig);
     264              : #endif
     265            0 : int sigpending(sigset_t *set);
     266            0 : int sigprocmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
     267              : #if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
     268            0 : int sigqueue(pid_t pid, int sig, union sigval value);
     269              : #endif
     270              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     271            0 : int sigrelse(int sig);
     272            0 : sighandler_t sigset(int sig, sighandler_t disp);
     273              : #endif
     274            0 : int sigsuspend(const sigset_t *set);
     275              : #if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
     276            0 : int sigtimedwait(const sigset_t *ZRESTRICT set, siginfo_t *ZRESTRICT info,
     277              :                  const struct timespec *ZRESTRICT timeout);
     278              : #endif
     279            0 : int sigwait(const sigset_t *ZRESTRICT set, int *ZRESTRICT sig);
     280              : #if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
     281            0 : int sigwaitinfo(const sigset_t *ZRESTRICT set, siginfo_t *ZRESTRICT info);
     282              : #endif
     283              : 
     284              : /* Note: only ANSI / ISO C signals are guarded below */
     285              : 
     286            1 : #define SIGHUP 1 /**< Hangup */
     287              : #if !defined(SIGINT) || defined(__DOXYGEN__)
     288            1 : #define SIGINT 2 /**< Interrupt */
     289              : #endif
     290            1 : #define SIGQUIT 3 /**< Quit */
     291              : #if !defined(SIGILL) || defined(__DOXYGEN__)
     292            1 : #define SIGILL 4 /**< Illegal instruction */
     293              : #endif
     294            1 : #define SIGTRAP 5 /**< Trace/breakpoint trap */
     295              : #if !defined(SIGABRT) || defined(__DOXYGEN__)
     296            1 : #define SIGABRT 6 /**< Aborted */
     297              : #endif
     298            1 : #define SIGBUS 7 /**< Bus error */
     299              : #if !defined(SIGFPE) || defined(__DOXYGEN__)
     300            1 : #define SIGFPE 8 /**< Arithmetic exception */
     301              : #endif
     302            1 : #define SIGKILL 9  /**< Killed */
     303            1 : #define SIGUSR1 10 /**< User-defined signal 1 */
     304              : #if !defined(SIGSEGV) || defined(__DOXYGEN__)
     305            1 : #define SIGSEGV 11 /**< Invalid memory reference */
     306              : #endif
     307            1 : #define SIGUSR2 12 /**< User-defined signal 2 */
     308            1 : #define SIGPIPE 13 /**< Broken pipe */
     309            1 : #define SIGALRM 14 /**< Alarm clock */
     310              : #if !defined(SIGTERM) || defined(__DOXYGEN__)
     311            1 : #define SIGTERM 15 /**< Terminated */
     312              : #endif
     313              : /* 16 not used */
     314            1 : #define SIGCHLD   17 /**< Child status changed */
     315            1 : #define SIGCONT   18 /**< Continued */
     316            1 : #define SIGSTOP   19 /**< Stop executing */
     317            1 : #define SIGTSTP   20 /**< Stopped */
     318            1 : #define SIGTTIN   21 /**< Stopped (read) */
     319            1 : #define SIGTTOU   22 /**< Stopped (write) */
     320            1 : #define SIGURG    23 /**< Urgent I/O condition */
     321            1 : #define SIGXCPU   24 /**< CPU time limit exceeded */
     322            1 : #define SIGXFSZ   25 /**< File size limit exceeded */
     323            1 : #define SIGVTALRM 26 /**< Virtual timer expired */
     324            1 : #define SIGPROF   27 /**< Profiling timer expired */
     325              : /* 28 not used */
     326            1 : #define SIGPOLL   29 /**< Pollable event occurred */
     327              : /* 30 not used */
     328            1 : #define SIGSYS    31 /**< Bad system call */
     329              : 
     330              : #if defined(_POSIX_REALTIME_SIGNALS) || defined(__DOXYGEN__)
     331              : 
     332              : /* SIGILL */
     333            1 : #define ILL_ILLOPC 1 /**< Illegal opcode */
     334            1 : #define ILL_ILLOPN 2 /**< Illegal operand */
     335            1 : #define ILL_ILLADR 3 /**< Illegal addressing mode */
     336            1 : #define ILL_ILLTRP 4 /**< Illegal trap */
     337            1 : #define ILL_PRVOPC 5 /**< Privileged opcode */
     338            1 : #define ILL_PRVREG 6 /**< Privileged register */
     339            1 : #define ILL_COPROC 7 /**< Coprocessor error */
     340            1 : #define ILL_BADSTK 8 /**< Internal stack error */
     341              : 
     342              : /* SIGFPE */
     343            1 : #define FPE_INTDIV 9  /**< Integer divide by zero */
     344            1 : #define FPE_INTOVF 10 /**< Integer overflow */
     345            1 : #define FPE_FLTDIV 11 /**< Floating-point divide by zero */
     346            1 : #define FPE_FLTOVF 12 /**< Floating-point overflow */
     347            1 : #define FPE_FLTUND 13 /**< Floating-point underflow */
     348            1 : #define FPE_FLTRES 15 /**< Floating-point inexact result */
     349            1 : #define FPE_FLTINV 16 /**< Invalid floating-point operation */
     350            1 : #define FPE_FLTSUB 17 /**< Subscript out of range */
     351              : 
     352              : /* SIGSEGV */
     353            1 : #define SEGV_MAPERR 18 /**< Address not mapped to object */
     354            1 : #define SEGV_ACCERR 19 /**< Invalid permissions for mapped object */
     355              : 
     356              : /* SIGBUS */
     357            1 : #define BUS_ADRALN 20 /**< Invalid address alignment */
     358            1 : #define BUS_ADRERR 21 /**< Nonexistent physical address */
     359            1 : #define BUS_OBJERR 22 /**< Object-specific hardware error */
     360              : 
     361              : #if defined(_XOPEN_SOURCE) || defined(__DOXYGEN__)
     362              : /* SIGTRAP */
     363            1 : #define TRAP_BRKPT 23 /**< Process breakpoint */
     364            1 : #define TRAP_TRACE 24 /**< Process trace trap */
     365              : #endif
     366              : 
     367              : /* SIGCHLD */
     368            1 : #define CLD_EXITED    25 /**< Child has exited */
     369            1 : #define CLD_KILLED    26 /**< Child has terminated abnormally and did not create a core file */
     370            1 : #define CLD_DUMPED    27 /**< Child has terminated abnormally and created a core file */
     371            1 : #define CLD_TRAPPED   28 /**< Traced child has trapped */
     372            1 : #define CLD_STOPPED   29 /**< Child has stopped */
     373            1 : #define CLD_CONTINUED 30 /**< Stopped child has continued */
     374              : 
     375              : #if defined(_XOPEN_STREAMS) || defined(__DOXYGEN__)
     376              : /* SIGPOLL */
     377            1 : #define POLL_IN  31 /**< Data input available */
     378            1 : #define POLL_OUT 32 /**< Output buffers available */
     379            1 : #define POLL_MSG 33 /**< Input message available */
     380            1 : #define POLL_ERR 34 /**< I/O error */
     381            1 : #define POLL_PRI 35 /**< High priority input available */
     382            1 : #define POLL_HUP 36 /**< Device disconnected */
     383              : #endif
     384              : 
     385              : /* Any */
     386            1 : #define SI_USER    37 /**< Signal sent by kill() */
     387            1 : #define SI_QUEUE   38 /**< Signal sent by sigqueue() */
     388            1 : #define SI_TIMER   39 /**< Signal generated by expiration of a timer set by timer_settime() */
     389            1 : #define SI_ASYNCIO 40 /**< Signal generated by completion of an asynchronous I/O request */
     390            1 : #define SI_MESGQ   41 /**< Signal generated by arrival of a message on an empty message queue */
     391              : 
     392              : #endif
     393              : 
     394              : #ifdef __cplusplus
     395              : }
     396              : #endif
     397              : 
     398              : #endif /* defined(_POSIX_C_SOURCE) || defined(__DOXYGEN__) */
     399              : 
     400              : #endif /* ZEPHYR_INCLUDE_POSIX_POSIX_SIGNAL_H_ */
        

Generated by: LCOV version 2.0-1