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 10baf5664fSJonas 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" 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 21baf5664fSJonas Devlieghere SBUnixSignals::SBUnixSignals() { 22baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBUnixSignals); 23baf5664fSJonas Devlieghere } 24802dc402STodd Fiala 25b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs) 26baf5664fSJonas Devlieghere : m_opaque_wp(rhs.m_opaque_wp) { 27baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &), rhs); 28baf5664fSJonas Devlieghere } 29802dc402STodd Fiala 30b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) 31b9c1b51eSKate Stone : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {} 3298d0a4b3SChaoren Lin 33b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) 34b9c1b51eSKate Stone : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {} 35802dc402STodd Fiala 36b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) { 37baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBUnixSignals &, 38baf5664fSJonas Devlieghere SBUnixSignals, operator=,(const lldb::SBUnixSignals &), 39baf5664fSJonas Devlieghere rhs); 40baf5664fSJonas Devlieghere 41802dc402STodd Fiala if (this != &rhs) 42802dc402STodd Fiala m_opaque_wp = rhs.m_opaque_wp; 43*306809f2SJonas Devlieghere return LLDB_RECORD_RESULT(*this); 44802dc402STodd Fiala } 45802dc402STodd Fiala 46b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {} 47802dc402STodd Fiala 48b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } 49802dc402STodd Fiala 50b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { 5198d0a4b3SChaoren Lin m_opaque_wp = signals_sp; 52802dc402STodd Fiala } 53802dc402STodd Fiala 54baf5664fSJonas Devlieghere void SBUnixSignals::Clear() { 55baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBUnixSignals, Clear); 56802dc402STodd Fiala 57baf5664fSJonas Devlieghere m_opaque_wp.reset(); 58baf5664fSJonas Devlieghere } 59baf5664fSJonas Devlieghere 60baf5664fSJonas Devlieghere bool SBUnixSignals::IsValid() const { 61baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, IsValid); 627f5237bcSPavel Labath return this->operator bool(); 637f5237bcSPavel Labath } 647f5237bcSPavel Labath SBUnixSignals::operator bool() const { 657f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, operator bool); 66baf5664fSJonas Devlieghere 67baf5664fSJonas Devlieghere return static_cast<bool>(GetSP()); 68baf5664fSJonas Devlieghere } 69802dc402STodd Fiala 70b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const { 71baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString, 72baf5664fSJonas Devlieghere (int32_t), signo); 73baf5664fSJonas Devlieghere 7498d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 7598d0a4b3SChaoren Lin return signals_sp->GetSignalAsCString(signo); 7698d0a4b3SChaoren Lin 7798d0a4b3SChaoren Lin return nullptr; 78802dc402STodd Fiala } 79802dc402STodd Fiala 80b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const { 81baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName, 82baf5664fSJonas Devlieghere (const char *), name); 83baf5664fSJonas Devlieghere 8498d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 8598d0a4b3SChaoren Lin return signals_sp->GetSignalNumberFromName(name); 8698d0a4b3SChaoren Lin 8798d0a4b3SChaoren Lin return LLDB_INVALID_SIGNAL_NUMBER; 88802dc402STodd Fiala } 89802dc402STodd Fiala 90b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const { 91baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress, (int32_t), 92baf5664fSJonas Devlieghere signo); 93baf5664fSJonas Devlieghere 9498d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 9598d0a4b3SChaoren Lin return signals_sp->GetShouldSuppress(signo); 9698d0a4b3SChaoren Lin 97802dc402STodd Fiala return false; 98802dc402STodd Fiala } 99802dc402STodd Fiala 100b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) { 101baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldSuppress, (int32_t, bool), 102baf5664fSJonas Devlieghere signo, value); 103baf5664fSJonas Devlieghere 10498d0a4b3SChaoren Lin auto signals_sp = GetSP(); 105802dc402STodd Fiala 10698d0a4b3SChaoren Lin if (signals_sp) 10798d0a4b3SChaoren Lin return signals_sp->SetShouldSuppress(signo, value); 10898d0a4b3SChaoren Lin 109802dc402STodd Fiala return false; 110802dc402STodd Fiala } 111802dc402STodd Fiala 112b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const { 113baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t), 114baf5664fSJonas Devlieghere signo); 115baf5664fSJonas Devlieghere 11698d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 11798d0a4b3SChaoren Lin return signals_sp->GetShouldStop(signo); 11898d0a4b3SChaoren Lin 119802dc402STodd Fiala return false; 120802dc402STodd Fiala } 121802dc402STodd Fiala 122b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) { 123baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool), signo, 124baf5664fSJonas Devlieghere value); 125baf5664fSJonas Devlieghere 12698d0a4b3SChaoren Lin auto signals_sp = GetSP(); 127802dc402STodd Fiala 12898d0a4b3SChaoren Lin if (signals_sp) 12998d0a4b3SChaoren Lin return signals_sp->SetShouldStop(signo, value); 13098d0a4b3SChaoren Lin 131802dc402STodd Fiala return false; 132802dc402STodd Fiala } 133802dc402STodd Fiala 134b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const { 135baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t), 136baf5664fSJonas Devlieghere signo); 137baf5664fSJonas Devlieghere 13898d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 13998d0a4b3SChaoren Lin return signals_sp->GetShouldNotify(signo); 14098d0a4b3SChaoren Lin 141802dc402STodd Fiala return false; 142802dc402STodd Fiala } 143802dc402STodd Fiala 144b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) { 145baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool), 146baf5664fSJonas Devlieghere signo, value); 147baf5664fSJonas Devlieghere 14898d0a4b3SChaoren Lin auto signals_sp = GetSP(); 149802dc402STodd Fiala 15098d0a4b3SChaoren Lin if (signals_sp) 15198d0a4b3SChaoren Lin return signals_sp->SetShouldNotify(signo, value); 15298d0a4b3SChaoren Lin 153802dc402STodd Fiala return false; 154802dc402STodd Fiala } 155802dc402STodd Fiala 156b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const { 157baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(int32_t, SBUnixSignals, GetNumSignals); 158baf5664fSJonas Devlieghere 15998d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 16098d0a4b3SChaoren Lin return signals_sp->GetNumSignals(); 16198d0a4b3SChaoren Lin 16298d0a4b3SChaoren Lin return -1; 163802dc402STodd Fiala } 164802dc402STodd Fiala 165b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const { 166baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex, (int32_t), 167baf5664fSJonas Devlieghere index); 168baf5664fSJonas Devlieghere 16998d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 17098d0a4b3SChaoren Lin return signals_sp->GetSignalAtIndex(index); 17198d0a4b3SChaoren Lin 172802dc402STodd Fiala return LLDB_INVALID_SIGNAL_NUMBER; 173802dc402STodd Fiala } 174ae211eceSMichal Gorny 175ae211eceSMichal Gorny namespace lldb_private { 176ae211eceSMichal Gorny namespace repro { 177ae211eceSMichal Gorny 178ae211eceSMichal Gorny template <> 179ae211eceSMichal Gorny void RegisterMethods<SBUnixSignals>(Registry &R) { 180ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBUnixSignals, ()); 181ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &)); 182ae211eceSMichal Gorny LLDB_REGISTER_METHOD( 183ae211eceSMichal Gorny const lldb::SBUnixSignals &, 184ae211eceSMichal Gorny SBUnixSignals, operator=,(const lldb::SBUnixSignals &)); 185ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBUnixSignals, Clear, ()); 186ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, IsValid, ()); 187ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, operator bool, ()); 188ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString, 189ae211eceSMichal Gorny (int32_t)); 190ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName, 191ae211eceSMichal Gorny (const char *)); 192ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress, 193ae211eceSMichal Gorny (int32_t)); 194ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBUnixSignals, SetShouldSuppress, 195ae211eceSMichal Gorny (int32_t, bool)); 196ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t)); 197ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool)); 198ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t)); 199ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool)); 200ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(int32_t, SBUnixSignals, GetNumSignals, ()); 201ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex, 202ae211eceSMichal Gorny (int32_t)); 203ae211eceSMichal Gorny } 204ae211eceSMichal Gorny 205ae211eceSMichal Gorny } 206ae211eceSMichal Gorny } 207