https://github.com/da-viper created https://github.com/llvm/llvm-project/pull/164176
show information about the signal when the user presses `process handle <unix-signal>` i.e ```sh (lldb) process handle SIGWINCH NAME PASS STOP NOTIFY DESCRIPTION =========== ===== ===== ====== =================== SIGWINCH true false false window size changes ``` Wanted to use the existing `GetSignalDescription` but it is expected behaviour to return the signal name if no signal code is passed. It is used in stop info. https://github.com/llvm/llvm-project/blob/65c895dfe084860847e9e220ff9f1b283ebcb289/lldb/source/Target/StopInfo.cpp#L1192-L1195 >From 1639f6a9dc41a88e3289176e61b54d7cf2322cc0 Mon Sep 17 00:00:00 2001 From: Ebuka Ezike <[email protected]> Date: Sun, 19 Oct 2025 19:33:02 +0100 Subject: [PATCH 1/2] [lldb] show the description in process handle when the user types `process handle` show that the signal is used for. --- lldb/include/lldb/Target/UnixSignals.h | 2 ++ lldb/source/Commands/CommandObjectProcess.cpp | 13 ++++++++++--- lldb/source/Target/UnixSignals.cpp | 7 +++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lldb/include/lldb/Target/UnixSignals.h b/lldb/include/lldb/Target/UnixSignals.h index a1807d69f329b..9189a84c72614 100644 --- a/lldb/include/lldb/Target/UnixSignals.h +++ b/lldb/include/lldb/Target/UnixSignals.h @@ -31,6 +31,8 @@ class UnixSignals { llvm::StringRef GetSignalAsStringRef(int32_t signo) const; + llvm::StringRef GetSignalNoDescription(int32_t signo) const; + std::string GetSignalDescription(int32_t signo, std::optional<int32_t> code = std::nullopt, diff --git a/lldb/source/Commands/CommandObjectProcess.cpp b/lldb/source/Commands/CommandObjectProcess.cpp index 7d326404a5503..dfad03deef935 100644 --- a/lldb/source/Commands/CommandObjectProcess.cpp +++ b/lldb/source/Commands/CommandObjectProcess.cpp @@ -1603,8 +1603,8 @@ class CommandObjectProcessHandle : public CommandObjectParsed { Options *GetOptions() override { return &m_options; } void PrintSignalHeader(Stream &str) { - str.Printf("NAME PASS STOP NOTIFY\n"); - str.Printf("=========== ===== ===== ======\n"); + str.Printf("NAME PASS STOP NOTIFY DESCRIPTION\n"); + str.Printf("=========== ===== ===== ====== ===================\n"); } void PrintSignal(Stream &str, int32_t signo, llvm::StringRef sig_name, @@ -1616,8 +1616,15 @@ class CommandObjectProcessHandle : public CommandObjectParsed { str.Format("{0, -11} ", sig_name); if (signals_sp->GetSignalInfo(signo, suppress, stop, notify)) { bool pass = !suppress; - str.Printf("%s %s %s", (pass ? "true " : "false"), + str.Printf("%s %s %s ", (pass ? "true " : "false"), (stop ? "true " : "false"), (notify ? "true " : "false")); + + llvm::StringRef sig_description = + signals_sp->GetSignalNoDescription(signo); + if (!sig_description.empty()) { + str.PutCString(" "); + str.PutCString(sig_description); + } } str.Printf("\n"); } diff --git a/lldb/source/Target/UnixSignals.cpp b/lldb/source/Target/UnixSignals.cpp index 6113c6648817c..56a28164100b1 100644 --- a/lldb/source/Target/UnixSignals.cpp +++ b/lldb/source/Target/UnixSignals.cpp @@ -137,6 +137,13 @@ llvm::StringRef UnixSignals::GetSignalAsStringRef(int32_t signo) const { return pos->second.m_name; } +llvm::StringRef UnixSignals::GetSignalNoDescription(int32_t signo) const { + const auto pos = m_signals.find(signo); + if (pos == m_signals.end()) + return {}; + return pos->second.m_description; +} + std::string UnixSignals::GetSignalDescription( int32_t signo, std::optional<int32_t> code, std::optional<lldb::addr_t> addr, std::optional<lldb::addr_t> lower, >From 08dfa8b9999d933b0e445329a50fb4315364efea Mon Sep 17 00:00:00 2001 From: Ebuka Ezike <[email protected]> Date: Sun, 19 Oct 2025 19:58:44 +0100 Subject: [PATCH 2/2] [lldb] add test --- lldb/include/lldb/Target/UnixSignals.h | 2 +- lldb/source/Commands/CommandObjectProcess.cpp | 2 +- lldb/source/Target/UnixSignals.cpp | 2 +- lldb/unittests/Signals/UnixSignalsTest.cpp | 12 ++++++++++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lldb/include/lldb/Target/UnixSignals.h b/lldb/include/lldb/Target/UnixSignals.h index 9189a84c72614..590e4d1aa5208 100644 --- a/lldb/include/lldb/Target/UnixSignals.h +++ b/lldb/include/lldb/Target/UnixSignals.h @@ -31,7 +31,7 @@ class UnixSignals { llvm::StringRef GetSignalAsStringRef(int32_t signo) const; - llvm::StringRef GetSignalNoDescription(int32_t signo) const; + llvm::StringRef GetSignalNumberDescription(int32_t signo) const; std::string GetSignalDescription(int32_t signo, diff --git a/lldb/source/Commands/CommandObjectProcess.cpp b/lldb/source/Commands/CommandObjectProcess.cpp index dfad03deef935..1dc9d12580cbe 100644 --- a/lldb/source/Commands/CommandObjectProcess.cpp +++ b/lldb/source/Commands/CommandObjectProcess.cpp @@ -1620,7 +1620,7 @@ class CommandObjectProcessHandle : public CommandObjectParsed { (stop ? "true " : "false"), (notify ? "true " : "false")); llvm::StringRef sig_description = - signals_sp->GetSignalNoDescription(signo); + signals_sp->GetSignalNumberDescription(signo); if (!sig_description.empty()) { str.PutCString(" "); str.PutCString(sig_description); diff --git a/lldb/source/Target/UnixSignals.cpp b/lldb/source/Target/UnixSignals.cpp index 56a28164100b1..881431f4631e5 100644 --- a/lldb/source/Target/UnixSignals.cpp +++ b/lldb/source/Target/UnixSignals.cpp @@ -137,7 +137,7 @@ llvm::StringRef UnixSignals::GetSignalAsStringRef(int32_t signo) const { return pos->second.m_name; } -llvm::StringRef UnixSignals::GetSignalNoDescription(int32_t signo) const { +llvm::StringRef UnixSignals::GetSignalNumberDescription(int32_t signo) const { const auto pos = m_signals.find(signo); if (pos == m_signals.end()) return {}; diff --git a/lldb/unittests/Signals/UnixSignalsTest.cpp b/lldb/unittests/Signals/UnixSignalsTest.cpp index 582e441556067..3bd4aedd600a3 100644 --- a/lldb/unittests/Signals/UnixSignalsTest.cpp +++ b/lldb/unittests/Signals/UnixSignalsTest.cpp @@ -148,6 +148,18 @@ TEST(UnixSignalsTest, GetAsString) { signals.GetSignalDescription(16, 3, 0x1233, 0x1234, 0x5678)); } +TEST(UnixSignalsTest, GetNumberDescription) { + TestSignals signals; + + ASSERT_EQ("DESC2", signals.GetSignalNumberDescription(2)); + ASSERT_EQ("DESC4", signals.GetSignalNumberDescription(4)); + ASSERT_EQ("DESC8", signals.GetSignalNumberDescription(8)); + ASSERT_EQ("DESC16", signals.GetSignalNumberDescription(16)); + + // Unknown signal number. + ASSERT_EQ("", signals.GetSignalNumberDescription(100)); +} + TEST(UnixSignalsTest, VersionChange) { TestSignals signals; _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
