LCOV - code coverage report
Current view: top level - zephyr/posix - posix_signal.h Coverage Total Hit
Test: new.info Lines: 41.0 % 166 68
Test Date: 2025-10-20 12:20:01

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

Generated by: LCOV version 2.0-1