1 //===-- SBUnixSignals.cpp -------------------------------------------*- C++ 2 //-*-===// 3 // 4 // The LLVM Compiler Infrastructure 5 // 6 // This file is distributed under the University of Illinois Open Source 7 // License. See LICENSE.TXT for details. 8 // 9 //===----------------------------------------------------------------------===// 10 11 #include "lldb/Core/Log.h" 12 #include "lldb/Target/Platform.h" 13 #include "lldb/Target/Process.h" 14 #include "lldb/Target/UnixSignals.h" 15 #include "lldb/lldb-defines.h" 16 17 #include "lldb/API/SBUnixSignals.h" 18 19 using namespace lldb; 20 using namespace lldb_private; 21 22 SBUnixSignals::SBUnixSignals() {} 23 24 SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs) 25 : m_opaque_wp(rhs.m_opaque_wp) {} 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 if (this != &rhs) 35 m_opaque_wp = rhs.m_opaque_wp; 36 return *this; 37 } 38 39 SBUnixSignals::~SBUnixSignals() {} 40 41 UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); } 42 43 void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) { 44 m_opaque_wp = signals_sp; 45 } 46 47 void SBUnixSignals::Clear() { m_opaque_wp.reset(); } 48 49 bool SBUnixSignals::IsValid() const { return static_cast<bool>(GetSP()); } 50 51 const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const { 52 if (auto signals_sp = GetSP()) 53 return signals_sp->GetSignalAsCString(signo); 54 55 return nullptr; 56 } 57 58 int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const { 59 if (auto signals_sp = GetSP()) 60 return signals_sp->GetSignalNumberFromName(name); 61 62 return LLDB_INVALID_SIGNAL_NUMBER; 63 } 64 65 bool SBUnixSignals::GetShouldSuppress(int32_t signo) const { 66 if (auto signals_sp = GetSP()) 67 return signals_sp->GetShouldSuppress(signo); 68 69 return false; 70 } 71 72 bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) { 73 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 74 auto signals_sp = GetSP(); 75 76 if (log) { 77 log->Printf("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)", 78 static_cast<void *>(signals_sp.get()), signo, value); 79 } 80 81 if (signals_sp) 82 return signals_sp->SetShouldSuppress(signo, value); 83 84 return false; 85 } 86 87 bool SBUnixSignals::GetShouldStop(int32_t signo) const { 88 if (auto signals_sp = GetSP()) 89 return signals_sp->GetShouldStop(signo); 90 91 return false; 92 } 93 94 bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) { 95 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 96 auto signals_sp = GetSP(); 97 98 if (log) { 99 log->Printf("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)", 100 static_cast<void *>(signals_sp.get()), signo, value); 101 } 102 103 if (signals_sp) 104 return signals_sp->SetShouldStop(signo, value); 105 106 return false; 107 } 108 109 bool SBUnixSignals::GetShouldNotify(int32_t signo) const { 110 if (auto signals_sp = GetSP()) 111 return signals_sp->GetShouldNotify(signo); 112 113 return false; 114 } 115 116 bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) { 117 Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 118 auto signals_sp = GetSP(); 119 120 if (log) { 121 log->Printf("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)", 122 static_cast<void *>(signals_sp.get()), signo, value); 123 } 124 125 if (signals_sp) 126 return signals_sp->SetShouldNotify(signo, value); 127 128 return false; 129 } 130 131 int32_t SBUnixSignals::GetNumSignals() const { 132 if (auto signals_sp = GetSP()) 133 return signals_sp->GetNumSignals(); 134 135 return -1; 136 } 137 138 int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const { 139 if (auto signals_sp = GetSP()) 140 return signals_sp->GetSignalAtIndex(index); 141 142 return LLDB_INVALID_SIGNAL_NUMBER; 143 } 144