180814287SRaphael Isemann //===-- SBUnixSignals.cpp -------------------------------------------------===// 2802dc402STodd Fiala // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6802dc402STodd Fiala // 7802dc402STodd Fiala //===----------------------------------------------------------------------===// 8802dc402STodd Fiala 9d51402acSJonas Devlieghere #include "lldb/Utility/ReproducerInstrumentation.h" 10b9c1b51eSKate Stone #include "lldb/Target/Platform.h" 11b9c1b51eSKate Stone #include "lldb/Target/Process.h" 12b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h" 13b9c1b51eSKate Stone #include "lldb/lldb-defines.h" 14802dc402STodd Fiala 15802dc402STodd Fiala #include "lldb/API/SBUnixSignals.h" 16802dc402STodd Fiala 17802dc402STodd Fiala using namespace lldb; 18802dc402STodd Fiala using namespace lldb_private; 19802dc402STodd Fiala 20baf5664fSJonas Devlieghere SBUnixSignals::SBUnixSignals() { 21baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBUnixSignals); 22baf5664fSJonas Devlieghere } 23802dc402STodd Fiala 24b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs) 25baf5664fSJonas Devlieghere : m_opaque_wp(rhs.m_opaque_wp) { 26baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &), rhs); 27baf5664fSJonas Devlieghere } 28802dc402STodd Fiala 29b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) 30b9c1b51eSKate Stone : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {} 3198d0a4b3SChaoren Lin 32b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) 33b9c1b51eSKate Stone : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {} 34802dc402STodd Fiala 35b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) { 36baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBUnixSignals &, 37baf5664fSJonas Devlieghere SBUnixSignals, operator=,(const lldb::SBUnixSignals &), 38baf5664fSJonas Devlieghere rhs); 39baf5664fSJonas Devlieghere 40802dc402STodd Fiala if (this != &rhs) 41802dc402STodd Fiala m_opaque_wp = rhs.m_opaque_wp; 42*d232abc3SJonas Devlieghere return *this; 43802dc402STodd Fiala } 44802dc402STodd Fiala 45866b7a65SJonas Devlieghere SBUnixSignals::~SBUnixSignals() = default; 46802dc402STodd Fiala 47b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } 48802dc402STodd Fiala 49b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { 5098d0a4b3SChaoren Lin m_opaque_wp = signals_sp; 51802dc402STodd Fiala } 52802dc402STodd Fiala 53baf5664fSJonas Devlieghere void SBUnixSignals::Clear() { 54baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBUnixSignals, Clear); 55802dc402STodd Fiala 56baf5664fSJonas Devlieghere m_opaque_wp.reset(); 57baf5664fSJonas Devlieghere } 58baf5664fSJonas Devlieghere 59baf5664fSJonas Devlieghere bool SBUnixSignals::IsValid() const { 60baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, IsValid); 617f5237bcSPavel Labath return this->operator bool(); 627f5237bcSPavel Labath } 637f5237bcSPavel Labath SBUnixSignals::operator bool() const { 647f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, operator bool); 65baf5664fSJonas Devlieghere 66baf5664fSJonas Devlieghere return static_cast<bool>(GetSP()); 67baf5664fSJonas Devlieghere } 68802dc402STodd Fiala 69b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const { 70baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString, 71baf5664fSJonas Devlieghere (int32_t), signo); 72baf5664fSJonas Devlieghere 7398d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 7498d0a4b3SChaoren Lin return signals_sp->GetSignalAsCString(signo); 7598d0a4b3SChaoren Lin 7698d0a4b3SChaoren Lin return nullptr; 77802dc402STodd Fiala } 78802dc402STodd Fiala 79b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const { 80baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName, 81baf5664fSJonas Devlieghere (const char *), name); 82baf5664fSJonas Devlieghere 8398d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 8498d0a4b3SChaoren Lin return signals_sp->GetSignalNumberFromName(name); 8598d0a4b3SChaoren Lin 8698d0a4b3SChaoren Lin return LLDB_INVALID_SIGNAL_NUMBER; 87802dc402STodd Fiala } 88802dc402STodd Fiala 89b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const { 90baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress, (int32_t), 91baf5664fSJonas Devlieghere signo); 92baf5664fSJonas Devlieghere 9398d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 9498d0a4b3SChaoren Lin return signals_sp->GetShouldSuppress(signo); 9598d0a4b3SChaoren Lin 96802dc402STodd Fiala return false; 97802dc402STodd Fiala } 98802dc402STodd Fiala 99b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) { 100baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldSuppress, (int32_t, bool), 101baf5664fSJonas Devlieghere signo, value); 102baf5664fSJonas Devlieghere 10398d0a4b3SChaoren Lin auto signals_sp = GetSP(); 104802dc402STodd Fiala 10598d0a4b3SChaoren Lin if (signals_sp) 10698d0a4b3SChaoren Lin return signals_sp->SetShouldSuppress(signo, value); 10798d0a4b3SChaoren Lin 108802dc402STodd Fiala return false; 109802dc402STodd Fiala } 110802dc402STodd Fiala 111b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const { 112baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t), 113baf5664fSJonas Devlieghere signo); 114baf5664fSJonas Devlieghere 11598d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 11698d0a4b3SChaoren Lin return signals_sp->GetShouldStop(signo); 11798d0a4b3SChaoren Lin 118802dc402STodd Fiala return false; 119802dc402STodd Fiala } 120802dc402STodd Fiala 121b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) { 122baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool), signo, 123baf5664fSJonas Devlieghere value); 124baf5664fSJonas Devlieghere 12598d0a4b3SChaoren Lin auto signals_sp = GetSP(); 126802dc402STodd Fiala 12798d0a4b3SChaoren Lin if (signals_sp) 12898d0a4b3SChaoren Lin return signals_sp->SetShouldStop(signo, value); 12998d0a4b3SChaoren Lin 130802dc402STodd Fiala return false; 131802dc402STodd Fiala } 132802dc402STodd Fiala 133b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const { 134baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t), 135baf5664fSJonas Devlieghere signo); 136baf5664fSJonas Devlieghere 13798d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 13898d0a4b3SChaoren Lin return signals_sp->GetShouldNotify(signo); 13998d0a4b3SChaoren Lin 140802dc402STodd Fiala return false; 141802dc402STodd Fiala } 142802dc402STodd Fiala 143b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) { 144baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool), 145baf5664fSJonas Devlieghere signo, value); 146baf5664fSJonas Devlieghere 14798d0a4b3SChaoren Lin auto signals_sp = GetSP(); 148802dc402STodd Fiala 14998d0a4b3SChaoren Lin if (signals_sp) 15098d0a4b3SChaoren Lin return signals_sp->SetShouldNotify(signo, value); 15198d0a4b3SChaoren Lin 152802dc402STodd Fiala return false; 153802dc402STodd Fiala } 154802dc402STodd Fiala 155b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const { 156baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(int32_t, SBUnixSignals, GetNumSignals); 157baf5664fSJonas Devlieghere 15898d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 15998d0a4b3SChaoren Lin return signals_sp->GetNumSignals(); 16098d0a4b3SChaoren Lin 16198d0a4b3SChaoren Lin return -1; 162802dc402STodd Fiala } 163802dc402STodd Fiala 164b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const { 165baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex, (int32_t), 166baf5664fSJonas Devlieghere index); 167baf5664fSJonas Devlieghere 16898d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 16998d0a4b3SChaoren Lin return signals_sp->GetSignalAtIndex(index); 17098d0a4b3SChaoren Lin 171802dc402STodd Fiala return LLDB_INVALID_SIGNAL_NUMBER; 172802dc402STodd Fiala } 173