180814287SRaphael Isemann //===-- SBUnixSignals.cpp -------------------------------------------------===//
2802dc402STodd Fiala //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6802dc402STodd Fiala //
7802dc402STodd Fiala //===----------------------------------------------------------------------===//
8802dc402STodd Fiala 
9d51402acSJonas Devlieghere #include "lldb/Utility/ReproducerInstrumentation.h"
10b9c1b51eSKate Stone #include "lldb/Target/Platform.h"
11b9c1b51eSKate Stone #include "lldb/Target/Process.h"
12b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h"
13b9c1b51eSKate Stone #include "lldb/lldb-defines.h"
14802dc402STodd Fiala 
15802dc402STodd Fiala #include "lldb/API/SBUnixSignals.h"
16802dc402STodd Fiala 
17802dc402STodd Fiala using namespace lldb;
18802dc402STodd Fiala using namespace lldb_private;
19802dc402STodd Fiala 
20baf5664fSJonas Devlieghere SBUnixSignals::SBUnixSignals() {
21baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBUnixSignals);
22baf5664fSJonas Devlieghere }
23802dc402STodd Fiala 
24b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs)
25baf5664fSJonas Devlieghere     : m_opaque_wp(rhs.m_opaque_wp) {
26baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBUnixSignals, (const lldb::SBUnixSignals &), rhs);
27baf5664fSJonas Devlieghere }
28802dc402STodd Fiala 
29b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp)
30b9c1b51eSKate Stone     : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {}
3198d0a4b3SChaoren Lin 
32b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp)
33b9c1b51eSKate Stone     : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {}
34802dc402STodd Fiala 
35b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) {
36baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBUnixSignals &,
37baf5664fSJonas Devlieghere                      SBUnixSignals, operator=,(const lldb::SBUnixSignals &),
38baf5664fSJonas Devlieghere                      rhs);
39baf5664fSJonas Devlieghere 
40802dc402STodd Fiala   if (this != &rhs)
41802dc402STodd Fiala     m_opaque_wp = rhs.m_opaque_wp;
42*d232abc3SJonas Devlieghere   return *this;
43802dc402STodd Fiala }
44802dc402STodd Fiala 
45866b7a65SJonas Devlieghere SBUnixSignals::~SBUnixSignals() = default;
46802dc402STodd Fiala 
47b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); }
48802dc402STodd Fiala 
49b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) {
5098d0a4b3SChaoren Lin   m_opaque_wp = signals_sp;
51802dc402STodd Fiala }
52802dc402STodd Fiala 
53baf5664fSJonas Devlieghere void SBUnixSignals::Clear() {
54baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBUnixSignals, Clear);
55802dc402STodd Fiala 
56baf5664fSJonas Devlieghere   m_opaque_wp.reset();
57baf5664fSJonas Devlieghere }
58baf5664fSJonas Devlieghere 
59baf5664fSJonas Devlieghere bool SBUnixSignals::IsValid() const {
60baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, IsValid);
617f5237bcSPavel Labath   return this->operator bool();
627f5237bcSPavel Labath }
637f5237bcSPavel Labath SBUnixSignals::operator bool() const {
647f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBUnixSignals, operator bool);
65baf5664fSJonas Devlieghere 
66baf5664fSJonas Devlieghere   return static_cast<bool>(GetSP());
67baf5664fSJonas Devlieghere }
68802dc402STodd Fiala 
69b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const {
70baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(const char *, SBUnixSignals, GetSignalAsCString,
71baf5664fSJonas Devlieghere                            (int32_t), signo);
72baf5664fSJonas Devlieghere 
7398d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
7498d0a4b3SChaoren Lin     return signals_sp->GetSignalAsCString(signo);
7598d0a4b3SChaoren Lin 
7698d0a4b3SChaoren Lin   return nullptr;
77802dc402STodd Fiala }
78802dc402STodd Fiala 
79b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const {
80baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalNumberFromName,
81baf5664fSJonas Devlieghere                            (const char *), name);
82baf5664fSJonas Devlieghere 
8398d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
8498d0a4b3SChaoren Lin     return signals_sp->GetSignalNumberFromName(name);
8598d0a4b3SChaoren Lin 
8698d0a4b3SChaoren Lin   return LLDB_INVALID_SIGNAL_NUMBER;
87802dc402STodd Fiala }
88802dc402STodd Fiala 
89b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const {
90baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldSuppress, (int32_t),
91baf5664fSJonas Devlieghere                            signo);
92baf5664fSJonas Devlieghere 
9398d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
9498d0a4b3SChaoren Lin     return signals_sp->GetShouldSuppress(signo);
9598d0a4b3SChaoren Lin 
96802dc402STodd Fiala   return false;
97802dc402STodd Fiala }
98802dc402STodd Fiala 
99b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) {
100baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldSuppress, (int32_t, bool),
101baf5664fSJonas Devlieghere                      signo, value);
102baf5664fSJonas Devlieghere 
10398d0a4b3SChaoren Lin   auto signals_sp = GetSP();
104802dc402STodd Fiala 
10598d0a4b3SChaoren Lin   if (signals_sp)
10698d0a4b3SChaoren Lin     return signals_sp->SetShouldSuppress(signo, value);
10798d0a4b3SChaoren Lin 
108802dc402STodd Fiala   return false;
109802dc402STodd Fiala }
110802dc402STodd Fiala 
111b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const {
112baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldStop, (int32_t),
113baf5664fSJonas Devlieghere                            signo);
114baf5664fSJonas Devlieghere 
11598d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
11698d0a4b3SChaoren Lin     return signals_sp->GetShouldStop(signo);
11798d0a4b3SChaoren Lin 
118802dc402STodd Fiala   return false;
119802dc402STodd Fiala }
120802dc402STodd Fiala 
121b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) {
122baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldStop, (int32_t, bool), signo,
123baf5664fSJonas Devlieghere                      value);
124baf5664fSJonas Devlieghere 
12598d0a4b3SChaoren Lin   auto signals_sp = GetSP();
126802dc402STodd Fiala 
12798d0a4b3SChaoren Lin   if (signals_sp)
12898d0a4b3SChaoren Lin     return signals_sp->SetShouldStop(signo, value);
12998d0a4b3SChaoren Lin 
130802dc402STodd Fiala   return false;
131802dc402STodd Fiala }
132802dc402STodd Fiala 
133b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const {
134baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(bool, SBUnixSignals, GetShouldNotify, (int32_t),
135baf5664fSJonas Devlieghere                            signo);
136baf5664fSJonas Devlieghere 
13798d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
13898d0a4b3SChaoren Lin     return signals_sp->GetShouldNotify(signo);
13998d0a4b3SChaoren Lin 
140802dc402STodd Fiala   return false;
141802dc402STodd Fiala }
142802dc402STodd Fiala 
143b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) {
144baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBUnixSignals, SetShouldNotify, (int32_t, bool),
145baf5664fSJonas Devlieghere                      signo, value);
146baf5664fSJonas Devlieghere 
14798d0a4b3SChaoren Lin   auto signals_sp = GetSP();
148802dc402STodd Fiala 
14998d0a4b3SChaoren Lin   if (signals_sp)
15098d0a4b3SChaoren Lin     return signals_sp->SetShouldNotify(signo, value);
15198d0a4b3SChaoren Lin 
152802dc402STodd Fiala   return false;
153802dc402STodd Fiala }
154802dc402STodd Fiala 
155b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const {
156baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(int32_t, SBUnixSignals, GetNumSignals);
157baf5664fSJonas Devlieghere 
15898d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
15998d0a4b3SChaoren Lin     return signals_sp->GetNumSignals();
16098d0a4b3SChaoren Lin 
16198d0a4b3SChaoren Lin   return -1;
162802dc402STodd Fiala }
163802dc402STodd Fiala 
164b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const {
165baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST(int32_t, SBUnixSignals, GetSignalAtIndex, (int32_t),
166baf5664fSJonas Devlieghere                            index);
167baf5664fSJonas Devlieghere 
16898d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
16998d0a4b3SChaoren Lin     return signals_sp->GetSignalAtIndex(index);
17098d0a4b3SChaoren Lin 
171802dc402STodd Fiala   return LLDB_INVALID_SIGNAL_NUMBER;
172802dc402STodd Fiala }
173