[Lldb-commits] [lldb] 392d9eb - [lldb] For native compiles, check signal numbers are correct when adding codes

David Spickett via lldb-commits lldb-commits at lists.llvm.org
Tue Mar 21 07:31:27 PDT 2023


Author: David Spickett
Date: 2023-03-21T14:31:21Z
New Revision: 392d9eb03af5a1adac66a86939351b22b3e73495

URL: https://github.com/llvm/llvm-project/commit/392d9eb03af5a1adac66a86939351b22b3e73495
DIFF: https://github.com/llvm/llvm-project/commit/392d9eb03af5a1adac66a86939351b22b3e73495.diff

LOG: [lldb] For native compiles, check signal numbers are correct when adding codes

Reviewed By: arichardson, emaste

Differential Revision: https://reviews.llvm.org/D146285

Added: 
    

Modified: 
    lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp
    lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp
    lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp b/lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp
index f597bed80ddec..f436de0d033e5 100644
--- a/lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp
+++ b/lldb/source/Plugins/Platform/FreeBSD/FreeBSDSignals.cpp
@@ -11,13 +11,16 @@
 #ifdef __FreeBSD__
 #include <csignal>
 
-#define ADD_SIGCODE(signal, name, value, ...)                                  \
-  static_assert(name == value, "Value mismatch for signal code " #name);       \
-  AddSignalCode(signal, value, __VA_ARGS__)
+#define ADD_SIGCODE(signal_name, signal_value, code_name, code_value, ...)     \
+  static_assert(signal_name == signal_value,                                   \
+                "Value mismatch for signal number " #signal_name);             \
+  static_assert(code_name == code_value,                                       \
+                "Value mismatch for signal code " #code_name);                 \
+  AddSignalCode(signal_value, code_value, __VA_ARGS__)
 #else
-#define ADD_SIGCODE(signal, name, value, ...)                                  \
-  AddSignalCode(signal, value, __VA_ARGS__)
-#endif /* ifdef __FreeBSD__ */
+#define ADD_SIGCODE(signal_name, signal_value, code_name, code_value, ...)     \
+  AddSignalCode(signal_value, code_value, __VA_ARGS__)
+#endif /* ifdef __FreeBSD */
 
 using namespace lldb_private;
 
@@ -28,38 +31,38 @@ void FreeBSDSignals::Reset() {
 
   // clang-format off
   // SIGILL
-  ADD_SIGCODE(4, ILL_ILLOPC, 1, "illegal opcode");
-  ADD_SIGCODE(4, ILL_ILLOPN, 2, "illegal operand");
-  ADD_SIGCODE(4, ILL_ILLADR, 3, "illegal addressing mode");
-  ADD_SIGCODE(4, ILL_ILLTRP, 4, "illegal trap");
-  ADD_SIGCODE(4, ILL_PRVOPC, 5, "privileged opcode");
-  ADD_SIGCODE(4, ILL_PRVREG, 6, "privileged register");
-  ADD_SIGCODE(4, ILL_COPROC, 7, "coprocessor error");
-  ADD_SIGCODE(4, ILL_BADSTK, 8, "internal stack error");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLOPC, 1, "illegal opcode");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLOPN, 2, "illegal operand");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLADR, 3, "illegal addressing mode");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLTRP, 4, "illegal trap");
+  ADD_SIGCODE(SIGILL, 4, ILL_PRVOPC, 5, "privileged opcode");
+  ADD_SIGCODE(SIGILL, 4, ILL_PRVREG, 6, "privileged register");
+  ADD_SIGCODE(SIGILL, 4, ILL_COPROC, 7, "coprocessor error");
+  ADD_SIGCODE(SIGILL, 4, ILL_BADSTK, 8, "internal stack error");
 
   // SIGFPE
