xref: /llvm-project/lldb/source/Plugins/Process/Utility/LinuxSignals.cpp (revision 0107513fe79da7670e37c29c0862794a2213a89c)
1 //===-- LinuxSignals.cpp --------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "LinuxSignals.h"
10 
11 using namespace lldb_private;
12 
13 LinuxSignals::LinuxSignals() : UnixSignals() { Reset(); }
14 
15 void LinuxSignals::Reset() {
16   m_signals.clear();
17   // clang-format off
18   //        SIGNO   NAME            SUPPRESS  STOP    NOTIFY  DESCRIPTION
19   //        ======  ==============  ========  ======  ======  ===================================================
20   AddSignal(1,      "SIGHUP",       false,    true,   true,   "hangup");
21   AddSignal(2,      "SIGINT",       true,     true,   true,   "interrupt");
22   AddSignal(3,      "SIGQUIT",      false,    true,   true,   "quit");
23 
24   AddSignal(4,      "SIGILL",       false,    true,   true,   "illegal instruction");
25   AddSignalCode(4, 1 /*ILL_ILLOPC*/, "illegal opcode");
26   AddSignalCode(4, 2 /*ILL_ILLOPN*/, "illegal operand");
27   AddSignalCode(4, 3 /*ILL_ILLADR*/, "illegal addressing mode");
28   AddSignalCode(4, 4 /*ILL_ILLTRP*/, "illegal trap");
29   AddSignalCode(4, 5 /*ILL_PRVOPC*/, "privileged opcode");
30   AddSignalCode(4, 6 /*ILL_PRVREG*/, "privileged register");
31   AddSignalCode(4, 7 /*ILL_COPROC*/, "coprocessor error");
32   AddSignalCode(4, 8 /*ILL_BADSTK*/, "internal stack error");
33 
34   AddSignal(5,      "SIGTRAP",      true,     true,   true,   "trace trap (not reset when caught)");
35   AddSignal(6,      "SIGABRT",      false,    true,   true,   "abort()/IOT trap", "SIGIOT");
36 
37   AddSignal(7,      "SIGBUS",       false,    true,   true,   "bus error");
38   AddSignalCode(7, 1 /*BUS_ADRALN*/, "illegal alignment");
39   AddSignalCode(7, 2 /*BUS_ADRERR*/, "illegal address");
40   AddSignalCode(7, 3 /*BUS_OBJERR*/, "hardware error");
41 
42   AddSignal(8,      "SIGFPE",       false,    true,   true,   "floating point exception");
43   AddSignalCode(8, 1 /*FPE_INTDIV*/, "integer divide by zero");
44   AddSignalCode(8, 2 /*FPE_INTOVF*/, "integer overflow");
45   AddSignalCode(8, 3 /*FPE_FLTDIV*/, "floating point divide by zero");
46   AddSignalCode(8, 4 /*FPE_FLTOVF*/, "floating point overflow");
47   AddSignalCode(8, 5 /*FPE_FLTUND*/, "floating point underflow");
48   AddSignalCode(8, 6 /*FPE_FLTRES*/, "floating point inexact result");
49   AddSignalCode(8, 7 /*FPE_FLTINV*/, "floating point invalid operation");
50   AddSignalCode(8, 8 /*FPE_FLTSUB*/, "subscript out of range");
51 
52   AddSignal(9,      "SIGKILL",      false,    true,   true,   "kill");
53   AddSignal(10,     "SIGUSR1",      false,    true,   true,   "user defined signal 1");
54 
55   AddSignal(11,     "SIGSEGV",      false,    true,   true,   "segmentation violation");
56   AddSignalCode(11, 1 /*SEGV_MAPERR*/, "address not mapped to object", SignalCodePrintOption::Address);
57   AddSignalCode(11, 2 /*SEGV_ACCERR*/, "invalid permissions for mapped object", SignalCodePrintOption::Address);
58   AddSignalCode(11, 3 /*SEGV_BNDERR*/, "failed address bounds checks", SignalCodePrintOption::Bounds);
59   AddSignalCode(11, 8 /*SEGV_MTEAERR*/, "async tag check fault");
60   AddSignalCode(11, 9 /*SEGV_MTESERR*/, "sync tag check fault", SignalCodePrintOption::Address);
61   // Some platforms will occasionally send nonstandard spurious SI_KERNEL
62   // codes. One way to get this is via unaligned SIMD loads. Treat it as invalid address.
63   AddSignalCode(11, 0x80 /*SI_KERNEL*/, "invalid address", SignalCodePrintOption::Address);
64 
65   AddSignal(12,     "SIGUSR2",      false,    true,   true,   "user defined signal 2");
66   AddSignal(13,     "SIGPIPE",      false,    true,   true,   "write to pipe with reading end closed");
67   AddSignal(14,     "SIGALRM",      false,    false,  false,  "alarm");
68   AddSignal(15,     "SIGTERM",      false,    true,   true,   "termination requested");
69   AddSignal(16,     "SIGSTKFLT",    false,    true,   true,   "stack fault");
70   AddSignal(17,     "SIGCHLD",      false,    false,  true,   "child status has changed", "SIGCLD");
71   AddSignal(18,     "SIGCONT",      false,    false,  true,   "process continue");
72   AddSignal(19,     "SIGSTOP",      true,     true,   true,   "process stop");
73   AddSignal(20,     "SIGTSTP",      false,    true,   true,   "tty stop");
74   AddSignal(21,     "SIGTTIN",      false,    true,   true,   "background tty read");
75   AddSignal(22,     "SIGTTOU",      false,    true,   true,   "background tty write");
76   AddSignal(23,     "SIGURG",       false,    true,   true,   "urgent data on socket");
77   AddSignal(24,     "SIGXCPU",      false,    true,   true,   "CPU resource exceeded");
78   AddSignal(25,     "SIGXFSZ",      false,    true,   true,   "file size limit exceeded");
79   AddSignal(26,     "SIGVTALRM",    false,    true,   true,   "virtual time alarm");
80   AddSignal(27,     "SIGPROF",      false,    false,  false,  "profiling time alarm");
81   AddSignal(28,     "SIGWINCH",     false,    true,   true,   "window size changes");
82   AddSignal(29,     "SIGIO",        false,    true,   true,   "input/output ready/Pollable event", "SIGPOLL");
83   AddSignal(30,     "SIGPWR",       false,    true,   true,   "power failure");
84   AddSignal(31,     "SIGSYS",       false,    true,   true,   "invalid system call");
85   AddSignal(32,     "SIG32",        false,    false,  false,  "threading library internal signal 1");
86   AddSignal(33,     "SIG33",        false,    false,  false,  "threading library internal signal 2");
87   AddSignal(34,     "SIGRTMIN",     false,    false,  false,  "real time signal 0");
88   AddSignal(35,     "SIGRTMIN+1",   false,    false,  false,  "real time signal 1");
89   AddSignal(36,     "SIGRTMIN+2",   false,    false,  false,  "real time signal 2");
90   AddSignal(37,     "SIGRTMIN+3",   false,    false,  false,  "real time signal 3");
91   AddSignal(38,     "SIGRTMIN+4",   false,    false,  false,  "real time signal 4");
92   AddSignal(39,     "SIGRTMIN+5",   false,    false,  false,  "real time signal 5");
93   AddSignal(40,     "SIGRTMIN+6",   false,    false,  false,  "real time signal 6");
94   AddSignal(41,     "SIGRTMIN+7",   false,    false,  false,  "real time signal 7");
95   AddSignal(42,     "SIGRTMIN+8",   false,    false,  false,  "real time signal 8");
96   AddSignal(43,     "SIGRTMIN+9",   false,    false,  false,  "real time signal 9");
97   AddSignal(44,     "SIGRTMIN+10",  false,    false,  false,  "real time signal 10");
98   AddSignal(45,     "SIGRTMIN+11",  false,    false,  false,  "real time signal 11");
99   AddSignal(46,     "SIGRTMIN+12",  false,    false,  false,  "real time signal 12");
100   AddSignal(47,     "SIGRTMIN+13",  false,    false,  false,  "real time signal 13");
101   AddSignal(48,     "SIGRTMIN+14",  false,    false,  false,  "real time signal 14");
102   AddSignal(49,     "SIGRTMIN+15",  false,    false,  false,  "real time signal 15");
103   AddSignal(50,     "SIGRTMAX-14",  false,    false,  false,  "real time signal 16"); // switching to SIGRTMAX-xxx to match "kill -l" output
104   AddSignal(51,     "SIGRTMAX-13",  false,    false,  false,  "real time signal 17");
105   AddSignal(52,     "SIGRTMAX-12",  false,    false,  false,  "real time signal 18");
106   AddSignal(53,     "SIGRTMAX-11",  false,    false,  false,  "real time signal 19");
107   AddSignal(54,     "SIGRTMAX-10",  false,    false,  false,  "real time signal 20");
108   AddSignal(55,     "SIGRTMAX-9",   false,    false,  false,  "real time signal 21");
109   AddSignal(56,     "SIGRTMAX-8",   false,    false,  false,  "real time signal 22");
110   AddSignal(57,     "SIGRTMAX-7",   false,    false,  false,  "real time signal 23");
111   AddSignal(58,     "SIGRTMAX-6",   false,    false,  false,  "real time signal 24");
112   AddSignal(59,     "SIGRTMAX-5",   false,    false,  false,  "real time signal 25");
113   AddSignal(60,     "SIGRTMAX-4",   false,    false,  false,  "real time signal 26");
114   AddSignal(61,     "SIGRTMAX-3",   false,    false,  false,  "real time signal 27");
115   AddSignal(62,     "SIGRTMAX-2",   false,    false,  false,  "real time signal 28");
116   AddSignal(63,     "SIGRTMAX-1",   false,    false,  false,  "real time signal 29");
117   AddSignal(64,     "SIGRTMAX",     false,    false,  false,  "real time signal 30");
118   // clang-format on
119 }
120