1802dc402STodd Fiala //===-- SBUnixSignals.cpp -------------------------------------------*- C++ -*-===// 2802dc402STodd Fiala // 3802dc402STodd Fiala // The LLVM Compiler Infrastructure 4802dc402STodd Fiala // 5802dc402STodd Fiala // This file is distributed under the University of Illinois Open Source 6802dc402STodd Fiala // License. See LICENSE.TXT for details. 7802dc402STodd Fiala // 8802dc402STodd Fiala //===----------------------------------------------------------------------===// 9802dc402STodd Fiala 10802dc402STodd Fiala #include "lldb/lldb-defines.h" 11802dc402STodd Fiala #include "lldb/Target/Process.h" 12*98d0a4b3SChaoren Lin #include "lldb/Target/Platform.h" 13802dc402STodd Fiala #include "lldb/Target/UnixSignals.h" 14802dc402STodd Fiala #include "lldb/Core/Log.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 21802dc402STodd Fiala SBUnixSignals::SBUnixSignals () 22802dc402STodd Fiala {} 23802dc402STodd Fiala 24802dc402STodd Fiala SBUnixSignals::SBUnixSignals (const SBUnixSignals &rhs) : 25802dc402STodd Fiala m_opaque_wp(rhs.m_opaque_wp) 26802dc402STodd Fiala { 27802dc402STodd Fiala } 28802dc402STodd Fiala 29802dc402STodd Fiala SBUnixSignals::SBUnixSignals(ProcessSP &process_sp) : 30*98d0a4b3SChaoren Lin m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) 31*98d0a4b3SChaoren Lin { 32*98d0a4b3SChaoren Lin } 33*98d0a4b3SChaoren Lin 34*98d0a4b3SChaoren Lin SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp) : 35*98d0a4b3SChaoren Lin m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) 36802dc402STodd Fiala { 37802dc402STodd Fiala } 38802dc402STodd Fiala 39802dc402STodd Fiala const SBUnixSignals& 40802dc402STodd Fiala SBUnixSignals::operator = (const SBUnixSignals& rhs) 41802dc402STodd Fiala { 42802dc402STodd Fiala if (this != &rhs) 43802dc402STodd Fiala m_opaque_wp = rhs.m_opaque_wp; 44802dc402STodd Fiala return *this; 45802dc402STodd Fiala } 46802dc402STodd Fiala 47802dc402STodd Fiala SBUnixSignals::~SBUnixSignals() 48802dc402STodd Fiala { 49802dc402STodd Fiala } 50802dc402STodd Fiala 51*98d0a4b3SChaoren Lin UnixSignalsSP 52802dc402STodd Fiala SBUnixSignals::GetSP() const 53802dc402STodd Fiala { 54802dc402STodd Fiala return m_opaque_wp.lock(); 55802dc402STodd Fiala } 56802dc402STodd Fiala 57802dc402STodd Fiala void 58*98d0a4b3SChaoren Lin SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) 59802dc402STodd Fiala { 60*98d0a4b3SChaoren Lin m_opaque_wp = signals_sp; 61802dc402STodd Fiala } 62802dc402STodd Fiala 63802dc402STodd Fiala void 64802dc402STodd Fiala SBUnixSignals::Clear () 65802dc402STodd Fiala { 66802dc402STodd Fiala m_opaque_wp.reset(); 67802dc402STodd Fiala } 68802dc402STodd Fiala 69802dc402STodd Fiala bool 70802dc402STodd Fiala SBUnixSignals::IsValid() const 71802dc402STodd Fiala { 72*98d0a4b3SChaoren Lin return static_cast<bool>(GetSP()); 73802dc402STodd Fiala } 74802dc402STodd Fiala 75802dc402STodd Fiala const char * 76802dc402STodd Fiala SBUnixSignals::GetSignalAsCString (int32_t signo) const 77802dc402STodd Fiala { 78*98d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 79*98d0a4b3SChaoren Lin return signals_sp->GetSignalAsCString(signo); 80*98d0a4b3SChaoren Lin 81*98d0a4b3SChaoren Lin return nullptr; 82802dc402STodd Fiala } 83802dc402STodd Fiala 84802dc402STodd Fiala int32_t 85802dc402STodd Fiala SBUnixSignals::GetSignalNumberFromName (const char *name) const 86802dc402STodd Fiala { 87*98d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 88*98d0a4b3SChaoren Lin return signals_sp->GetSignalNumberFromName(name); 89*98d0a4b3SChaoren Lin 90*98d0a4b3SChaoren Lin return LLDB_INVALID_SIGNAL_NUMBER; 91802dc402STodd Fiala } 92802dc402STodd Fiala 93802dc402STodd Fiala bool 94802dc402STodd Fiala SBUnixSignals::GetShouldSuppress (int32_t signo) const 95802dc402STodd Fiala { 96*98d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 97*98d0a4b3SChaoren Lin return signals_sp->GetShouldSuppress(signo); 98*98d0a4b3SChaoren Lin 99802dc402STodd Fiala return false; 100802dc402STodd Fiala } 101802dc402STodd Fiala 102802dc402STodd Fiala bool 103802dc402STodd Fiala SBUnixSignals::SetShouldSuppress (int32_t signo, bool value) 104802dc402STodd Fiala { 105802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 106*98d0a4b3SChaoren Lin auto signals_sp = GetSP(); 107802dc402STodd Fiala 108802dc402STodd Fiala if (log) 109802dc402STodd Fiala { 110802dc402STodd Fiala log->Printf ("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)", 111*98d0a4b3SChaoren Lin static_cast<void*>(signals_sp.get()), 112802dc402STodd Fiala signo, 113802dc402STodd Fiala value); 114802dc402STodd Fiala } 115802dc402STodd Fiala 116*98d0a4b3SChaoren Lin if (signals_sp) 117*98d0a4b3SChaoren Lin return signals_sp->SetShouldSuppress(signo, value); 118*98d0a4b3SChaoren Lin 119802dc402STodd Fiala return false; 120802dc402STodd Fiala } 121802dc402STodd Fiala 122802dc402STodd Fiala bool 123802dc402STodd Fiala SBUnixSignals::GetShouldStop (int32_t signo) const 124802dc402STodd Fiala { 125*98d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 126*98d0a4b3SChaoren Lin return signals_sp->GetShouldStop(signo); 127*98d0a4b3SChaoren Lin 128802dc402STodd Fiala return false; 129802dc402STodd Fiala } 130802dc402STodd Fiala 131802dc402STodd Fiala bool 132802dc402STodd Fiala SBUnixSignals::SetShouldStop (int32_t signo, bool value) 133802dc402STodd Fiala { 134802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 135*98d0a4b3SChaoren Lin auto signals_sp = GetSP(); 136802dc402STodd Fiala 137802dc402STodd Fiala if (log) 138802dc402STodd Fiala { 139802dc402STodd Fiala log->Printf ("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)", 140*98d0a4b3SChaoren Lin static_cast<void*>(signals_sp.get()), 141802dc402STodd Fiala signo, 142802dc402STodd Fiala value); 143802dc402STodd Fiala } 144802dc402STodd Fiala 145*98d0a4b3SChaoren Lin if (signals_sp) 146*98d0a4b3SChaoren Lin return signals_sp->SetShouldStop(signo, value); 147*98d0a4b3SChaoren Lin 148802dc402STodd Fiala return false; 149802dc402STodd Fiala } 150802dc402STodd Fiala 151802dc402STodd Fiala bool 152802dc402STodd Fiala SBUnixSignals::GetShouldNotify (int32_t signo) const 153802dc402STodd Fiala { 154*98d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 155*98d0a4b3SChaoren Lin return signals_sp->GetShouldNotify(signo); 156*98d0a4b3SChaoren Lin 157802dc402STodd Fiala return false; 158802dc402STodd Fiala } 159802dc402STodd Fiala 160802dc402STodd Fiala bool 161802dc402STodd Fiala SBUnixSignals::SetShouldNotify (int32_t signo, bool value) 162802dc402STodd Fiala { 163802dc402STodd Fiala Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 164*98d0a4b3SChaoren Lin auto signals_sp = GetSP(); 165802dc402STodd Fiala 166802dc402STodd Fiala if (log) 167802dc402STodd Fiala { 168802dc402STodd Fiala log->Printf ("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)", 169*98d0a4b3SChaoren Lin static_cast<void*>(signals_sp.get()), 170802dc402STodd Fiala signo, 171802dc402STodd Fiala value); 172802dc402STodd Fiala } 173802dc402STodd Fiala 174*98d0a4b3SChaoren Lin if (signals_sp) 175*98d0a4b3SChaoren Lin return signals_sp->SetShouldNotify(signo, value); 176*98d0a4b3SChaoren Lin 177802dc402STodd Fiala return false; 178802dc402STodd Fiala } 179802dc402STodd Fiala 180802dc402STodd Fiala int32_t 181802dc402STodd Fiala SBUnixSignals::GetNumSignals () const 182802dc402STodd Fiala { 183*98d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 184*98d0a4b3SChaoren Lin return signals_sp->GetNumSignals(); 185*98d0a4b3SChaoren Lin 186*98d0a4b3SChaoren Lin return -1; 187802dc402STodd Fiala } 188802dc402STodd Fiala 189802dc402STodd Fiala int32_t 190802dc402STodd Fiala SBUnixSignals::GetSignalAtIndex (int32_t index) const 191802dc402STodd Fiala { 192*98d0a4b3SChaoren Lin if (auto signals_sp = GetSP()) 193*98d0a4b3SChaoren Lin return signals_sp->GetSignalAtIndex(index); 194*98d0a4b3SChaoren Lin 195802dc402STodd Fiala return LLDB_INVALID_SIGNAL_NUMBER; 196802dc402STodd Fiala } 197