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

Reply via email to