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 
10baf5664fSJonas 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"
14b9c1b51eSKate Stone #include "lldb/lldb-defines.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 
21baf5664fSJonas Devlieghere SBUnixSignals::SBUnixSignals() {
22baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBUnixSignals);
23baf5664fSJonas Devlieghere }
24802dc402STodd Fiala 
25b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs)
26baf5664fSJonas Devlieghere     : m_opaque_wp(rhs.m_opaque_wp) {
27baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &), rhs);
28baf5664fSJonas Devlieghere }
29802dc402STodd Fiala 
30b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp)
31b9c1b51eSKate Stone     : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {}
3298d0a4b3SChaoren Lin 
33b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp)
34b9c1b51eSKate Stone     : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {}
35802dc402STodd Fiala 
36b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) {
37baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBUnixSignals &,
38baf5664fSJonas Devlieghere                      SBUnixSignals, operator=,(const lldb::SBUnixSignals &),
39baf5664fSJonas Devlieghere                      rhs);
40baf5664fSJonas Devlieghere 
41802dc402STodd Fiala   if (this != &rhs)
42802dc402STodd Fiala     m_opaque_wp = rhs.m_opaque_wp;
43*306809f2SJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
44802dc402STodd Fiala }
45802dc402STodd Fiala 
46b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {}
47802dc402STodd Fiala 
48b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); }
49802dc402STodd Fiala 
50b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) {
5198d0a4b3SChaoren Lin   m_opaque_wp = signals_sp;
52802dc402STodd Fiala }
53802dc402STodd Fiala 
54baf5664fSJonas Devlieghere void SBUnixSignals::Clear() {
55baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBUnixSignals, Clear);
56802dc402STodd Fiala 
57baf5664fSJonas Devlieghere   m_opaque_wp.reset();
58baf5664fSJonas Devlieghere }
59baf5664fSJonas Devlieghere 
60baf5664fSJonas Devlieghere bool SBUnixSignals::IsValid() const {
61baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, IsValid);
627f5237bcSPavel Labath   return this->operator bool();
637f5237bcSPavel Labath }
647f5237bcSPavel Labath SBUnixSignals::operator bool() const {
657f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, operator bool);
66baf5664fSJonas Devlieghere 
67baf5664fSJonas Devlieghere   return static_cast<bool>(GetSP());
68baf5664fSJonas Devlieghere }
69802dc402STodd Fiala 
70b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const {
71baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString,
72baf5664fSJonas Devlieghere                            (int32_t), signo);
73baf5664fSJonas Devlieghere 
7498d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
7598d0a4b3SChaoren Lin     return signals_sp->GetSignalAsCString(signo);
7698d0a4b3SChaoren Lin 
7798d0a4b3SChaoren Lin   return nullptr;
78802dc402STodd Fiala }
79802dc402STodd Fiala 
80b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const {
81baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName,
82baf5664fSJonas Devlieghere                            (const char *), name);
83baf5664fSJonas Devlieghere 
8498d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
8598d0a4b3SChaoren Lin     return signals_sp->GetSignalNumberFromName(name);
8698d0a4b3SChaoren Lin 
8798d0a4b3SChaoren Lin   return LLDB_INVALID_SIGNAL_NUMBER;
88802dc402STodd Fiala }
89802dc402STodd Fiala 
90b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const {
91baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress, (int32_t),
92baf5664fSJonas Devlieghere                            signo);
93baf5664fSJonas Devlieghere 
9498d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
9598d0a4b3SChaoren Lin     return signals_sp->GetShouldSuppress(signo);
9698d0a4b3SChaoren Lin 
97802dc402STodd Fiala   return false;
98802dc402STodd Fiala }
99802dc402STodd Fiala 
100b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) {
101baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldSuppress, (int32_t, bool),
102baf5664fSJonas Devlieghere                      signo, value);
103baf5664fSJonas Devlieghere 
10498d0a4b3SChaoren Lin   auto signals_sp = GetSP();
105802dc402STodd Fiala 
10698d0a4b3SChaoren Lin   if (signals_sp)
10798d0a4b3SChaoren Lin     return signals_sp->SetShouldSuppress(signo, value);
10898d0a4b3SChaoren Lin 
109802dc402STodd Fiala   return false;
110802dc402STodd Fiala }
111802dc402STodd Fiala 
112b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const {
113baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t),
114baf5664fSJonas Devlieghere                            signo);
115baf5664fSJonas Devlieghere 
11698d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
11798d0a4b3SChaoren Lin     return signals_sp->GetShouldStop(signo);
11898d0a4b3SChaoren Lin 
119802dc402STodd Fiala   return false;
120802dc402STodd Fiala }
121802dc402STodd Fiala 
122b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) {
123baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool), signo,
124baf5664fSJonas Devlieghere                      value);
125baf5664fSJonas Devlieghere 
12698d0a4b3SChaoren Lin   auto signals_sp = GetSP();
127802dc402STodd Fiala 
12898d0a4b3SChaoren Lin   if (signals_sp)
12998d0a4b3SChaoren Lin     return signals_sp->SetShouldStop(signo, value);
13098d0a4b3SChaoren Lin 
131802dc402STodd Fiala   return false;
132802dc402STodd Fiala }
133802dc402STodd Fiala 
134b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const {
135baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t),
136baf5664fSJonas Devlieghere                            signo);
137baf5664fSJonas Devlieghere 
13898d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
13998d0a4b3SChaoren Lin     return signals_sp->GetShouldNotify(signo);
14098d0a4b3SChaoren Lin 
141802dc402STodd Fiala   return false;
142802dc402STodd Fiala }
143802dc402STodd Fiala 
144b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) {
145baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool),
146baf5664fSJonas Devlieghere                      signo, value);
147baf5664fSJonas Devlieghere 
14898d0a4b3SChaoren Lin   auto signals_sp = GetSP();
149802dc402STodd Fiala 
15098d0a4b3SChaoren Lin   if (signals_sp)
15198d0a4b3SChaoren Lin     return signals_sp->SetShouldNotify(signo, value);
15298d0a4b3SChaoren Lin 
153802dc402STodd Fiala   return false;
154802dc402STodd Fiala }
155802dc402STodd Fiala 
156b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const {
157baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(int32_t, SBUnixSignals, GetNumSignals);
158baf5664fSJonas Devlieghere 
15998d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
16098d0a4b3SChaoren Lin     return signals_sp->GetNumSignals();
16198d0a4b3SChaoren Lin 
16298d0a4b3SChaoren Lin   return -1;
163802dc402STodd Fiala }
164802dc402STodd Fiala 
165b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const {
166baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex, (int32_t),
167baf5664fSJonas Devlieghere                            index);
168baf5664fSJonas Devlieghere 
16998d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
17098d0a4b3SChaoren Lin     return signals_sp->GetSignalAtIndex(index);
17198d0a4b3SChaoren Lin 
172802dc402STodd Fiala   return LLDB_INVALID_SIGNAL_NUMBER;
173802dc402STodd Fiala }
174ae211eceSMichal Gorny 
175ae211eceSMichal Gorny namespace lldb_private {
176ae211eceSMichal Gorny namespace repro {
177ae211eceSMichal Gorny 
178ae211eceSMichal Gorny template <>
179ae211eceSMichal Gorny void RegisterMethods<SBUnixSignals>(Registry &R) {
180ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBUnixSignals, ());
181ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &));
182ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
183ae211eceSMichal Gorny       const lldb::SBUnixSignals &,
184ae211eceSMichal Gorny       SBUnixSignals, operator=,(const lldb::SBUnixSignals &));
185ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBUnixSignals, Clear, ());
186ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, IsValid, ());
187ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, operator bool, ());
188ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString,
189ae211eceSMichal Gorny                              (int32_t));
190ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName,
191ae211eceSMichal Gorny                              (const char *));
192ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress,
193ae211eceSMichal Gorny                              (int32_t));
194ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBUnixSignals, SetShouldSuppress,
195ae211eceSMichal Gorny                        (int32_t, bool));
196ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t));
197ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool));
198ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t));
199ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool));
200ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(int32_t, SBUnixSignals, GetNumSignals, ());
201ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex,
202ae211eceSMichal Gorny                              (int32_t));
203ae211eceSMichal Gorny }
204ae211eceSMichal Gorny 
205ae211eceSMichal Gorny }
206ae211eceSMichal Gorny }
207