-  ADD_SIGCODE(8, FPE_INTOVF, 1, "integer overflow");
-  ADD_SIGCODE(8, FPE_INTDIV, 2, "integer divide by zero");
-  ADD_SIGCODE(8, FPE_FLTDIV, 3, "floating point divide by zero");
-  ADD_SIGCODE(8, FPE_FLTOVF, 4, "floating point overflow");
-  ADD_SIGCODE(8, FPE_FLTUND, 5, "floating point underflow");
-  ADD_SIGCODE(8, FPE_FLTRES, 6, "floating point inexact result");
-  ADD_SIGCODE(8, FPE_FLTINV, 7, "invalid floating point operation");
-  ADD_SIGCODE(8, FPE_FLTSUB, 8, "subscript out of range");
-  ADD_SIGCODE(8, FPE_FLTIDO, 9, "input denormal operation");
+  ADD_SIGCODE(SIGFPE, 8, FPE_INTOVF, 1, "integer overflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_INTDIV, 2, "integer divide by zero");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTDIV, 3, "floating point divide by zero");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTOVF, 4, "floating point overflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTUND, 5, "floating point underflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTRES, 6, "floating point inexact result");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTINV, 7, "invalid floating point operation");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTSUB, 8, "subscript out of range");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTIDO, 9, "input denormal operation");
 
   // SIGBUS
-  ADD_SIGCODE(10, BUS_ADRALN, 1,   "invalid address alignment");
-  ADD_SIGCODE(10, BUS_ADRERR, 2,   "nonexistent physical address");
-  ADD_SIGCODE(10, BUS_OBJERR, 3,   "object-specific hardware error");
-  ADD_SIGCODE(10, BUS_OOMERR, 100, "no memory");
+  ADD_SIGCODE(SIGBUS, 10, BUS_ADRALN, 1,   "invalid address alignment");
+  ADD_SIGCODE(SIGBUS, 10, BUS_ADRERR, 2,   "nonexistent physical address");
+  ADD_SIGCODE(SIGBUS, 10, BUS_OBJERR, 3,   "object-specific hardware error");
+  ADD_SIGCODE(SIGBUS, 10, BUS_OOMERR, 100, "no memory");
 
   // SIGSEGV
-  ADD_SIGCODE(11, SEGV_MAPERR, 1,   "address not mapped to object",
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_MAPERR, 1,   "address not mapped to object",
                   SignalCodePrintOption::Address);
-  ADD_SIGCODE(11, SEGV_ACCERR, 2,   "invalid permissions for mapped object",
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_ACCERR, 2,   "invalid permissions for mapped object",
                   SignalCodePrintOption::Address);
-  ADD_SIGCODE(11, SEGV_PKUERR, 100, "PKU violation",
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_PKUERR, 100, "PKU violation",
                   SignalCodePrintOption::Address);
 
   //        SIGNO NAME           SUPPRESS STOP   NOTIFY DESCRIPTION

diff  --git a/lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp b/lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp
index 834a558e4d22c..3f25dbc6abbbe 100644
--- a/lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp
+++ b/lldb/source/Plugins/Platform/Linux/LinuxSignals.cpp
@@ -21,12 +21,15 @@
 #define SEGV_MTESERR 9
 #endif
 
-#define ADD_SIGCODE(signal, name, value, ...)                                  \
-  static_assert(name == value, "Value mismatch for signal code " #name);       \
-  AddSignalCode(signal, value, __VA_ARGS__)
+#define ADD_SIGCODE(signal_name, signal_value, code_name, code_value, ...)     \
+  static_assert(signal_name == signal_value,                                   \
+                "Value mismatch for signal number " #signal_name);             \
+  static_assert(code_name == code_value,                                       \
+                "Value mismatch for signal code " #code_name);                 \
+  AddSignalCode(signal_value, code_value, __VA_ARGS__)
 #else
-#define ADD_SIGCODE(signal, name, value, ...)                                  \
-  AddSignalCode(signal, value, __VA_ARGS__)
+#define ADD_SIGCODE(signal_name, signal_value, code_name, code_value, ...)     \
+  AddSignalCode(signal_value, code_value, __VA_ARGS__)
 #endif /* ifdef __linux__ */
 
 using namespace lldb_private;
@@ -43,45 +46,45 @@ void LinuxSignals::Reset() {
   AddSignal(3,      "SIGQUIT",      false,    true,   true,   "quit");
 
   AddSignal(4,      "SIGILL",       false,    true,   true,   "illegal instruction");
-  ADD_SIGCODE(4, ILL_ILLOPC, 1, "illegal opcode");
-  ADD_SIGCODE(4, ILL_ILLOPN, 2, "illegal operand");
-  ADD_SIGCODE(4, ILL_ILLADR, 3, "illegal addressing mode");
-  ADD_SIGCODE(4, ILL_ILLTRP, 4, "illegal trap");
-  ADD_SIGCODE(4, ILL_PRVOPC, 5, "privileged opcode");
-  ADD_SIGCODE(4, ILL_PRVREG, 6, "privileged register");
-  ADD_SIGCODE(4, ILL_COPROC, 7, "coprocessor error");
-  ADD_SIGCODE(4, ILL_BADSTK, 8, "internal stack error");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLOPC, 1, "illegal opcode");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLOPN, 2, "illegal operand");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLADR, 3, "illegal addressing mode");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLTRP, 4, "illegal trap");
+  ADD_SIGCODE(SIGILL, 4, ILL_PRVOPC, 5, "privileged opcode");
+  ADD_SIGCODE(SIGILL, 4, ILL_PRVREG, 6, "privileged register");
+  ADD_SIGCODE(SIGILL, 4, ILL_COPROC, 7, "coprocessor error");
+  ADD_SIGCODE(SIGILL, 4, ILL_BADSTK, 8, "internal stack error");
 
   AddSignal(5,      "SIGTRAP",      true,     true,   true,   "trace trap (not reset when caught)");
   AddSignal(6,      "SIGABRT",      false,    true,   true,   "abort()/IOT trap", "SIGIOT");
 
   AddSignal(7,      "SIGBUS",       false,    true,   true,   "bus error");
-  ADD_SIGCODE(7, BUS_ADRALN, 1, "illegal alignment");
-  ADD_SIGCODE(7, BUS_ADRERR, 2, "illegal address");
-  ADD_SIGCODE(7, BUS_OBJERR, 3, "hardware error");
+  ADD_SIGCODE(SIGBUS, 7, BUS_ADRALN, 1, "illegal alignment");
+  ADD_SIGCODE(SIGBUS, 7, BUS_ADRERR, 2, "illegal address");
+  ADD_SIGCODE(SIGBUS, 7, BUS_OBJERR, 3, "hardware error");
 
   AddSignal(8,      "SIGFPE",       false,    true,   true,   "floating point exception");
-  ADD_SIGCODE(8, FPE_INTDIV, 1, "integer divide by zero");
-  ADD_SIGCODE(8, FPE_INTOVF, 2, "integer overflow");
-  ADD_SIGCODE(8, FPE_FLTDIV, 3, "floating point divide by zero");
-  ADD_SIGCODE(8, FPE_FLTOVF, 4, "floating point overflow");
-  ADD_SIGCODE(8, FPE_FLTUND, 5, "floating point underflow");
-  ADD_SIGCODE(8, FPE_FLTRES, 6, "floating point inexact result");
-  ADD_SIGCODE(8, FPE_FLTINV, 7, "floating point invalid operation");
-  ADD_SIGCODE(8, FPE_FLTSUB, 8, "subscript out of range");
+  ADD_SIGCODE(SIGFPE, 8, FPE_INTDIV, 1, "integer divide by zero");
+  ADD_SIGCODE(SIGFPE, 8, FPE_INTOVF, 2, "integer overflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTDIV, 3, "floating point divide by zero");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTOVF, 4, "floating point overflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTUND, 5, "floating point underflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTRES, 6, "floating point inexact result");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTINV, 7, "floating point invalid operation");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTSUB, 8, "subscript out of range");
 
   AddSignal(9,      "SIGKILL",      false,    true,   true,   "kill");
   AddSignal(10,     "SIGUSR1",      false,    true,   true,   "user defined signal 1");
 
   AddSignal(11,     "SIGSEGV",      false,    true,   true,   "segmentation violation");
-  ADD_SIGCODE(11, SEGV_MAPERR,  1, "address not mapped to object", SignalCodePrintOption::Address);
-  ADD_SIGCODE(11, SEGV_ACCERR,  2, "invalid permissions for mapped object", SignalCodePrintOption::Address);
-  ADD_SIGCODE(11, SEGV_BNDERR,  3, "failed address bounds checks", SignalCodePrintOption::Bounds);
-  ADD_SIGCODE(11, SEGV_MTEAERR, 8, "async tag check fault");
-  ADD_SIGCODE(11, SEGV_MTESERR, 9, "sync tag check fault", SignalCodePrintOption::Address);
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_MAPERR,  1, "address not mapped to object", SignalCodePrintOption::Address);
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_ACCERR,  2, "invalid permissions for mapped object", SignalCodePrintOption::Address);
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_BNDERR,  3, "failed address bounds checks", SignalCodePrintOption::Bounds);
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_MTEAERR, 8, "async tag check fault");
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_MTESERR, 9, "sync tag check fault", SignalCodePrintOption::Address);
   // Some platforms will occasionally send nonstandard spurious SI_KERNEL
   // codes. One way to get this is via unaligned SIMD loads. Treat it as invalid address.
