Add real time signals support to LinuxSignals

Summary: This enables correct handling of real time signals by lldb.

Test Plan: Added a test that verifies handling of SIGRTMIN

Reviewers: tberghammer, ovyalov

Subscribers: lldb-commits

Differential Revision: http://reviews.llvm.org/D9911

llvm-svn: 238009
diff --git a/lldb/source/Plugins/Process/Utility/LinuxSignals.cpp b/lldb/source/Plugins/Process/Utility/LinuxSignals.cpp
index 3be122b..0680d26 100644
--- a/lldb/source/Plugins/Process/Utility/LinuxSignals.cpp
+++ b/lldb/source/Plugins/Process/Utility/LinuxSignals.cpp
@@ -25,38 +25,71 @@
 {
     m_signals.clear();
 
-    AddSignal (1,    "SIGHUP",    "HUP",     false,   true , true , "hangup");
-    AddSignal (2,    "SIGINT",    "INT",     true ,   true , true , "interrupt");
-    AddSignal (3,    "SIGQUIT",   "QUIT",    false,   true , true , "quit");
-    AddSignal (4,    "SIGILL",    "ILL",     false,   true , true , "illegal instruction");
-    AddSignal (5,    "SIGTRAP",   "TRAP",    true ,   true , true , "trace trap (not reset when caught)");
-    AddSignal (6,    "SIGABRT",   "ABRT",    false,   true , true , "abort()");
-    AddSignal (6,    "SIGIOT",    "IOT",     false,   true , true , "IOT trap");
-    AddSignal (7,    "SIGBUS",    "BUS",     false,   true , true , "bus error");
-    AddSignal (8,    "SIGFPE",    "FPE",     false,   true , true , "floating point exception");
-    AddSignal (9,    "SIGKILL",   "KILL",    false,   true , true , "kill");
-    AddSignal (10,   "SIGUSR1",   "USR1",    false,   true , true , "user defined signal 1");
-    AddSignal (11,   "SIGSEGV",   "SEGV",    false,   true , true , "segmentation violation");
-    AddSignal (12,   "SIGUSR2",   "USR2",    false,   true , true , "user defined signal 2");
-    AddSignal (13,   "SIGPIPE",   "PIPE",    false,   true , true , "write to pipe with reading end closed");
-    AddSignal (14,   "SIGALRM",   "ALRM",    false,   false, false, "alarm");
-    AddSignal (15,   "SIGTERM",   "TERM",    false,   true , true , "termination requested");
-    AddSignal (16,   "SIGSTKFLT", "STKFLT",  false,   true , true , "stack fault");
-    AddSignal (16,   "SIGCLD",    "CLD",     false,   false, true , "same as SIGCHLD");
-    AddSignal (17,   "SIGCHLD",   "CHLD",    false,   false, true , "child status has changed");
-    AddSignal (18,   "SIGCONT",   "CONT",    false,   true , true , "process continue");
-    AddSignal (19,   "SIGSTOP",   "STOP",    true ,   true , true , "process stop");
-    AddSignal (20,   "SIGTSTP",   "TSTP",    false,   true , true , "tty stop");
-    AddSignal (21,   "SIGTTIN",   "TTIN",    false,   true , true , "background tty read");
-    AddSignal (22,   "SIGTTOU",   "TTOU",    false,   true , true , "background tty write");
-    AddSignal (23,   "SIGURG",    "URG",     false,   true , true , "urgent data on socket");
-    AddSignal (24,   "SIGXCPU",   "XCPU",    false,   true , true , "CPU resource exceeded");
-    AddSignal (25,   "SIGXFSZ",   "XFSZ",    false,   true , true , "file size limit exceeded");
-    AddSignal (26,   "SIGVTALRM", "VTALRM",  false,   true , true , "virtual time alarm");
-    AddSignal (27,   "SIGPROF",   "PROF",    false,   false, false, "profiling time alarm");
-    AddSignal (28,   "SIGWINCH",  "WINCH",   false,   true , true , "window size changes");
-    AddSignal (29,   "SIGPOLL",   "POLL",    false,   true , true , "pollable event");
-    AddSignal (29,   "SIGIO",     "IO",      false,   true , true , "input/output ready");
-    AddSignal (30,   "SIGPWR",    "PWR",     false,   true , true , "power failure");
-    AddSignal (31,   "SIGSYS",    "SYS",     false,   true , true , "invalid system call");
+    AddSignal (1,    "SIGHUP",      "HUP",      false,   true , true , "hangup");
+    AddSignal (2,    "SIGINT",      "INT",      true ,   true , true , "interrupt");
+    AddSignal (3,    "SIGQUIT",     "QUIT",     false,   true , true , "quit");
+    AddSignal (4,    "SIGILL",      "ILL",      false,   true , true , "illegal instruction");
+    AddSignal (5,    "SIGTRAP",     "TRAP",     true ,   true , true , "trace trap (not reset when caught)");
+    AddSignal (6,    "SIGABRT",     "ABRT",     false,   true , true , "abort()");
+    AddSignal (6,    "SIGIOT",      "IOT",      false,   true , true , "IOT trap");
+    AddSignal (7,    "SIGBUS",      "BUS",      false,   true , true , "bus error");
+    AddSignal (8,    "SIGFPE",      "FPE",      false,   true , true , "floating point exception");
+    AddSignal (9,    "SIGKILL",     "KILL",     false,   true , true , "kill");
+    AddSignal (10,   "SIGUSR1",     "USR1",     false,   true , true , "user defined signal 1");
+    AddSignal (11,   "SIGSEGV",     "SEGV",     false,   true , true , "segmentation violation");
+    AddSignal (12,   "SIGUSR2",     "USR2",     false,   true , true , "user defined signal 2");
+    AddSignal (13,   "SIGPIPE",     "PIPE",     false,   true , true , "write to pipe with reading end closed");
+    AddSignal (14,   "SIGALRM",     "ALRM",     false,   false, false, "alarm");
+    AddSignal (15,   "SIGTERM",     "TERM",     false,   true , true , "termination requested");
+    AddSignal (16,   "SIGSTKFLT",   "STKFLT",   false,   true , true , "stack fault");
+    AddSignal (16,   "SIGCLD",      "CLD",      false,   false, true , "same as SIGCHLD");
+    AddSignal (17,   "SIGCHLD",     "CHLD",     false,   false, true , "child status has changed");
+    AddSignal (18,   "SIGCONT",     "CONT",     false,   true , true , "process continue");
+    AddSignal (19,   "SIGSTOP",     "STOP",     true ,   true , true , "process stop");
+    AddSignal (20,   "SIGTSTP",     "TSTP",     false,   true , true , "tty stop");
+    AddSignal (21,   "SIGTTIN",     "TTIN",     false,   true , true , "background tty read");
+    AddSignal (22,   "SIGTTOU",     "TTOU",     false,   true , true , "background tty write");
+    AddSignal (23,   "SIGURG",      "URG",      false,   true , true , "urgent data on socket");
+    AddSignal (24,   "SIGXCPU",     "XCPU",     false,   true , true , "CPU resource exceeded");
+    AddSignal (25,   "SIGXFSZ",     "XFSZ",     false,   true , true , "file size limit exceeded");
+    AddSignal (26,   "SIGVTALRM",   "VTALRM",   false,   true , true , "virtual time alarm");
+    AddSignal (27,   "SIGPROF",     "PROF",     false,   false, false, "profiling time alarm");
+    AddSignal (28,   "SIGWINCH",    "WINCH",    false,   true , true , "window size changes");
+    AddSignal (29,   "SIGPOLL",     "POLL",     false,   true , true , "pollable event");
+    AddSignal (29,   "SIGIO",       "IO",       false,   true , true , "input/output ready");
+    AddSignal (30,   "SIGPWR",      "PWR",      false,   true , true , "power failure");
+    AddSignal (31,   "SIGSYS",      "SYS",      false,   true , true , "invalid system call");
+    AddSignal (32,   "SIG32",       "SIG32",    false,   true , true , "threading library internal signal 1");
+    AddSignal (33,   "SIG33",       "SIG33",    false,   true , true , "threading library internal signal 2");
+    AddSignal (34,   "SIGRTMIN",    "RTMIN",    false,   true , true , "real time signal 0");
+    AddSignal (35,   "SIGRTMIN+1",  "RTMIN+1",  false,   true , true , "real time signal 1");
+    AddSignal (36,   "SIGRTMIN+2",  "RTMIN+2",  false,   true , true , "real time signal 2");
+    AddSignal (37,   "SIGRTMIN+3",  "RTMIN+3",  false,   true , true , "real time signal 3");
+    AddSignal (38,   "SIGRTMIN+4",  "RTMIN+4",  false,   true , true , "real time signal 4");
+    AddSignal (39,   "SIGRTMIN+5",  "RTMIN+5",  false,   true , true , "real time signal 5");
+    AddSignal (40,   "SIGRTMIN+6",  "RTMIN+6",  false,   true , true , "real time signal 6");
+    AddSignal (41,   "SIGRTMIN+7",  "RTMIN+7",  false,   true , true , "real time signal 7");
+    AddSignal (42,   "SIGRTMIN+8",  "RTMIN+8",  false,   true , true , "real time signal 8");
+    AddSignal (43,   "SIGRTMIN+9",  "RTMIN+9",  false,   true , true , "real time signal 9");
+    AddSignal (44,   "SIGRTMIN+10", "RTMIN+10", false,   true , true , "real time signal 10");
+    AddSignal (45,   "SIGRTMIN+11", "RTMIN+11", false,   true , true , "real time signal 11");
+    AddSignal (46,   "SIGRTMIN+12", "RTMIN+12", false,   true , true , "real time signal 12");
+    AddSignal (47,   "SIGRTMIN+13", "RTMIN+13", false,   true , true , "real time signal 13");
+    AddSignal (48,   "SIGRTMIN+14", "RTMIN+14", false,   true , true , "real time signal 14");
+    AddSignal (49,   "SIGRTMIN+15", "RTMIN+15", false,   true , true , "real time signal 15");
+    AddSignal (50,   "SIGRTMAX-14", "RTMAX-14", false,   true , true , "real time signal 16"); // switching to SIGRTMAX-xxx to match "kill -l" output
+    AddSignal (51,   "SIGRTMAX-13", "RTMAX-13", false,   true , true , "real time signal 17");
+    AddSignal (52,   "SIGRTMAX-12", "RTMAX-12", false,   true , true , "real time signal 18");
+    AddSignal (53,   "SIGRTMAX-11", "RTMAX-11", false,   true , true , "real time signal 19");
+    AddSignal (54,   "SIGRTMAX-10", "RTMAX-10", false,   true , true , "real time signal 20");
+    AddSignal (55,   "SIGRTMAX-9",  "RTMAX-9",  false,   true , true , "real time signal 21");
+    AddSignal (56,   "SIGRTMAX-8",  "RTMAX-8",  false,   true , true , "real time signal 22");
+    AddSignal (57,   "SIGRTMAX-7",  "RTMAX-7",  false,   true , true , "real time signal 23");
+    AddSignal (58,   "SIGRTMAX-6",  "RTMAX-6",  false,   true , true , "real time signal 24");
+    AddSignal (59,   "SIGRTMAX-5",  "RTMAX-5",  false,   true , true , "real time signal 25");
+    AddSignal (60,   "SIGRTMAX-4",  "RTMAX-4",  false,   true , true , "real time signal 26");
+    AddSignal (61,   "SIGRTMAX-3",  "RTMAX-3",  false,   true , true , "real time signal 27");
+    AddSignal (62,   "SIGRTMAX-2",  "RTMAX-2",  false,   true , true , "real time signal 28");
+    AddSignal (63,   "SIGRTMAX-1",  "RTMAX-1",  false,   true , true , "real time signal 29");
+    AddSignal (64,   "SIGRTMAX",    "RTMAX",    false,   true , true , "real time signal 30");
 }
