xref: /openbsd-src/gnu/llvm/lldb/source/API/SBProcessInfo.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1 //===-- SBProcessInfo.cpp -------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "lldb/API/SBProcessInfo.h"
10 #include "Utils.h"
11 #include "lldb/API/SBFileSpec.h"
12 #include "lldb/Utility/Instrumentation.h"
13 #include "lldb/Utility/ProcessInfo.h"
14 
15 using namespace lldb;
16 using namespace lldb_private;
17 
SBProcessInfo()18 SBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); }
19 
SBProcessInfo(const SBProcessInfo & rhs)20 SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) {
21   LLDB_INSTRUMENT_VA(this, rhs);
22 
23   m_opaque_up = clone(rhs.m_opaque_up);
24 }
25 
26 SBProcessInfo::~SBProcessInfo() = default;
27 
operator =(const SBProcessInfo & rhs)28 SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
29   LLDB_INSTRUMENT_VA(this, rhs);
30 
31   if (this != &rhs)
32     m_opaque_up = clone(rhs.m_opaque_up);
33   return *this;
34 }
35 
ref()36 ProcessInstanceInfo &SBProcessInfo::ref() {
37   if (m_opaque_up == nullptr) {
38     m_opaque_up = std::make_unique<ProcessInstanceInfo>();
39   }
40   return *m_opaque_up;
41 }
42 
SetProcessInfo(const ProcessInstanceInfo & proc_info_ref)43 void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
44   ref() = proc_info_ref;
45 }
46 
IsValid() const47 bool SBProcessInfo::IsValid() const {
48   LLDB_INSTRUMENT_VA(this);
49   return this->operator bool();
50 }
operator bool() const51 SBProcessInfo::operator bool() const {
52   LLDB_INSTRUMENT_VA(this);
53 
54   return m_opaque_up != nullptr;
55 }
56 
GetName()57 const char *SBProcessInfo::GetName() {
58   LLDB_INSTRUMENT_VA(this);
59 
60   const char *name = nullptr;
61   if (m_opaque_up) {
62     name = m_opaque_up->GetName();
63   }
64   return name;
65 }
66 
GetExecutableFile()67 SBFileSpec SBProcessInfo::GetExecutableFile() {
68   LLDB_INSTRUMENT_VA(this);
69 
70   SBFileSpec file_spec;
71   if (m_opaque_up) {
72     file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
73   }
74   return file_spec;
75 }
76 
GetProcessID()77 lldb::pid_t SBProcessInfo::GetProcessID() {
78   LLDB_INSTRUMENT_VA(this);
79 
80   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
81   if (m_opaque_up) {
82     proc_id = m_opaque_up->GetProcessID();
83   }
84   return proc_id;
85 }
86 
GetUserID()87 uint32_t SBProcessInfo::GetUserID() {
88   LLDB_INSTRUMENT_VA(this);
89 
90   uint32_t user_id = UINT32_MAX;
91   if (m_opaque_up) {
92     user_id = m_opaque_up->GetUserID();
93   }
94   return user_id;
95 }
96 
GetGroupID()97 uint32_t SBProcessInfo::GetGroupID() {
98   LLDB_INSTRUMENT_VA(this);
99 
100   uint32_t group_id = UINT32_MAX;
101   if (m_opaque_up) {
102     group_id = m_opaque_up->GetGroupID();
103   }
104   return group_id;
105 }
106 
UserIDIsValid()107 bool SBProcessInfo::UserIDIsValid() {
108   LLDB_INSTRUMENT_VA(this);
109 
110   bool is_valid = false;
111   if (m_opaque_up) {
112     is_valid = m_opaque_up->UserIDIsValid();
113   }
114   return is_valid;
115 }
116 
GroupIDIsValid()117 bool SBProcessInfo::GroupIDIsValid() {
118   LLDB_INSTRUMENT_VA(this);
119 
120   bool is_valid = false;
121   if (m_opaque_up) {
122     is_valid = m_opaque_up->GroupIDIsValid();
123   }
124   return is_valid;
125 }
126 
GetEffectiveUserID()127 uint32_t SBProcessInfo::GetEffectiveUserID() {
128   LLDB_INSTRUMENT_VA(this);
129 
130   uint32_t user_id = UINT32_MAX;
131   if (m_opaque_up) {
132     user_id = m_opaque_up->GetEffectiveUserID();
133   }
134   return user_id;
135 }
136 
GetEffectiveGroupID()137 uint32_t SBProcessInfo::GetEffectiveGroupID() {
138   LLDB_INSTRUMENT_VA(this);
139 
140   uint32_t group_id = UINT32_MAX;
141   if (m_opaque_up) {
142     group_id = m_opaque_up->GetEffectiveGroupID();
143   }
144   return group_id;
145 }
146 
EffectiveUserIDIsValid()147 bool SBProcessInfo::EffectiveUserIDIsValid() {
148   LLDB_INSTRUMENT_VA(this);
149 
150   bool is_valid = false;
151   if (m_opaque_up) {
152     is_valid = m_opaque_up->EffectiveUserIDIsValid();
153   }
154   return is_valid;
155 }
156 
EffectiveGroupIDIsValid()157 bool SBProcessInfo::EffectiveGroupIDIsValid() {
158   LLDB_INSTRUMENT_VA(this);
159 
160   bool is_valid = false;
161   if (m_opaque_up) {
162     is_valid = m_opaque_up->EffectiveGroupIDIsValid();
163   }
164   return is_valid;
165 }
166 
GetParentProcessID()167 lldb::pid_t SBProcessInfo::GetParentProcessID() {
168   LLDB_INSTRUMENT_VA(this);
169 
170   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
171   if (m_opaque_up) {
172     proc_id = m_opaque_up->GetParentProcessID();
173   }
174   return proc_id;
175 }
176 
GetTriple()177 const char *SBProcessInfo::GetTriple() {
178   LLDB_INSTRUMENT_VA(this);
179 
180   const char *triple = nullptr;
181   if (m_opaque_up) {
182     const auto &arch = m_opaque_up->GetArchitecture();
183     if (arch.IsValid()) {
184       // Const-ify the string so we don't need to worry about the lifetime of
185       // the string
186       triple = ConstString(arch.GetTriple().getTriple().c_str()).GetCString();
187     }
188   }
189   return triple;
190 }
191