1b9c1b51eSKate Stone //===-- SBUnixSignals.cpp -------------------------------------------*- C++ 2b9c1b51eSKate Stone //-*-===// 3802dc402STodd Fiala // 4*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 6*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7802dc402STodd Fiala // 8802dc402STodd Fiala //===----------------------------------------------------------------------===// 9802dc402STodd Fiala 10b9c1b51eSKate Stone #include "lldb/Target/Platform.h" 11b9c1b51eSKate Stone #include "lldb/Target/Process.h" 12b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h" 136f9e6901SZachary Turner #include "lldb/Utility/Log.h" 14b9c1b51eSKate Stone #include "lldb/lldb-defines.h" 15802dc402STodd Fiala 16802dc402STodd Fiala #include "lldb/API/SBUnixSignals.h" 17802dc402STodd Fiala 18802dc402STodd Fiala using namespace lldb; 19802dc402STodd Fiala using namespace lldb_private; 20802dc402STodd Fiala 21b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals() {} 22802dc402STodd Fiala 23b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs) 24b9c1b51eSKate Stone : m_opaque_wp(rhs.m_opaque_wp) {} 25802dc402STodd Fiala 26b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) 27b9c1b51eSKate Stone : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {} 2898d0a4b3SChaoren Lin 29b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) 30b9c1b51eSKate Stone : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {} 31802dc402STodd Fiala 32b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) { 33802dc402STodd Fiala if (this != &rhs) 34802dc402STodd Fiala m_opaque_wp = rhs.m_opaque_wp; 35802dc402STodd Fiala return *this; 36802dc402STodd Fiala } 37802dc402STodd Fiala 38b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {} 39802dc402STodd Fiala 40b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } 41802dc402STodd Fiala 42b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { 4398d0a4b3SChaoren Lin m_opaque_wp = signals_sp; 44802dc402STodd Fiala } 45802dc402STodd Fiala 46b9c1b51eSKate Stone void SBUnixSignals::Clear() { m_opaque_wp.reset(); } 47802dc402STodd Fiala 48b9c1b51eSKate Stone bool SBUnixSignals::IsValid() const { return static_cast<bool>(GetSP()); } 49802dc402STodd Fiala 50b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const { 5198d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 5298d0a4b3SChaoren Lin return signals_sp->GetSignalAsCString(signo); 5398d0a4b3SChaoren Lin 5498d0a4b3SChaoren Lin return nullptr; 55802dc402STodd Fiala } 56802dc402STodd Fiala 57b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const { 5898d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 5998d0a4b3SChaoren Lin return signals_sp->GetSignalNumberFromName(name); 6098d0a4b3SChaoren Lin 6198d0a4b3SChaoren Lin return LLDB_INVALID_SIGNAL_NUMBER; 62802dc402STodd Fiala } 63802dc402STodd Fiala 64b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const { 6598d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 6698d0a4b3SChaoren Lin return signals_sp->GetShouldSuppress(signo); 6798d0a4b3SChaoren Lin 68802dc402STodd Fiala return false; 69802dc402STodd Fiala } 70802dc402STodd Fiala 71b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) { 72802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 7398d0a4b3SChaoren Lin auto signals_sp = GetSP(); 74802dc402STodd Fiala 75b9c1b51eSKate Stone if (log) { 76802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)", 77b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 78802dc402STodd Fiala } 79802dc402STodd Fiala 8098d0a4b3SChaoren Lin if (signals_sp) 8198d0a4b3SChaoren Lin return signals_sp->SetShouldSuppress(signo, value); 8298d0a4b3SChaoren Lin 83802dc402STodd Fiala return false; 84802dc402STodd Fiala } 85802dc402STodd Fiala 86b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const { 8798d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 8898d0a4b3SChaoren Lin return signals_sp->GetShouldStop(signo); 8998d0a4b3SChaoren Lin 90802dc402STodd Fiala return false; 91802dc402STodd Fiala } 92802dc402STodd Fiala 93b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) { 94802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 9598d0a4b3SChaoren Lin auto signals_sp = GetSP(); 96802dc402STodd Fiala 97b9c1b51eSKate Stone if (log) { 98802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)", 99b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 100802dc402STodd Fiala } 101802dc402STodd Fiala 10298d0a4b3SChaoren Lin if (signals_sp) 10398d0a4b3SChaoren Lin return signals_sp->SetShouldStop(signo, value); 10498d0a4b3SChaoren Lin 105802dc402STodd Fiala return false; 106802dc402STodd Fiala } 107802dc402STodd Fiala 108b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const { 10998d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 11098d0a4b3SChaoren Lin return signals_sp->GetShouldNotify(signo); 11198d0a4b3SChaoren Lin 112802dc402STodd Fiala return false; 113802dc402STodd Fiala } 114802dc402STodd Fiala 115b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) { 116802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 11798d0a4b3SChaoren Lin auto signals_sp = GetSP(); 118802dc402STodd Fiala 119b9c1b51eSKate Stone if (log) { 120802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)", 121b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 122802dc402STodd Fiala } 123802dc402STodd Fiala 12498d0a4b3SChaoren Lin if (signals_sp) 12598d0a4b3SChaoren Lin return signals_sp->SetShouldNotify(signo, value); 12698d0a4b3SChaoren Lin 127802dc402STodd Fiala return false; 128802dc402STodd Fiala } 129802dc402STodd Fiala 130b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const { 13198d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 13298d0a4b3SChaoren Lin return signals_sp->GetNumSignals(); 13398d0a4b3SChaoren Lin 13498d0a4b3SChaoren Lin return -1; 135802dc402STodd Fiala } 136802dc402STodd Fiala 137b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const { 13898d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 13998d0a4b3SChaoren Lin return signals_sp->GetSignalAtIndex(index); 14098d0a4b3SChaoren Lin 141802dc402STodd Fiala return LLDB_INVALID_SIGNAL_NUMBER; 142802dc402STodd Fiala } 143