Skip to content

Commit 1dc6ad0

Browse files
authored
[lldb] Show signal number description (#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
1 parent d162c91 commit 1dc6ad0

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

lldb/include/lldb/Target/UnixSignals.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class UnixSignals {
3131

3232
llvm::StringRef GetSignalAsStringRef(int32_t signo) const;
3333

34+
llvm::StringRef GetSignalNumberDescription(int32_t signo) const;
35+
3436
std::string
3537
GetSignalDescription(int32_t signo,
3638
std::optional<int32_t> code = std::nullopt,

lldb/source/Commands/CommandObjectProcess.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,8 +1603,8 @@ class CommandObjectProcessHandle : public CommandObjectParsed {
16031603
Options *GetOptions() override { return &m_options; }
16041604

16051605
void PrintSignalHeader(Stream &str) {
1606-
str.Printf("NAME PASS STOP NOTIFY\n");
1607-
str.Printf("=========== ===== ===== ======\n");
1606+
str.Printf("NAME PASS STOP NOTIFY DESCRIPTION\n");
1607+
str.Printf("=========== ===== ===== ====== ===================\n");
16081608
}
16091609

16101610
void PrintSignal(Stream &str, int32_t signo, llvm::StringRef sig_name,
@@ -1615,9 +1615,16 @@ class CommandObjectProcessHandle : public CommandObjectParsed {
16151615

16161616
str.Format("{0, -11} ", sig_name);
16171617
if (signals_sp->GetSignalInfo(signo, suppress, stop, notify)) {
1618-
bool pass = !suppress;
1618+
const bool pass = !suppress;
16191619
str.Printf("%s %s %s", (pass ? "true " : "false"),
16201620
(stop ? "true " : "false"), (notify ? "true " : "false"));
1621+
1622+
const llvm::StringRef sig_description =
1623+
signals_sp->GetSignalNumberDescription(signo);
1624+
if (!sig_description.empty()) {
1625+
str.PutCString(" ");
1626+
str.PutCString(sig_description);
1627+
}
16211628
}
16221629
str.Printf("\n");
16231630
}

lldb/source/Target/UnixSignals.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,13 @@ llvm::StringRef UnixSignals::GetSignalAsStringRef(int32_t signo) const {
137137
return pos->second.m_name;
138138
}
139139

140+
llvm::StringRef UnixSignals::GetSignalNumberDescription(int32_t signo) const {
141+
const auto pos = m_signals.find(signo);
142+
if (pos == m_signals.end())
143+
return {};
144+
return pos->second.m_description;
145+
}
146+
140147
std::string UnixSignals::GetSignalDescription(
141148
int32_t signo, std::optional<int32_t> code,
142149
std::optional<lldb::addr_t> addr, std::optional<lldb::addr_t> lower,

lldb/unittests/Signals/UnixSignalsTest.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,18 @@ TEST(UnixSignalsTest, GetAsString) {
148148
signals.GetSignalDescription(16, 3, 0x1233, 0x1234, 0x5678));
149149
}
150150

151+
TEST(UnixSignalsTest, GetNumberDescription) {
152+
TestSignals signals;
153+
154+
ASSERT_EQ("DESC2", signals.GetSignalNumberDescription(2));
155+
ASSERT_EQ("DESC4", signals.GetSignalNumberDescription(4));
156+
ASSERT_EQ("DESC8", signals.GetSignalNumberDescription(8));
157+
ASSERT_EQ("DESC16", signals.GetSignalNumberDescription(16));
158+
159+
// Unknown signal number.
160+
ASSERT_EQ("", signals.GetSignalNumberDescription(100));
161+
}
162+
151163
TEST(UnixSignalsTest, VersionChange) {
152164
TestSignals signals;
153165

0 commit comments

Comments
 (0)