diff --git a/lldb/source/Plugins/Process/Utility/MipsLinuxSignals.cpp b/lldb/source/Plugins/Process/Utility/MipsLinuxSignals.cpp
index 238e8f9..e4e6546 100644
--- a/lldb/source/Plugins/Process/Utility/MipsLinuxSignals.cpp
+++ b/lldb/source/Plugins/Process/Utility/MipsLinuxSignals.cpp
@@ -25,38 +25,71 @@
 {
     m_signals.clear();
 
-    AddSignal (1,    "SIGHUP",    "HUP",     false,   true , true , "hangup");
-    AddSignal (2,    "SIGINT",    "INT",     true ,   true , true , "interrupt");
-    AddSignal (3,    "SIGQUIT",   "QUIT",    false,   true , true , "quit");
-    AddSignal (4,    "SIGILL",    "ILL",     false,   true , true , "illegal instruction");
-    AddSignal (5,    "SIGTRAP",   "TRAP",    true ,   true , true , "trace trap (not reset when caught)");
-    AddSignal (6,    "SIGABRT",   "ABRT",    false,   true , true , "abort()");
-    AddSignal (6,    "SIGIOT",    "IOT",     false,   true , true , "IOT trap");
-    AddSignal (7,    "SIGEMT",    "EMT",     false,   true , true , "terminate process with core dump");
-    AddSignal (8,    "SIGFPE",    "FPE",     false,   true , true , "floating point exception");
-    AddSignal (9,    "SIGKILL",   "KILL",    false,   true , true , "kill");
-    AddSignal (10,   "SIGBUS",    "BUS",     false,   true , true , "bus error");
-    AddSignal (11,   "SIGSEGV",   "SEGV",    false,   true , true , "segmentation violation");
-    AddSignal (12,   "SIGSYS",    "SYS",     false,   true , true , "invalid system call");
-    AddSignal (13,   "SIGPIPE",   "PIPE",    false,   true , true , "write to pipe with reading end closed");
-    AddSignal (14,   "SIGALRM",   "ALRM",    false,   false, false, "alarm");
-    AddSignal (15,   "SIGTERM",   "TERM",    false,   true , true , "termination requested");
-    AddSignal (16,   "SIGUSR1",   "USR1",    false,   true , true , "user defined signal 1");
-    AddSignal (17,   "SIGUSR2",   "USR2",    false,   true , true , "user defined signal 2");
-    AddSignal (18,   "SIGCLD",    "CLD",     false,   false, true , "same as SIGCHLD");
-    AddSignal (18,   "SIGCHLD",   "CHLD",    false,   false, true , "child status has changed");
-    AddSignal (19,   "SIGPWR",    "PWR",     false,   true , true , "power failure");
-    AddSignal (20,   "SIGWINCH",  "WINCH",   false,   true , true , "window size changes");
-    AddSignal (21,   "SIGURG",    "URG",     false,   true , true , "urgent data on socket");
-    AddSignal (22,   "SIGIO",     "IO",      false,   true , true , "input/output ready");
-    AddSignal (22,   "SIGPOLL",   "POLL",    false,   true , true , "pollable event");
-    AddSignal (23,   "SIGSTOP",   "STOP",    true ,   true , true , "process stop");
-    AddSignal (24,   "SIGTSTP",   "TSTP",    false,   true , true , "tty stop");
-    AddSignal (25,   "SIGCONT",   "CONT",    false,   true , true , "process continue");
-    AddSignal (26,   "SIGTTIN",   "TTIN",    false,   true , true , "background tty read");
-    AddSignal (27,   "SIGTTOU",   "TTOU",    false,   true , true , "background tty write");
-    AddSignal (28,   "SIGVTALRM", "VTALRM",  false,   true , true , "virtual time alarm");
-    AddSignal (29,   "SIGPROF",   "PROF",    false,   false, false, "profiling time alarm");
-    AddSignal (30,   "SIGXCPU",   "XCPU",    false,   true , true , "CPU resource exceeded");
-    AddSignal (31,   "SIGXFSZ",   "XFSZ",    false,   true , true , "file size limit exceeded");
+    AddSignal (1,    "SIGHUP",      "HUP",      false,   true , true , "hangup");
+    AddSignal (2,    "SIGINT",      "INT",      true ,   true , true , "interrupt");
+    AddSignal (3,    "SIGQUIT",     "QUIT",     false,   true , true , "quit");
+    AddSignal (4,    "SIGILL",      "ILL",      false,   true , true , "illegal instruction");
+    AddSignal (5,    "SIGTRAP",     "TRAP",     true ,   true , true , "trace trap (not reset when caught)");
+    AddSignal (6,    "SIGABRT",     "ABRT",     false,   true , true , "abort()");
+    AddSignal (6,    "SIGIOT",      "IOT",      false,   true , true , "IOT trap");
+    AddSignal (7,    "SIGEMT",      "EMT",      false,   true , true , "terminate process with core dump");
+    AddSignal (8,    "SIGFPE",      "FPE",      false,   true , true , "floating point exception");
+    AddSignal (9,    "SIGKILL",     "KILL",     false,   true , true , "kill");
+    AddSignal (10,   "SIGBUS",      "BUS",      false,   true , true , "bus error");
+    AddSignal (11,   "SIGSEGV",     "SEGV",     false,   true , true , "segmentation violation");
+    AddSignal (12,   "SIGSYS",      "SYS",      false,   true , true , "invalid system call");
+    AddSignal (13,   "SIGPIPE",     "PIPE",     false,   true , true , "write to pipe with reading end closed");
+    AddSignal (14,   "SIGALRM",     "ALRM",     false,   false, false, "alarm");
+    AddSignal (15,   "SIGTERM",     "TERM",     false,   true , true , "termination requested");
+    AddSignal (16,   "SIGUSR1",     "USR1",     false,   true , true , "user defined signal 1");
+    AddSignal (17,   "SIGUSR2",     "USR2",     false,   true , true , "user defined signal 2");
+    AddSignal (18,   "SIGCLD",      "CLD",      false,   false, true , "same as SIGCHLD");
+    AddSignal (18,   "SIGCHLD",     "CHLD",     false,   false, true , "child status has changed");
+    AddSignal (19,   "SIGPWR",      "PWR",      false,   true , true , "power failure");
+    AddSignal (20,   "SIGWINCH",    "WINCH",    false,   true , true , "window size changes");
+    AddSignal (21,   "SIGURG",      "URG",      false,   true , true , "urgent data on socket");
+    AddSignal (22,   "SIGIO",       "IO",       false,   true , true , "input/output ready");
+    AddSignal (22,   "SIGPOLL",     "POLL",     false,   true , true , "pollable event");
+    AddSignal (23,   "SIGSTOP",     "STOP",     true ,   true , true , "process stop");
+    AddSignal (24,   "SIGTSTP",     "TSTP",     false,   true , true , "tty stop");
+    AddSignal (25,   "SIGCONT",     "CONT",     false,   true , true , "process continue");
+    AddSignal (26,   "SIGTTIN",     "TTIN",     false,   true , true , "background tty read");
+    AddSignal (27,   "SIGTTOU",     "TTOU",     false,   true , true , "background tty write");
+    AddSignal (28,   "SIGVTALRM",   "VTALRM",   false,   true , true , "virtual time alarm");
+    AddSignal (29,   "SIGPROF",     "PROF",     false,   false, false, "profiling time alarm");
+    AddSignal (30,   "SIGXCPU",     "XCPU",     false,   true , true , "CPU resource exceeded");
+    AddSignal (31,   "SIGXFSZ",     "XFSZ",     false,   true , true , "file size limit exceeded");
+    AddSignal (32,   "SIG32",       "SIG32",    false,   true , true , "threading library internal signal 1");
+    AddSignal (33,   "SIG33",       "SIG33",    false,   true , true , "threading library internal signal 2");
+    AddSignal (34,   "SIGRTMIN",    "RTMIN",    false,   true , true , "real time signal 0");
+    AddSignal (35,   "SIGRTMIN+1",  "RTMIN+1",  false,   true , true , "real time signal 1");
+    AddSignal (36,   "SIGRTMIN+2",  "RTMIN+2",  false,   true , true , "real time signal 2");
+    AddSignal (37,   "SIGRTMIN+3",  "RTMIN+3",  false,   true , true , "real time signal 3");
+    AddSignal (38,   "SIGRTMIN+4",  "RTMIN+4",  false,   true , true , "real time signal 4");
+    AddSignal (39,   "SIGRTMIN+5",  "RTMIN+5",  false,   true , true , "real time signal 5");
+    AddSignal (40,   "SIGRTMIN+6",  "RTMIN+6",  false,   true , true , "real time signal 6");
+    AddSignal (41,   "SIGRTMIN+7",  "RTMIN+7",  false,   true , true , "real time signal 7");
+    AddSignal (42,   "SIGRTMIN+8",  "RTMIN+8",  false,   true , true , "real time signal 8");
+    AddSignal (43,   "SIGRTMIN+9",  "RTMIN+9",  false,   true , true , "real time signal 9");
+    AddSignal (44,   "SIGRTMIN+10", "RTMIN+10", false,   true , true , "real time signal 10");
+    AddSignal (45,   "SIGRTMIN+11", "RTMIN+11", false,   true , true , "real time signal 11");
+    AddSignal (46,   "SIGRTMIN+12", "RTMIN+12", false,   true , true , "real time signal 12");
+    AddSignal (47,   "SIGRTMIN+13", "RTMIN+13", false,   true , true , "real time signal 13");
+    AddSignal (48,   "SIGRTMIN+14", "RTMIN+14", false,   true , true , "real time signal 14");
+    AddSignal (49,   "SIGRTMIN+15", "RTMIN+15", false,   true , true , "real time signal 15");
+    AddSignal (50,   "SIGRTMAX-14", "RTMAX-14", false,   true , true , "real time signal 16"); // switching to SIGRTMAX-xxx to match "kill -l" output
+    AddSignal (51,   "SIGRTMAX-13", "RTMAX-13", false,   true , true , "real time signal 17");
+    AddSignal (52,   "SIGRTMAX-12", "RTMAX-12", false,   true , true , "real time signal 18");
+    AddSignal (53,   "SIGRTMAX-11", "RTMAX-11", false,   true , true , "real time signal 19");
+    AddSignal (54,   "SIGRTMAX-10", "RTMAX-10", false,   true , true , "real time signal 20");
+    AddSignal (55,   "SIGRTMAX-9",  "RTMAX-9",  false,   true , true , "real time signal 21");
+    AddSignal (56,   "SIGRTMAX-8",  "RTMAX-8",  false,   true , true , "real time signal 22");
+    AddSignal (57,   "SIGRTMAX-7",  "RTMAX-7",  false,   true , true , "real time signal 23");
+    AddSignal (58,   "SIGRTMAX-6",  "RTMAX-6",  false,   true , true , "real time signal 24");
+    AddSignal (59,   "SIGRTMAX-5",  "RTMAX-5",  false,   true , true , "real time signal 25");
+    AddSignal (60,   "SIGRTMAX-4",  "RTMAX-4",  false,   true , true , "real time signal 26");
+    AddSignal (61,   "SIGRTMAX-3",  "RTMAX-3",  false,   true , true , "real time signal 27");
+    AddSignal (62,   "SIGRTMAX-2",  "RTMAX-2",  false,   true , true , "real time signal 28");
+    AddSignal (63,   "SIGRTMAX-1",  "RTMAX-1",  false,   true , true , "real time signal 29");
+    AddSignal (64,   "SIGRTMAX",    "RTMAX",    false,   true , true , "real time signal 30");
 }