1b9c1b51eSKate Stone //===-- SBUnixSignals.cpp -------------------------------------------*- C++ 2b9c1b51eSKate Stone //-*-===// 3802dc402STodd Fiala // 4802dc402STodd Fiala // The LLVM Compiler Infrastructure 5802dc402STodd Fiala // 6802dc402STodd Fiala // This file is distributed under the University of Illinois Open Source 7802dc402STodd Fiala // License. See LICENSE.TXT for details. 8802dc402STodd Fiala // 9802dc402STodd Fiala //===----------------------------------------------------------------------===// 10802dc402STodd Fiala 11b9c1b51eSKate Stone #include "lldb/Target/Platform.h" 12b9c1b51eSKate Stone #include "lldb/Target/Process.h" 13b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h" 14*6f9e6901SZachary Turner #include "lldb/Utility/Log.h" 15b9c1b51eSKate Stone #include "lldb/lldb-defines.h" 16802dc402STodd Fiala 17802dc402STodd Fiala #include "lldb/API/SBUnixSignals.h" 18802dc402STodd Fiala 19802dc402STodd Fiala using namespace lldb; 20802dc402STodd Fiala using namespace lldb_private; 21802dc402STodd Fiala 22b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals() {} 23802dc402STodd Fiala 24b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs) 25b9c1b51eSKate Stone : m_opaque_wp(rhs.m_opaque_wp) {} 26802dc402STodd Fiala 27b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) 28b9c1b51eSKate Stone : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {} 2998d0a4b3SChaoren Lin 30b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) 31b9c1b51eSKate Stone : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {} 32802dc402STodd Fiala 33b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) { 34802dc402STodd Fiala if (this != &rhs) 35802dc402STodd Fiala m_opaque_wp = rhs.m_opaque_wp; 36802dc402STodd Fiala return *this; 37802dc402STodd Fiala } 38802dc402STodd Fiala 39b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {} 40802dc402STodd Fiala 41b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } 42802dc402STodd Fiala 43b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { 4498d0a4b3SChaoren Lin m_opaque_wp = signals_sp; 45802dc402STodd Fiala } 46802dc402STodd Fiala 47b9c1b51eSKate Stone void SBUnixSignals::Clear() { m_opaque_wp.reset(); } 48802dc402STodd Fiala 49b9c1b51eSKate Stone bool SBUnixSignals::IsValid() const { return static_cast<bool>(GetSP()); } 50802dc402STodd Fiala 51b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const { 5298d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 5398d0a4b3SChaoren Lin return signals_sp->GetSignalAsCString(signo); 5498d0a4b3SChaoren Lin 5598d0a4b3SChaoren Lin return nullptr; 56802dc402STodd Fiala } 57802dc402STodd Fiala 58b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const { 5998d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 6098d0a4b3SChaoren Lin return signals_sp->GetSignalNumberFromName(name); 6198d0a4b3SChaoren Lin 6298d0a4b3SChaoren Lin return LLDB_INVALID_SIGNAL_NUMBER; 63802dc402STodd Fiala } 64802dc402STodd Fiala 65b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const { 6698d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 6798d0a4b3SChaoren Lin return signals_sp->GetShouldSuppress(signo); 6898d0a4b3SChaoren Lin 69802dc402STodd Fiala return false; 70802dc402STodd Fiala } 71802dc402STodd Fiala 72b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) { 73802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 7498d0a4b3SChaoren Lin auto signals_sp = GetSP(); 75802dc402STodd Fiala 76b9c1b51eSKate Stone if (log) { 77802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)", 78b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 79802dc402STodd Fiala } 80802dc402STodd Fiala 8198d0a4b3SChaoren Lin if (signals_sp) 8298d0a4b3SChaoren Lin return signals_sp->SetShouldSuppress(signo, value); 8398d0a4b3SChaoren Lin 84802dc402STodd Fiala return false; 85802dc402STodd Fiala } 86802dc402STodd Fiala 87b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const { 8898d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 8998d0a4b3SChaoren Lin return signals_sp->GetShouldStop(signo); 9098d0a4b3SChaoren Lin 91802dc402STodd Fiala return false; 92802dc402STodd Fiala } 93802dc402STodd Fiala 94b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) { 95802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 9698d0a4b3SChaoren Lin auto signals_sp = GetSP(); 97802dc402STodd Fiala 98b9c1b51eSKate Stone if (log) { 99802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)", 100b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 101802dc402STodd Fiala } 102802dc402STodd Fiala 10398d0a4b3SChaoren Lin if (signals_sp) 10498d0a4b3SChaoren Lin return signals_sp->SetShouldStop(signo, value); 10598d0a4b3SChaoren Lin 106802dc402STodd Fiala return false; 107802dc402STodd Fiala } 108802dc402STodd Fiala 109b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const { 11098d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 11198d0a4b3SChaoren Lin return signals_sp->GetShouldNotify(signo); 11298d0a4b3SChaoren Lin 113802dc402STodd Fiala return false; 114802dc402STodd Fiala } 115802dc402STodd Fiala 116b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) { 117802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 11898d0a4b3SChaoren Lin auto signals_sp = GetSP(); 119802dc402STodd Fiala 120b9c1b51eSKate Stone if (log) { 121802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)", 122b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 123802dc402STodd Fiala } 124802dc402STodd Fiala 12598d0a4b3SChaoren Lin if (signals_sp) 12698d0a4b3SChaoren Lin return signals_sp->SetShouldNotify(signo, value); 12798d0a4b3SChaoren Lin 128802dc402STodd Fiala return false; 129802dc402STodd Fiala } 130802dc402STodd Fiala 131b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const { 13298d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 13398d0a4b3SChaoren Lin return signals_sp->GetNumSignals(); 13498d0a4b3SChaoren Lin 13598d0a4b3SChaoren Lin return -1; 136802dc402STodd Fiala } 137802dc402STodd Fiala 138b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const { 13998d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 14098d0a4b3SChaoren Lin return signals_sp->GetSignalAtIndex(index); 14198d0a4b3SChaoren Lin 142802dc402STodd Fiala return LLDB_INVALID_SIGNAL_NUMBER; 143802dc402STodd Fiala } 144