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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits