1b9c1b51eSKate Stone //===-- SBUnixSignals.cpp -------------------------------------------*- C++ 2b9c1b51eSKate Stone //-*-===// 3802dc402STodd Fiala // 42946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 52946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 62946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7802dc402STodd Fiala // 8802dc402STodd Fiala //===----------------------------------------------------------------------===// 9802dc402STodd Fiala 10*baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h" 11b9c1b51eSKate Stone #include "lldb/Target/Platform.h" 12b9c1b51eSKate Stone #include "lldb/Target/Process.h" 13b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h" 146f9e6901SZachary 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 22*baf5664fSJonas Devlieghere SBUnixSignals::SBUnixSignals() { 23*baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBUnixSignals); 24*baf5664fSJonas Devlieghere } 25802dc402STodd Fiala 26b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs) 27*baf5664fSJonas Devlieghere : m_opaque_wp(rhs.m_opaque_wp) { 28*baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &), rhs); 29*baf5664fSJonas Devlieghere } 30802dc402STodd Fiala 31b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) 32b9c1b51eSKate Stone : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {} 3398d0a4b3SChaoren Lin 34b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) 35b9c1b51eSKate Stone : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {} 36802dc402STodd Fiala 37b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) { 38*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBUnixSignals &, 39*baf5664fSJonas Devlieghere SBUnixSignals, operator=,(const lldb::SBUnixSignals &), 40*baf5664fSJonas Devlieghere rhs); 41*baf5664fSJonas Devlieghere 42802dc402STodd Fiala if (this != &rhs) 43802dc402STodd Fiala m_opaque_wp = rhs.m_opaque_wp; 44802dc402STodd Fiala return *this; 45802dc402STodd Fiala } 46802dc402STodd Fiala 47b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {} 48802dc402STodd Fiala 49b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } 50802dc402STodd Fiala 51b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { 5298d0a4b3SChaoren Lin m_opaque_wp = signals_sp; 53802dc402STodd Fiala } 54802dc402STodd Fiala 55*baf5664fSJonas Devlieghere void SBUnixSignals::Clear() { 56*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBUnixSignals, Clear); 57802dc402STodd Fiala 58*baf5664fSJonas Devlieghere m_opaque_wp.reset(); 59*baf5664fSJonas Devlieghere } 60*baf5664fSJonas Devlieghere 61*baf5664fSJonas Devlieghere bool SBUnixSignals::IsValid() const { 62*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, IsValid); 63*baf5664fSJonas Devlieghere 64*baf5664fSJonas Devlieghere return static_cast<bool>(GetSP()); 65*baf5664fSJonas Devlieghere } 66802dc402STodd Fiala 67b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const { 68*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString, 69*baf5664fSJonas Devlieghere (int32_t), signo); 70*baf5664fSJonas Devlieghere 7198d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 7298d0a4b3SChaoren Lin return signals_sp->GetSignalAsCString(signo); 7398d0a4b3SChaoren Lin 7498d0a4b3SChaoren Lin return nullptr; 75802dc402STodd Fiala } 76802dc402STodd Fiala 77b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const { 78*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName, 79*baf5664fSJonas Devlieghere (const char *), name); 80*baf5664fSJonas Devlieghere 8198d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 8298d0a4b3SChaoren Lin return signals_sp->GetSignalNumberFromName(name); 8398d0a4b3SChaoren Lin 8498d0a4b3SChaoren Lin return LLDB_INVALID_SIGNAL_NUMBER; 85802dc402STodd Fiala } 86802dc402STodd Fiala 87b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const { 88*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress, (int32_t), 89*baf5664fSJonas Devlieghere signo); 90*baf5664fSJonas Devlieghere 9198d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 9298d0a4b3SChaoren Lin return signals_sp->GetShouldSuppress(signo); 9398d0a4b3SChaoren Lin 94802dc402STodd Fiala return false; 95802dc402STodd Fiala } 96802dc402STodd Fiala 97b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) { 98*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldSuppress, (int32_t, bool), 99*baf5664fSJonas Devlieghere signo, value); 100*baf5664fSJonas Devlieghere 101802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 10298d0a4b3SChaoren Lin auto signals_sp = GetSP(); 103802dc402STodd Fiala 104b9c1b51eSKate Stone if (log) { 105802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)", 106b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 107802dc402STodd Fiala } 108802dc402STodd Fiala 10998d0a4b3SChaoren Lin if (signals_sp) 11098d0a4b3SChaoren Lin return signals_sp->SetShouldSuppress(signo, value); 11198d0a4b3SChaoren Lin 112802dc402STodd Fiala return false; 113802dc402STodd Fiala } 114802dc402STodd Fiala 115b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const { 116*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t), 117*baf5664fSJonas Devlieghere signo); 118*baf5664fSJonas Devlieghere 11998d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 12098d0a4b3SChaoren Lin return signals_sp->GetShouldStop(signo); 12198d0a4b3SChaoren Lin 122802dc402STodd Fiala return false; 123802dc402STodd Fiala } 124802dc402STodd Fiala 125b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) { 126*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool), signo, 127*baf5664fSJonas Devlieghere value); 128*baf5664fSJonas Devlieghere 129802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 13098d0a4b3SChaoren Lin auto signals_sp = GetSP(); 131802dc402STodd Fiala 132b9c1b51eSKate Stone if (log) { 133802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)", 134b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 135802dc402STodd Fiala } 136802dc402STodd Fiala 13798d0a4b3SChaoren Lin if (signals_sp) 13898d0a4b3SChaoren Lin return signals_sp->SetShouldStop(signo, value); 13998d0a4b3SChaoren Lin 140802dc402STodd Fiala return false; 141802dc402STodd Fiala } 142802dc402STodd Fiala 143b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const { 144*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t), 145*baf5664fSJonas Devlieghere signo); 146*baf5664fSJonas Devlieghere 14798d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 14898d0a4b3SChaoren Lin return signals_sp->GetShouldNotify(signo); 14998d0a4b3SChaoren Lin 150802dc402STodd Fiala return false; 151802dc402STodd Fiala } 152802dc402STodd Fiala 153b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) { 154*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool), 155*baf5664fSJonas Devlieghere signo, value); 156*baf5664fSJonas Devlieghere 157802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 15898d0a4b3SChaoren Lin auto signals_sp = GetSP(); 159802dc402STodd Fiala 160b9c1b51eSKate Stone if (log) { 161802dc402STodd Fiala log->Printf("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)", 162b9c1b51eSKate Stone static_cast<void *>(signals_sp.get()), signo, value); 163802dc402STodd Fiala } 164802dc402STodd Fiala 16598d0a4b3SChaoren Lin if (signals_sp) 16698d0a4b3SChaoren Lin return signals_sp->SetShouldNotify(signo, value); 16798d0a4b3SChaoren Lin 168802dc402STodd Fiala return false; 169802dc402STodd Fiala } 170802dc402STodd Fiala 171b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const { 172*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(int32_t, SBUnixSignals, GetNumSignals); 173*baf5664fSJonas Devlieghere 17498d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 17598d0a4b3SChaoren Lin return signals_sp->GetNumSignals(); 17698d0a4b3SChaoren Lin 17798d0a4b3SChaoren Lin return -1; 178802dc402STodd Fiala } 179802dc402STodd Fiala 180b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const { 181*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex, (int32_t), 182*baf5664fSJonas Devlieghere index); 183*baf5664fSJonas Devlieghere 18498d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 18598d0a4b3SChaoren Lin return signals_sp->GetSignalAtIndex(index); 18698d0a4b3SChaoren Lin 187802dc402STodd Fiala return LLDB_INVALID_SIGNAL_NUMBER; 188802dc402STodd Fiala } 189