-  ADD_SIGCODE(11, SI_KERNEL, 0x80, "invalid address", SignalCodePrintOption::Address);
+  ADD_SIGCODE(SIGSEGV, 11, SI_KERNEL, 0x80, "invalid address", SignalCodePrintOption::Address);
 
   AddSignal(12,     "SIGUSR2",      false,    true,   true,   "user defined signal 2");
   AddSignal(13,     "SIGPIPE",      false,    true,   true,   "write to pipe with reading end closed");

diff  --git a/lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp b/lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp
index 285808e10c95f..6e4e5038566b3 100644
--- a/lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp
+++ b/lldb/source/Plugins/Platform/NetBSD/NetBSDSignals.cpp
@@ -11,13 +11,16 @@
 #ifdef __NetBSD__
 #include <csignal>
 
-#define ADD_SIGCODE(signal, name, value, ...)                                  \
-  static_assert(name == value, "Value mismatch for signal code " #name);       \
-  AddSignalCode(signal, value, __VA_ARGS__)
+#define ADD_SIGCODE(signal_name, signal_value, code_name, code_value, ...)     \
+  static_assert(signal_name == signal_value,                                   \
+                "Value mismatch for signal number " #signal_name);             \
+  static_assert(code_name == code_value,                                       \
+                "Value mismatch for signal code " #code_name);                 \
+  AddSignalCode(signal_value, code_value, __VA_ARGS__)
 #else
-#define ADD_SIGCODE(signal, name, value, ...)                                  \
-  AddSignalCode(signal, value, __VA_ARGS__)
-#endif /* ifdef __NetBSD__ */
+#define ADD_SIGCODE(signal_name, signal_value, code_name, code_value, ...)     \
+  AddSignalCode(signal_value, code_value, __VA_ARGS__)
+#endif /* ifdef __NetBSD */
 
 using namespace lldb_private;
 
@@ -28,34 +31,34 @@ void NetBSDSignals::Reset() {
 
   // clang-format off
   // SIGILL
-  ADD_SIGCODE(4, ILL_ILLOPC, 1, "illegal opcode");
-  ADD_SIGCODE(4, ILL_ILLOPN, 2, "illegal operand");
-  ADD_SIGCODE(4, ILL_ILLADR, 3, "illegal addressing mode");
-  ADD_SIGCODE(4, ILL_ILLTRP, 4, "illegal trap");
-  ADD_SIGCODE(4, ILL_PRVOPC, 5, "privileged opcode");
-  ADD_SIGCODE(4, ILL_PRVREG, 6, "privileged register");
-  ADD_SIGCODE(4, ILL_COPROC, 7, "coprocessor error");
-  ADD_SIGCODE(4, ILL_BADSTK, 8, "internal stack error");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLOPC, 1, "illegal opcode");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLOPN, 2, "illegal operand");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLADR, 3, "illegal addressing mode");
+  ADD_SIGCODE(SIGILL, 4, ILL_ILLTRP, 4, "illegal trap");
+  ADD_SIGCODE(SIGILL, 4, ILL_PRVOPC, 5, "privileged opcode");
+  ADD_SIGCODE(SIGILL, 4, ILL_PRVREG, 6, "privileged register");
+  ADD_SIGCODE(SIGILL, 4, ILL_COPROC, 7, "coprocessor error");
+  ADD_SIGCODE(SIGILL, 4, ILL_BADSTK, 8, "internal stack error");
 
   // SIGFPE
-  ADD_SIGCODE(8, FPE_INTDIV, 1, "integer divide by zero");
-  ADD_SIGCODE(8, FPE_INTOVF, 2, "integer overflow");
-  ADD_SIGCODE(8, FPE_FLTDIV, 3, "floating point divide by zero");
-  ADD_SIGCODE(8, FPE_FLTOVF, 4, "floating point overflow");
-  ADD_SIGCODE(8, FPE_FLTUND, 5, "floating point underflow");
-  ADD_SIGCODE(8, FPE_FLTRES, 6, "floating point inexact result");
-  ADD_SIGCODE(8, FPE_FLTINV, 7, "invalid floating point operation");
-  ADD_SIGCODE(8, FPE_FLTSUB, 8, "subscript out of range");
+  ADD_SIGCODE(SIGFPE, 8, FPE_INTDIV, 1, "integer divide by zero");
+  ADD_SIGCODE(SIGFPE, 8, FPE_INTOVF, 2, "integer overflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTDIV, 3, "floating point divide by zero");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTOVF, 4, "floating point overflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTUND, 5, "floating point underflow");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTRES, 6, "floating point inexact result");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTINV, 7, "invalid floating point operation");
+  ADD_SIGCODE(SIGFPE, 8, FPE_FLTSUB, 8, "subscript out of range");
 
   // SIGBUS
-  ADD_SIGCODE(10, BUS_ADRALN, 1, "invalid address alignment");
-  ADD_SIGCODE(10, BUS_ADRERR, 2, "non-existent physical address");
-  ADD_SIGCODE(10, BUS_OBJERR, 3, "object specific hardware error");
+  ADD_SIGCODE(SIGBUS, 10, BUS_ADRALN, 1, "invalid address alignment");
+  ADD_SIGCODE(SIGBUS, 10, BUS_ADRERR, 2, "non-existent physical address");
+  ADD_SIGCODE(SIGBUS, 10, BUS_OBJERR, 3, "object specific hardware error");
 
   // SIGSEGV
-  ADD_SIGCODE(11, SEGV_MAPERR, 1, "address not mapped to object",
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_MAPERR, 1, "address not mapped to object",
                 SignalCodePrintOption::Address);
-  ADD_SIGCODE(11, SEGV_ACCERR, 2, "invalid permissions for mapped object",
+  ADD_SIGCODE(SIGSEGV, 11, SEGV_ACCERR, 2, "invalid permissions for mapped object",
                 SignalCodePrintOption::Address);
 
   //        SIGNO  NAME          SUPPRESS STOP   NOTIFY DESCRIPTION


        


More information about the lldb-commits mailing list