summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/UnixSignals.cpp
diff options
context:
space:
mode:
authorChaoren Lin <chaorenl@google.com>2015-07-14 01:09:28 +0000
committerChaoren Lin <chaorenl@google.com>2015-07-14 01:09:28 +0000
commit98d0a4b39a89ad4d667d9150a008a0c36be94f1f (patch)
tree8aa89e4e73f775f57c5335d345f6dbbed804c13a /lldb/source/Target/UnixSignals.cpp
parent2b05416be8cc116c2910684cb6097039cd1e2cc5 (diff)
downloadbcm5719-llvm-98d0a4b39a89ad4d667d9150a008a0c36be94f1f.tar.gz
bcm5719-llvm-98d0a4b39a89ad4d667d9150a008a0c36be94f1f.zip
Refactor Unix signals.
Summary: - Consolidate Unix signals selection in UnixSignals. - Make Unix signals available from platform. - Add jSignalsInfo packet to retrieve Unix signals from remote platform. - Get a copy of the platform signal for each remote process. - Update SB API for signals. - Update signal utility in test suite. Reviewers: ovyalov, clayborg Subscribers: chaoren, jingham, labath, emaste, tberghammer, lldb-commits Differential Revision: http://reviews.llvm.org/D11094 llvm-svn: 242101
Diffstat (limited to 'lldb/source/Target/UnixSignals.cpp')
-rw-r--r--lldb/source/Target/UnixSignals.cpp64
1 files changed, 59 insertions, 5 deletions
diff --git a/lldb/source/Target/UnixSignals.cpp b/lldb/source/Target/UnixSignals.cpp
index 7f57579c1ee..91579e8d785 100644
--- a/lldb/source/Target/UnixSignals.cpp
+++ b/lldb/source/Target/UnixSignals.cpp
@@ -13,16 +13,21 @@
// C++ Includes
// Other libraries and framework includes
// Project includes
+#include "lldb/Core/ArchSpec.h"
#include "lldb/Host/StringConvert.h"
+#include "Plugins/Process/Utility/FreeBSDSignals.h"
+#include "Plugins/Process/Utility/LinuxSignals.h"
+#include "Plugins/Process/Utility/MipsLinuxSignals.h"
+
using namespace lldb_private;
-UnixSignals::Signal::Signal
+UnixSignals::Signal::Signal
(
- const char *name,
- const char *short_name,
- bool default_suppress,
- bool default_stop,
+ const char *name,
+ const char *short_name,
+ bool default_suppress,
+ bool default_stop,
bool default_notify,
const char *description
) :
@@ -37,6 +42,34 @@ UnixSignals::Signal::Signal
m_description.assign (description);
}
+lldb::UnixSignalsSP
+UnixSignals::Create(const ArchSpec &arch)
+{
+ const auto &triple = arch.GetTriple();
+ switch (triple.getOS())
+ {
+ case llvm::Triple::Linux:
+ {
+ switch (triple.getArch())
+ {
+ case llvm::Triple::mips:
+ case llvm::Triple::mipsel:
+ case llvm::Triple::mips64:
+ case llvm::Triple::mips64el:
+ return std::make_shared<MipsLinuxSignals>();
+ default:
+ return std::make_shared<LinuxSignals>();
+ }
+ }
+ case llvm::Triple::FreeBSD:
+ case llvm::Triple::OpenBSD:
+ case llvm::Triple::NetBSD:
+ return std::make_shared<FreeBSDSignals>();
+ default:
+ return std::make_shared<UnixSignals>();
+ }
+}
+
//----------------------------------------------------------------------
// UnixSignals constructor
//----------------------------------------------------------------------
@@ -45,6 +78,11 @@ UnixSignals::UnixSignals ()
Reset ();
}
+UnixSignals::UnixSignals(const UnixSignals &rhs)
+ : m_signals(rhs.m_signals)
+{
+}
+
//----------------------------------------------------------------------
// Destructor
//----------------------------------------------------------------------
@@ -291,3 +329,19 @@ UnixSignals::SetShouldNotify (const char *signal_name, bool value)
return SetShouldNotify (signo, value);
return false;
}
+
+int32_t
+UnixSignals::GetNumSignals() const
+{
+ return m_signals.size();
+}
+
+int32_t
+UnixSignals::GetSignalAtIndex(int32_t index) const
+{
+ if (index < 0 || m_signals.size() <= static_cast<size_t>(index))
+ return LLDB_INVALID_SIGNAL_NUMBER;
+ auto it = m_signals.begin();
+ std::advance(it, index);
+ return it->first;
+}
OpenPOWER on IntegriCloud