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