1b9c1b51eSKate Stone //===-- SBUnixSignals.cpp -------------------------------------------*- C++
2b9c1b51eSKate Stone //-*-===//
3802dc402STodd Fiala //
42946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
52946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
62946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7802dc402STodd Fiala //
8802dc402STodd Fiala //===----------------------------------------------------------------------===//
9802dc402STodd Fiala 
10*baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
11b9c1b51eSKate Stone #include "lldb/Target/Platform.h"
12b9c1b51eSKate Stone #include "lldb/Target/Process.h"
13b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h"
146f9e6901SZachary 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 
22*baf5664fSJonas Devlieghere SBUnixSignals::SBUnixSignals() {
23*baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBUnixSignals);
24*baf5664fSJonas Devlieghere }
25802dc402STodd Fiala 
26b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs)
27*baf5664fSJonas Devlieghere     : m_opaque_wp(rhs.m_opaque_wp) {
28*baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &), rhs);
29*baf5664fSJonas Devlieghere }
30802dc402STodd Fiala 
31b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp)
32b9c1b51eSKate Stone     : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {}
3398d0a4b3SChaoren Lin 
34b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp)
35b9c1b51eSKate Stone     : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {}
36802dc402STodd Fiala 
37b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) {
38*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBUnixSignals &,
39*baf5664fSJonas Devlieghere                      SBUnixSignals, operator=,(const lldb::SBUnixSignals &),
40*baf5664fSJonas Devlieghere                      rhs);
41*baf5664fSJonas Devlieghere 
42802dc402STodd Fiala   if (this != &rhs)
43802dc402STodd Fiala     m_opaque_wp = rhs.m_opaque_wp;
44802dc402STodd Fiala   return *this;
45802dc402STodd Fiala }
46802dc402STodd Fiala 
47b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {}
48802dc402STodd Fiala 
49b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); }
50802dc402STodd Fiala 
51b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) {
5298d0a4b3SChaoren Lin   m_opaque_wp = signals_sp;
53802dc402STodd Fiala }
54802dc402STodd Fiala 
55*baf5664fSJonas Devlieghere void SBUnixSignals::Clear() {
56*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBUnixSignals, Clear);
57802dc402STodd Fiala 
58*baf5664fSJonas Devlieghere   m_opaque_wp.reset();
59*baf5664fSJonas Devlieghere }
60*baf5664fSJonas Devlieghere 
61*baf5664fSJonas Devlieghere bool SBUnixSignals::IsValid() const {
62*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, IsValid);
63*baf5664fSJonas Devlieghere 
64*baf5664fSJonas Devlieghere   return static_cast<bool>(GetSP());
65*baf5664fSJonas Devlieghere }
66802dc402STodd Fiala 
67b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const {
68*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString,
69*baf5664fSJonas Devlieghere                            (int32_t), signo);
70*baf5664fSJonas Devlieghere 
7198d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
7298d0a4b3SChaoren Lin     return signals_sp->GetSignalAsCString(signo);
7398d0a4b3SChaoren Lin 
7498d0a4b3SChaoren Lin   return nullptr;
75802dc402STodd Fiala }
76802dc402STodd Fiala 
77b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const {
78*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName,
79*baf5664fSJonas Devlieghere                            (const char *), name);
80*baf5664fSJonas Devlieghere 
8198d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
8298d0a4b3SChaoren Lin     return signals_sp->GetSignalNumberFromName(name);
8398d0a4b3SChaoren Lin 
8498d0a4b3SChaoren Lin   return LLDB_INVALID_SIGNAL_NUMBER;
85802dc402STodd Fiala }
86802dc402STodd Fiala 
87b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const {
88*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress, (int32_t),
89*baf5664fSJonas Devlieghere                            signo);
90*baf5664fSJonas Devlieghere 
9198d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
9298d0a4b3SChaoren Lin     return signals_sp->GetShouldSuppress(signo);
9398d0a4b3SChaoren Lin 
94802dc402STodd Fiala   return false;
95802dc402STodd Fiala }
96802dc402STodd Fiala 
97b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) {
98*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldSuppress, (int32_t, bool),
99*baf5664fSJonas Devlieghere                      signo, value);
100*baf5664fSJonas Devlieghere 
101802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
10298d0a4b3SChaoren Lin   auto signals_sp = GetSP();
103802dc402STodd Fiala 
104b9c1b51eSKate Stone   if (log) {
105802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)",
106b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
107802dc402STodd Fiala   }
108802dc402STodd Fiala 
10998d0a4b3SChaoren Lin   if (signals_sp)
11098d0a4b3SChaoren Lin     return signals_sp->SetShouldSuppress(signo, value);
11198d0a4b3SChaoren Lin 
112802dc402STodd Fiala   return false;
113802dc402STodd Fiala }
114802dc402STodd Fiala 
115b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const {
116*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t),
117*baf5664fSJonas Devlieghere                            signo);
118*baf5664fSJonas Devlieghere 
11998d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
12098d0a4b3SChaoren Lin     return signals_sp->GetShouldStop(signo);
12198d0a4b3SChaoren Lin 
122802dc402STodd Fiala   return false;
123802dc402STodd Fiala }
124802dc402STodd Fiala 
125b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) {
126*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool), signo,
127*baf5664fSJonas Devlieghere                      value);
128*baf5664fSJonas Devlieghere 
129802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
13098d0a4b3SChaoren Lin   auto signals_sp = GetSP();
131802dc402STodd Fiala 
132b9c1b51eSKate Stone   if (log) {
133802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)",
134b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
135802dc402STodd Fiala   }
136802dc402STodd Fiala 
13798d0a4b3SChaoren Lin   if (signals_sp)
13898d0a4b3SChaoren Lin     return signals_sp->SetShouldStop(signo, value);
13998d0a4b3SChaoren Lin 
140802dc402STodd Fiala   return false;
141802dc402STodd Fiala }
142802dc402STodd Fiala 
143b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const {
144*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t),
145*baf5664fSJonas Devlieghere                            signo);
146*baf5664fSJonas Devlieghere 
14798d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
14898d0a4b3SChaoren Lin     return signals_sp->GetShouldNotify(signo);
14998d0a4b3SChaoren Lin 
150802dc402STodd Fiala   return false;
151802dc402STodd Fiala }
152802dc402STodd Fiala 
153b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) {
154*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool),
155*baf5664fSJonas Devlieghere                      signo, value);
156*baf5664fSJonas Devlieghere 
157802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
15898d0a4b3SChaoren Lin   auto signals_sp = GetSP();
159802dc402STodd Fiala 
160b9c1b51eSKate Stone   if (log) {
161802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)",
162b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
163802dc402STodd Fiala   }
164802dc402STodd Fiala 
16598d0a4b3SChaoren Lin   if (signals_sp)
16698d0a4b3SChaoren Lin     return signals_sp->SetShouldNotify(signo, value);
16798d0a4b3SChaoren Lin 
168802dc402STodd Fiala   return false;
169802dc402STodd Fiala }
170802dc402STodd Fiala 
171b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const {
172*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(int32_t, SBUnixSignals, GetNumSignals);
173*baf5664fSJonas Devlieghere 
17498d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
17598d0a4b3SChaoren Lin     return signals_sp->GetNumSignals();
17698d0a4b3SChaoren Lin 
17798d0a4b3SChaoren Lin   return -1;
178802dc402STodd Fiala }
179802dc402STodd Fiala 
180b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const {
181*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex, (int32_t),
182*baf5664fSJonas Devlieghere                            index);
183*baf5664fSJonas Devlieghere 
18498d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
18598d0a4b3SChaoren Lin     return signals_sp->GetSignalAtIndex(index);
18698d0a4b3SChaoren Lin 
187802dc402STodd Fiala   return LLDB_INVALID_SIGNAL_NUMBER;
188802dc402STodd Fiala }
189