1 //===-- SBUnixSignals.cpp -------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "lldb/Target/Platform.h" 10 #include "lldb/Target/Process.h" 11 #include "lldb/Target/UnixSignals.h" 12 #include "lldb/Utility/Instrumentation.h" 13 #include "lldb/lldb-defines.h" 14 15 #include "lldb/API/SBUnixSignals.h" 16 17 using namespace lldb; 18 using namespace lldb_private; 19 20 SBUnixSignals::SBUnixSignals() { LLDB_INSTRUMENT_VA(this); } 21 22 SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs) 23 : m_opaque_wp(rhs.m_opaque_wp) { 24 LLDB_INSTRUMENT_VA(this, rhs); 25 } 26 27 SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) 28 : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {} 29 30 SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) 31 : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {} 32 33 const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) { 34 LLDB_INSTRUMENT_VA(this, rhs); 35 36 if (this != &rhs) 37 m_opaque_wp = rhs.m_opaque_wp; 38 return *this; 39 } 40 41 SBUnixSignals::~SBUnixSignals() = default; 42 43 UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } 44 45 void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { 46 m_opaque_wp = signals_sp; 47 } 48 49 void SBUnixSignals::Clear() { 50 LLDB_INSTRUMENT_VA(this); 51 52 m_opaque_wp.reset(); 53 } 54 55 bool SBUnixSignals::IsValid() const { 56 LLDB_INSTRUMENT_VA(this); 57 return this->operator bool(); 58 } 59 SBUnixSignals::operator bool() const { 60 LLDB_INSTRUMENT_VA(this); 61 62 return static_cast<bool>(GetSP()); 63 } 64 65 const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const { 66 LLDB_INSTRUMENT_VA(this, signo); 67 68 if (auto signals_sp = GetSP()) 69 return ConstString(signals_sp->GetSignalAsCString(signo)).GetCString(); 70 71 return nullptr; 72 } 73 74 int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const { 75 LLDB_INSTRUMENT_VA(this, name); 76 77 if (auto signals_sp = GetSP()) 78 return signals_sp->GetSignalNumberFromName(name); 79 80 return LLDB_INVALID_SIGNAL_NUMBER; 81 } 82 83 bool SBUnixSignals::GetShouldSuppress(int32_t signo) const { 84 LLDB_INSTRUMENT_VA(this, signo); 85 86 if (auto signals_sp = GetSP()) 87 return signals_sp->GetShouldSuppress(signo); 88 89 return false; 90 } 91 92 bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) { 93 LLDB_INSTRUMENT_VA(this, signo, value); 94 95 auto signals_sp = GetSP(); 96 97 if (signals_sp) 98 return signals_sp->SetShouldSuppress(signo, value); 99 100 return false; 101 } 102 103 bool SBUnixSignals::GetShouldStop(int32_t signo) const { 104 LLDB_INSTRUMENT_VA(this, signo); 105 106 if (auto signals_sp = GetSP()) 107 return signals_sp->GetShouldStop(signo); 108 109 return false; 110 } 111 112 bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) { 113 LLDB_INSTRUMENT_VA(this, signo, value); 114 115 auto signals_sp = GetSP(); 116 117 if (signals_sp) 118 return signals_sp->SetShouldStop(signo, value); 119 120 return false; 121 } 122 123 bool SBUnixSignals::GetShouldNotify(int32_t signo) const { 124 LLDB_INSTRUMENT_VA(this, signo); 125 126 if (auto signals_sp = GetSP()) 127 return signals_sp->GetShouldNotify(signo); 128 129 return false; 130 } 131 132 bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) { 133 LLDB_INSTRUMENT_VA(this, signo, value); 134 135 auto signals_sp = GetSP(); 136 137 if (signals_sp) 138 return signals_sp->SetShouldNotify(signo, value); 139 140 return false; 141 } 142 143 int32_t SBUnixSignals::GetNumSignals() const { 144 LLDB_INSTRUMENT_VA(this); 145 146 if (auto signals_sp = GetSP()) 147 return signals_sp->GetNumSignals(); 148 149 return -1; 150 } 151 152 int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const { 153 LLDB_INSTRUMENT_VA(this, index); 154 155 if (auto signals_sp = GetSP()) 156 return signals_sp->GetSignalAtIndex(index); 157 158 return LLDB_INVALID_SIGNAL_NUMBER; 159 } 160