1b9c1b51eSKate Stone //===-- SBUnixSignals.cpp -------------------------------------------*- C++
2b9c1b51eSKate Stone //-*-===//
3802dc402STodd Fiala //
4*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
6*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7802dc402STodd Fiala //
8802dc402STodd Fiala //===----------------------------------------------------------------------===//
9802dc402STodd Fiala 
10b9c1b51eSKate Stone #include "lldb/Target/Platform.h"
11b9c1b51eSKate Stone #include "lldb/Target/Process.h"
12b9c1b51eSKate Stone #include "lldb/Target/UnixSignals.h"
136f9e6901SZachary Turner #include "lldb/Utility/Log.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 
21b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals() {}
22802dc402STodd Fiala 
23b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(const SBUnixSignals &rhs)
24b9c1b51eSKate Stone     : m_opaque_wp(rhs.m_opaque_wp) {}
25802dc402STodd Fiala 
26b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(ProcessSP &process_sp)
27b9c1b51eSKate Stone     : m_opaque_wp(process_sp ? process_sp->GetUnixSignals() : nullptr) {}
2898d0a4b3SChaoren Lin 
29b9c1b51eSKate Stone SBUnixSignals::SBUnixSignals(PlatformSP &platform_sp)
30b9c1b51eSKate Stone     : m_opaque_wp(platform_sp ? platform_sp->GetUnixSignals() : nullptr) {}
31802dc402STodd Fiala 
32b9c1b51eSKate Stone const SBUnixSignals &SBUnixSignals::operator=(const SBUnixSignals &rhs) {
33802dc402STodd Fiala   if (this != &rhs)
34802dc402STodd Fiala     m_opaque_wp = rhs.m_opaque_wp;
35802dc402STodd Fiala   return *this;
36802dc402STodd Fiala }
37802dc402STodd Fiala 
38b9c1b51eSKate Stone SBUnixSignals::~SBUnixSignals() {}
39802dc402STodd Fiala 
40b9c1b51eSKate Stone UnixSignalsSP SBUnixSignals::GetSP() const { return m_opaque_wp.lock(); }
41802dc402STodd Fiala 
42b9c1b51eSKate Stone void SBUnixSignals::SetSP(const UnixSignalsSP &signals_sp) {
4398d0a4b3SChaoren Lin   m_opaque_wp = signals_sp;
44802dc402STodd Fiala }
45802dc402STodd Fiala 
46b9c1b51eSKate Stone void SBUnixSignals::Clear() { m_opaque_wp.reset(); }
47802dc402STodd Fiala 
48b9c1b51eSKate Stone bool SBUnixSignals::IsValid() const { return static_cast<bool>(GetSP()); }
49802dc402STodd Fiala 
50b9c1b51eSKate Stone const char *SBUnixSignals::GetSignalAsCString(int32_t signo) const {
5198d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
5298d0a4b3SChaoren Lin     return signals_sp->GetSignalAsCString(signo);
5398d0a4b3SChaoren Lin 
5498d0a4b3SChaoren Lin   return nullptr;
55802dc402STodd Fiala }
56802dc402STodd Fiala 
57b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalNumberFromName(const char *name) const {
5898d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
5998d0a4b3SChaoren Lin     return signals_sp->GetSignalNumberFromName(name);
6098d0a4b3SChaoren Lin 
6198d0a4b3SChaoren Lin   return LLDB_INVALID_SIGNAL_NUMBER;
62802dc402STodd Fiala }
63802dc402STodd Fiala 
64b9c1b51eSKate Stone bool SBUnixSignals::GetShouldSuppress(int32_t signo) const {
6598d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
6698d0a4b3SChaoren Lin     return signals_sp->GetShouldSuppress(signo);
6798d0a4b3SChaoren Lin 
68802dc402STodd Fiala   return false;
69802dc402STodd Fiala }
70802dc402STodd Fiala 
71b9c1b51eSKate Stone bool SBUnixSignals::SetShouldSuppress(int32_t signo, bool value) {
72802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
7398d0a4b3SChaoren Lin   auto signals_sp = GetSP();
74802dc402STodd Fiala 
75b9c1b51eSKate Stone   if (log) {
76802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldSuppress (signo=%d, value=%d)",
77b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
78802dc402STodd Fiala   }
79802dc402STodd Fiala 
8098d0a4b3SChaoren Lin   if (signals_sp)
8198d0a4b3SChaoren Lin     return signals_sp->SetShouldSuppress(signo, value);
8298d0a4b3SChaoren Lin 
83802dc402STodd Fiala   return false;
84802dc402STodd Fiala }
85802dc402STodd Fiala 
86b9c1b51eSKate Stone bool SBUnixSignals::GetShouldStop(int32_t signo) const {
8798d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
8898d0a4b3SChaoren Lin     return signals_sp->GetShouldStop(signo);
8998d0a4b3SChaoren Lin 
90802dc402STodd Fiala   return false;
91802dc402STodd Fiala }
92802dc402STodd Fiala 
93b9c1b51eSKate Stone bool SBUnixSignals::SetShouldStop(int32_t signo, bool value) {
94802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
9598d0a4b3SChaoren Lin   auto signals_sp = GetSP();
96802dc402STodd Fiala 
97b9c1b51eSKate Stone   if (log) {
98802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldStop (signo=%d, value=%d)",
99b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
100802dc402STodd Fiala   }
101802dc402STodd Fiala 
10298d0a4b3SChaoren Lin   if (signals_sp)
10398d0a4b3SChaoren Lin     return signals_sp->SetShouldStop(signo, value);
10498d0a4b3SChaoren Lin 
105802dc402STodd Fiala   return false;
106802dc402STodd Fiala }
107802dc402STodd Fiala 
108b9c1b51eSKate Stone bool SBUnixSignals::GetShouldNotify(int32_t signo) const {
10998d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
11098d0a4b3SChaoren Lin     return signals_sp->GetShouldNotify(signo);
11198d0a4b3SChaoren Lin 
112802dc402STodd Fiala   return false;
113802dc402STodd Fiala }
114802dc402STodd Fiala 
115b9c1b51eSKate Stone bool SBUnixSignals::SetShouldNotify(int32_t signo, bool value) {
116802dc402STodd Fiala   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
11798d0a4b3SChaoren Lin   auto signals_sp = GetSP();
118802dc402STodd Fiala 
119b9c1b51eSKate Stone   if (log) {
120802dc402STodd Fiala     log->Printf("SBUnixSignals(%p)::SetShouldNotify (signo=%d, value=%d)",
121b9c1b51eSKate Stone                 static_cast<void *>(signals_sp.get()), signo, value);
122802dc402STodd Fiala   }
123802dc402STodd Fiala 
12498d0a4b3SChaoren Lin   if (signals_sp)
12598d0a4b3SChaoren Lin     return signals_sp->SetShouldNotify(signo, value);
12698d0a4b3SChaoren Lin 
127802dc402STodd Fiala   return false;
128802dc402STodd Fiala }
129802dc402STodd Fiala 
130b9c1b51eSKate Stone int32_t SBUnixSignals::GetNumSignals() const {
13198d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
13298d0a4b3SChaoren Lin     return signals_sp->GetNumSignals();
13398d0a4b3SChaoren Lin 
13498d0a4b3SChaoren Lin   return -1;
135802dc402STodd Fiala }
136802dc402STodd Fiala 
137b9c1b51eSKate Stone int32_t SBUnixSignals::GetSignalAtIndex(int32_t index) const {
13898d0a4b3SChaoren Lin   if (auto signals_sp = GetSP())
13998d0a4b3SChaoren Lin     return signals_sp->GetSignalAtIndex(index);
14098d0a4b3SChaoren Lin 
141802dc402STodd Fiala   return LLDB_INVALID_SIGNAL_NUMBER;
142802dc402STodd Fiala }
143