Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lldb/include/lldb/Target/UnixSignals.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ class UnixSignals {

llvm::StringRef GetSignalAsStringRef(int32_t signo) const;

llvm::StringRef GetSignalNumberDescription(int32_t signo) const;

std::string
GetSignalDescription(int32_t signo,
std::optional<int32_t> code = std::nullopt,
Expand Down
13 changes: 10 additions & 3 deletions lldb/source/Commands/CommandObjectProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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->GetSignalNumberDescription(signo);
if (!sig_description.empty()) {
str.PutCString(" ");
str.PutCString(sig_description);
}
}
str.Printf("\n");
}
Expand Down
7 changes: 7 additions & 0 deletions lldb/source/Target/UnixSignals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,13 @@ llvm::StringRef UnixSignals::GetSignalAsStringRef(int32_t signo) const {
return pos->second.m_name;
}

llvm::StringRef UnixSignals::GetSignalNumberDescription(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,
Expand Down
12 changes: 12 additions & 0 deletions lldb/unittests/Signals/UnixSignalsTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
Loading