1b9c1b51eSKate Stone //===-- SBUnixSignals.cpp -------------------------------------------*- C++
2b9c1b51eSKate Stone //-*-===//
3802dc402STodd Fiala //
4802dc402STodd Fiala //                     The LLVM Compiler Infrastructure
5802dc402STodd Fiala //
6802dc402STodd Fiala // This file is distributed under the University of Illinois Open Source
7802dc402STodd Fiala // License. See LICENSE.TXT for details.
8802dc402STodd Fiala //
9802dc402STodd Fiala //===----------------------------------------------------------------------===//
10802dc402STodd Fiala 
11b9c1b51eSKate Stone #include "lldb/Target/Platform.h"
12b9c1b51eSKate Stone #include "lldb/Target/Process.h"
13b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h"
14*6f9e6901SZachary Turner #include "lldb/Utility/Log.h"
15b9c1b51eSKate Stone #include "lldb/lldb-defines.h"
16802dc402STodd Fiala 
17802dc402STodd Fiala #include "lldb/API/SBUnixSignals.h"
18802dc402STodd Fiala 
19802dc402STodd Fiala using namespace lldb;
20802dc402STodd Fiala using namespace lldb_private;
21802dc402STodd Fiala 
22b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals() {}
23802dc402STodd Fiala 
24b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs)
25b9c1b51eSKate Stone     : m_opaque_wp(rhs.m_opaque_wp) {}
26802dc402STodd Fiala 
27b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp)
28b9c1b51eSKate Stone     : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {}
2998d0a4b3SChaoren Lin 
30b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp)
31b9c1b51eSKate Stone     : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {}
32802dc402STodd Fiala 
33b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) {
34802dc402STodd Fiala   if (this != &rhs)
35802dc402STodd Fiala     m_opaque_wp = rhs.m_opaque_wp;
36802dc402STodd Fiala   return *this;
37802dc402STodd Fiala }
38802dc402STodd Fiala 
39b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {}
40802dc402STodd Fiala 
41b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); }
42802dc402STodd Fiala 
43b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) {
4498d0a4b3SChaoren Lin   m_opaque_wp = signals_sp;
45802dc402STodd Fiala }
46802dc402STodd Fiala 
47b9c1b51eSKate Stone void SBUnixSignals::Clear() { m_opaque_wp.reset(); }
48802dc402STodd Fiala 
49b9c1b51eSKate Stone bool SBUnixSignals::IsValid() const { return static_cast<bool>(GetSP()); }
50802dc402STodd Fiala 
51b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const {
5298d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
5398d0a4b3SChaoren Lin     return signals_sp->GetSignalAsCString(signo);
5498d0a4b3SChaoren Lin 
5598d0a4b3SChaoren Lin   return nullptr;
56802dc402STodd Fiala }
57802dc402STodd Fiala 
58b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const {
5998d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
6098d0a4b3SChaoren Lin     return signals_sp->GetSignalNumberFromName(name);
6198d0a4b3SChaoren Lin 
6298d0a4b3SChaoren Lin   return LLDB_INVALID_SIGNAL_NUMBER;
63802dc402STodd Fiala }
64802dc402STodd Fiala 
65b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const {
6698d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
6798d0a4b3SChaoren Lin     return signals_sp->GetShouldSuppress(signo);
6898d0a4b3SChaoren Lin 
69802dc402STodd Fiala   return false;
70802dc402STodd Fiala }
71802dc402STodd Fiala 
72b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) {
73802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
7498d0a4b3SChaoren Lin   auto signals_sp = GetSP();
75802dc402STodd Fiala 
76b9c1b51eSKate Stone   if (log) {
77802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)",
78b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
79802dc402STodd Fiala   }
80802dc402STodd Fiala 
8198d0a4b3SChaoren Lin   if (signals_sp)
8298d0a4b3SChaoren Lin     return signals_sp->SetShouldSuppress(signo, value);
8398d0a4b3SChaoren Lin 
84802dc402STodd Fiala   return false;
85802dc402STodd Fiala }
86802dc402STodd Fiala 
87b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const {
8898d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
8998d0a4b3SChaoren Lin     return signals_sp->GetShouldStop(signo);
9098d0a4b3SChaoren Lin 
91802dc402STodd Fiala   return false;
92802dc402STodd Fiala }
93802dc402STodd Fiala 
94b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) {
95802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
9698d0a4b3SChaoren Lin   auto signals_sp = GetSP();
97802dc402STodd Fiala 
98b9c1b51eSKate Stone   if (log) {
99802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)",
100b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
101802dc402STodd Fiala   }
102802dc402STodd Fiala 
10398d0a4b3SChaoren Lin   if (signals_sp)
10498d0a4b3SChaoren Lin     return signals_sp->SetShouldStop(signo, value);
10598d0a4b3SChaoren Lin 
106802dc402STodd Fiala   return false;
107802dc402STodd Fiala }
108802dc402STodd Fiala 
109b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const {
11098d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
11198d0a4b3SChaoren Lin     return signals_sp->GetShouldNotify(signo);
11298d0a4b3SChaoren Lin 
113802dc402STodd Fiala   return false;
114802dc402STodd Fiala }
115802dc402STodd Fiala 
116b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) {
117802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
11898d0a4b3SChaoren Lin   auto signals_sp = GetSP();
119802dc402STodd Fiala 
120b9c1b51eSKate Stone   if (log) {
121802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)",
122b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
123802dc402STodd Fiala   }
124802dc402STodd Fiala 
12598d0a4b3SChaoren Lin   if (signals_sp)
12698d0a4b3SChaoren Lin     return signals_sp->SetShouldNotify(signo, value);
12798d0a4b3SChaoren Lin 
128802dc402STodd Fiala   return false;
129802dc402STodd Fiala }
130802dc402STodd Fiala 
131b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const {
13298d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
13398d0a4b3SChaoren Lin     return signals_sp->GetNumSignals();
13498d0a4b3SChaoren Lin 
13598d0a4b3SChaoren Lin   return -1;
136802dc402STodd Fiala }
137802dc402STodd Fiala 
138b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const {
13998d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
14098d0a4b3SChaoren Lin     return signals_sp->GetSignalAtIndex(index);
14198d0a4b3SChaoren Lin 
142802dc402STodd Fiala   return LLDB_INVALID_SIGNAL_NUMBER;
143802dc402STodd Fiala }
144