aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Target/UnixSignals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/UnixSignals.cpp')
-rw-r--r--lldb/source/Target/UnixSignals.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/lldb/source/Target/UnixSignals.cpp b/lldb/source/Target/UnixSignals.cpp
index 26ff0bbd3825..4ae848a98edd 100644
--- a/lldb/source/Target/UnixSignals.cpp
+++ b/lldb/source/Target/UnixSignals.cpp
@@ -22,7 +22,9 @@ UnixSignals::Signal::Signal(const char *name, bool default_suppress,
const char *description, const char *alias)
: m_name(name), m_alias(alias), m_description(),
m_suppress(default_suppress), m_stop(default_stop),
- m_notify(default_notify) {
+ m_notify(default_notify),
+ m_default_suppress(default_suppress), m_default_stop(default_stop),
+ m_default_notify(default_notify) {
if (description)
m_description.assign(description);
}
@@ -298,14 +300,14 @@ UnixSignals::GetFilteredSignals(llvm::Optional<bool> should_suppress,
// If any of filtering conditions are not met, we move on to the next
// signal.
- if (should_suppress.hasValue() &&
+ if (should_suppress &&
signal_suppress != should_suppress.getValue())
continue;
- if (should_stop.hasValue() && signal_stop != should_stop.getValue())
+ if (should_stop && signal_stop != should_stop.getValue())
continue;
- if (should_notify.hasValue() && signal_notify != should_notify.getValue())
+ if (should_notify && signal_notify != should_notify.getValue())
continue;
result.push_back(signo);
@@ -330,3 +332,23 @@ json::Value UnixSignals::GetHitCountStatistics() const {
}
return std::move(json_signals);
}
+
+void UnixSignals::Signal::Reset(bool reset_stop, bool reset_notify,
+ bool reset_suppress) {
+ if (reset_stop)
+ m_stop = m_default_stop;
+ if (reset_notify)
+ m_notify = m_default_notify;
+ if (reset_suppress)
+ m_suppress = m_default_suppress;
+}
+
+bool UnixSignals::ResetSignal(int32_t signo, bool reset_stop,
+ bool reset_notify, bool reset_suppress) {
+ auto elem = m_signals.find(signo);
+ if (elem == m_signals.end())
+ return false;
+ (*elem).second.Reset(reset_stop, reset_notify, reset_suppress);
+ return true;
+}
+