From 98d0a4b39a89ad4d667d9150a008a0c36be94f1f Mon Sep 17 00:00:00 2001 From: Chaoren Lin Date: Tue, 14 Jul 2015 01:09:28 +0000 Subject: 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 --- lldb/source/Target/UnixSignals.cpp | 64 +++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 5 deletions(-) (limited to 'lldb/source/Target/UnixSignals.cpp') 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(); + default: + return std::make_shared(); + } + } + case llvm::Triple::FreeBSD: + case llvm::Triple::OpenBSD: + case llvm::Triple::NetBSD: + return std::make_shared(); + default: + return std::make_shared(); + } +} + //---------------------------------------------------------------------- // 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(index)) + return LLDB_INVALID_SIGNAL_NUMBER; + auto it = m_signals.begin(); + std::advance(it, index); + return it->first; +} -- cgit v1.2.3