xref: /freebsd/contrib/llvm-project/libc/include/llvm-libc-macros/linux/signal-macros.h (revision bb722a7d0f1642bff6487f943ad0427799a6e5bf)
1*bb722a7dSDimitry Andric //===-- Definition of Linux signal number macros --------------------------===//
2*bb722a7dSDimitry Andric //
3*bb722a7dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*bb722a7dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*bb722a7dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*bb722a7dSDimitry Andric //
7*bb722a7dSDimitry Andric //===----------------------------------------------------------------------===//
8*bb722a7dSDimitry Andric 
9*bb722a7dSDimitry Andric #ifndef LLVM_LIBC_MACROS_LINUX_SIGNAL_MACROS_H
10*bb722a7dSDimitry Andric #define LLVM_LIBC_MACROS_LINUX_SIGNAL_MACROS_H
11*bb722a7dSDimitry Andric 
12*bb722a7dSDimitry Andric #define SIGHUP 1
13*bb722a7dSDimitry Andric #define SIGINT 2
14*bb722a7dSDimitry Andric #define SIGQUIT 3
15*bb722a7dSDimitry Andric #define SIGILL 4
16*bb722a7dSDimitry Andric #define SIGTRAP 5
17*bb722a7dSDimitry Andric #define SIGABRT 6
18*bb722a7dSDimitry Andric #define SIGIOT 6
19*bb722a7dSDimitry Andric #define SIGBUS 7
20*bb722a7dSDimitry Andric #define SIGFPE 8
21*bb722a7dSDimitry Andric #define SIGKILL 9
22*bb722a7dSDimitry Andric #define SIGUSR1 10
23*bb722a7dSDimitry Andric #define SIGSEGV 11
24*bb722a7dSDimitry Andric #define SIGUSR2 12
25*bb722a7dSDimitry Andric #define SIGPIPE 13
26*bb722a7dSDimitry Andric #define SIGALRM 14
27*bb722a7dSDimitry Andric #define SIGTERM 15
28*bb722a7dSDimitry Andric #define SIGSTKFLT 16
29*bb722a7dSDimitry Andric #define SIGCHLD 17
30*bb722a7dSDimitry Andric #define SIGCONT 18
31*bb722a7dSDimitry Andric #define SIGSTOP 19
32*bb722a7dSDimitry Andric #define SIGTSTP 20
33*bb722a7dSDimitry Andric #define SIGTTIN 21
34*bb722a7dSDimitry Andric #define SIGTTOU 22
35*bb722a7dSDimitry Andric #define SIGURG 23
36*bb722a7dSDimitry Andric #define SIGXCPU 24
37*bb722a7dSDimitry Andric #define SIGXFSZ 25
38*bb722a7dSDimitry Andric #define SIGVTALRM 26
39*bb722a7dSDimitry Andric #define SIGPROF 27
40*bb722a7dSDimitry Andric #define SIGWINCH 28
41*bb722a7dSDimitry Andric #define SIGIO 29
42*bb722a7dSDimitry Andric #define SIGPOLL SIGIO
43*bb722a7dSDimitry Andric #define SIGPWR 30
44*bb722a7dSDimitry Andric #define SIGSYS 31
45*bb722a7dSDimitry Andric 
46*bb722a7dSDimitry Andric // Max signal number
47*bb722a7dSDimitry Andric #define NSIG 64
48*bb722a7dSDimitry Andric 
49*bb722a7dSDimitry Andric // SIGRTMIN is current set to the minimum usable from user mode programs. If
50*bb722a7dSDimitry Andric // the libc itself uses some of these signal numbers for private operations,
51*bb722a7dSDimitry Andric // then it has to be adjusted in future to reflect that.
52*bb722a7dSDimitry Andric #define SIGRTMIN 32
53*bb722a7dSDimitry Andric 
54*bb722a7dSDimitry Andric #define SIGRTMAX NSIG
55*bb722a7dSDimitry Andric 
56*bb722a7dSDimitry Andric // The kernel sigset is stored as an array of long values. Each bit of this
57*bb722a7dSDimitry Andric // array corresponds to a signal, adjusted by 1. That is, bit 0 corresponds
58*bb722a7dSDimitry Andric // to signal number 1, bit 1 corresponds to signal number 2 and so on. The
59*bb722a7dSDimitry Andric // below macro denotes the size of that array (in number of long words and
60*bb722a7dSDimitry Andric // not bytes).
61*bb722a7dSDimitry Andric #define __NSIGSET_WORDS (NSIG / (sizeof(unsigned long) * 8))
62*bb722a7dSDimitry Andric 
63*bb722a7dSDimitry Andric #define SIG_BLOCK 0   // For blocking signals
64*bb722a7dSDimitry Andric #define SIG_UNBLOCK 1 // For unblocking signals
65*bb722a7dSDimitry Andric #define SIG_SETMASK 2 // For setting signal mask
66*bb722a7dSDimitry Andric 
67*bb722a7dSDimitry Andric // Flag values to be used for setting sigaction.sa_flags.
68*bb722a7dSDimitry Andric #define SA_NOCLDSTOP 0x00000001
69*bb722a7dSDimitry Andric #define SA_NOCLDWAIT 0x00000002
70*bb722a7dSDimitry Andric #define SA_SIGINFO 0x00000004
71*bb722a7dSDimitry Andric #define SA_RESTART 0x10000000
72*bb722a7dSDimitry Andric #define SA_RESTORER 0x04000000
73*bb722a7dSDimitry Andric #define SA_ONSTACK 0x08000000
74*bb722a7dSDimitry Andric 
75*bb722a7dSDimitry Andric // Signal stack flags
76*bb722a7dSDimitry Andric #define SS_ONSTACK 0x1
77*bb722a7dSDimitry Andric #define SS_DISABLE 0x2
78*bb722a7dSDimitry Andric 
79*bb722a7dSDimitry Andric #if defined(__x86_64__) || defined(__i386__) || defined(__riscv)
80*bb722a7dSDimitry Andric #define MINSIGSTKSZ 2048
81*bb722a7dSDimitry Andric #define SIGSTKSZ 8192
82*bb722a7dSDimitry Andric #elif defined(__aarch64__)
83*bb722a7dSDimitry Andric #define MINSIGSTKSZ 5120
84*bb722a7dSDimitry Andric #define SIGSTKSZ 16384
85*bb722a7dSDimitry Andric #else
86*bb722a7dSDimitry Andric #error "Signal stack sizes not defined for your platform."
87*bb722a7dSDimitry Andric #endif
88*bb722a7dSDimitry Andric 
89*bb722a7dSDimitry Andric #define SIG_DFL ((void (*)(int))0)
90*bb722a7dSDimitry Andric #define SIG_IGN ((void (*)(int))1)
91*bb722a7dSDimitry Andric #define SIG_ERR ((void (*)(int))(-1))
92*bb722a7dSDimitry Andric 
93*bb722a7dSDimitry Andric // SIGCHLD si_codes
94*bb722a7dSDimitry Andric #define CLD_EXITED 1    // child has exited
95*bb722a7dSDimitry Andric #define CLD_KILLED 2    // child was killed
96*bb722a7dSDimitry Andric #define CLD_DUMPED 3    // child terminated abnormally
97*bb722a7dSDimitry Andric #define CLD_TRAPPED 4   // traced child has trapped
98*bb722a7dSDimitry Andric #define CLD_STOPPED 5   // child has stopped
99*bb722a7dSDimitry Andric #define CLD_CONTINUED 6 // stopped child has continued
100*bb722a7dSDimitry Andric 
101*bb722a7dSDimitry Andric #endif // LLVM_LIBC_MACROS_LINUX_SIGNAL_MACROS_H
102