180814287SRaphael Isemann //===-- SBProcessInfo.cpp -------------------------------------------------===//
2141a6263SVadim Macagon //
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
6141a6263SVadim Macagon //
7141a6263SVadim Macagon //===----------------------------------------------------------------------===//
8141a6263SVadim Macagon 
9141a6263SVadim Macagon #include "lldb/API/SBProcessInfo.h"
10bd4bf82aSJonas Devlieghere #include "Utils.h"
11141a6263SVadim Macagon #include "lldb/API/SBFileSpec.h"
12*1755f5b1SJonas Devlieghere #include "lldb/Utility/Instrumentation.h"
13805e7106SZachary Turner #include "lldb/Utility/ProcessInfo.h"
14141a6263SVadim Macagon 
15141a6263SVadim Macagon using namespace lldb;
16141a6263SVadim Macagon using namespace lldb_private;
17141a6263SVadim Macagon 
SBProcessInfo()18*1755f5b1SJonas Devlieghere SBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); }
19141a6263SVadim Macagon 
SBProcessInfo(const SBProcessInfo & rhs)20a3436f73SKazu Hirata SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) {
21*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
22baf5664fSJonas Devlieghere 
23bd4bf82aSJonas Devlieghere   m_opaque_up = clone(rhs.m_opaque_up);
24141a6263SVadim Macagon }
25141a6263SVadim Macagon 
26866b7a65SJonas Devlieghere SBProcessInfo::~SBProcessInfo() = default;
27141a6263SVadim Macagon 
operator =(const SBProcessInfo & rhs)28141a6263SVadim Macagon SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
29*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this, rhs);
30baf5664fSJonas Devlieghere 
31bd4bf82aSJonas Devlieghere   if (this != &rhs)
32bd4bf82aSJonas Devlieghere     m_opaque_up = clone(rhs.m_opaque_up);
33d232abc3SJonas Devlieghere   return *this;
34141a6263SVadim Macagon }
35141a6263SVadim Macagon 
ref()36141a6263SVadim Macagon ProcessInstanceInfo &SBProcessInfo::ref() {
37d5b44036SJonas Devlieghere   if (m_opaque_up == nullptr) {
381c0bbe43SJonas Devlieghere     m_opaque_up = std::make_unique<ProcessInstanceInfo>();
39141a6263SVadim Macagon   }
40d5b44036SJonas Devlieghere   return *m_opaque_up;
41141a6263SVadim Macagon }
42141a6263SVadim Macagon 
SetProcessInfo(const ProcessInstanceInfo & proc_info_ref)43141a6263SVadim Macagon void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
44141a6263SVadim Macagon   ref() = proc_info_ref;
45141a6263SVadim Macagon }
46141a6263SVadim Macagon 
IsValid() const47baf5664fSJonas Devlieghere bool SBProcessInfo::IsValid() const {
48*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
497f5237bcSPavel Labath   return this->operator bool();
507f5237bcSPavel Labath }
operator bool() const517f5237bcSPavel Labath SBProcessInfo::operator bool() const {
52*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
53baf5664fSJonas Devlieghere 
54baf5664fSJonas Devlieghere   return m_opaque_up != nullptr;
55baf5664fSJonas Devlieghere }
56141a6263SVadim Macagon 
GetName()57141a6263SVadim Macagon const char *SBProcessInfo::GetName() {
58*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
59baf5664fSJonas Devlieghere 
60141a6263SVadim Macagon   const char *name = nullptr;
61d5b44036SJonas Devlieghere   if (m_opaque_up) {
62d5b44036SJonas Devlieghere     name = m_opaque_up->GetName();
63141a6263SVadim Macagon   }
64141a6263SVadim Macagon   return name;
65141a6263SVadim Macagon }
66141a6263SVadim Macagon 
GetExecutableFile()67141a6263SVadim Macagon SBFileSpec SBProcessInfo::GetExecutableFile() {
68*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
69baf5664fSJonas Devlieghere 
70141a6263SVadim Macagon   SBFileSpec file_spec;
71d5b44036SJonas Devlieghere   if (m_opaque_up) {
72d5b44036SJonas Devlieghere     file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
73141a6263SVadim Macagon   }
74d232abc3SJonas Devlieghere   return file_spec;
75141a6263SVadim Macagon }
76141a6263SVadim Macagon 
GetProcessID()77141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetProcessID() {
78*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
79baf5664fSJonas Devlieghere 
80141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
81d5b44036SJonas Devlieghere   if (m_opaque_up) {
82d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetProcessID();
83141a6263SVadim Macagon   }
84141a6263SVadim Macagon   return proc_id;
85141a6263SVadim Macagon }
86141a6263SVadim Macagon 
GetUserID()87141a6263SVadim Macagon uint32_t SBProcessInfo::GetUserID() {
88*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
89baf5664fSJonas Devlieghere 
90141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
91d5b44036SJonas Devlieghere   if (m_opaque_up) {
92d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetUserID();
93141a6263SVadim Macagon   }
94141a6263SVadim Macagon   return user_id;
95141a6263SVadim Macagon }
96141a6263SVadim Macagon 
GetGroupID()97141a6263SVadim Macagon uint32_t SBProcessInfo::GetGroupID() {
98*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
99baf5664fSJonas Devlieghere 
100141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
101d5b44036SJonas Devlieghere   if (m_opaque_up) {
102d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetGroupID();
103141a6263SVadim Macagon   }
104141a6263SVadim Macagon   return group_id;
105141a6263SVadim Macagon }
106141a6263SVadim Macagon 
UserIDIsValid()107141a6263SVadim Macagon bool SBProcessInfo::UserIDIsValid() {
108*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
109baf5664fSJonas Devlieghere 
110141a6263SVadim Macagon   bool is_valid = false;
111d5b44036SJonas Devlieghere   if (m_opaque_up) {
112d5b44036SJonas Devlieghere     is_valid = m_opaque_up->UserIDIsValid();
113141a6263SVadim Macagon   }
114141a6263SVadim Macagon   return is_valid;
115141a6263SVadim Macagon }
116141a6263SVadim Macagon 
GroupIDIsValid()117141a6263SVadim Macagon bool SBProcessInfo::GroupIDIsValid() {
118*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
119baf5664fSJonas Devlieghere 
120141a6263SVadim Macagon   bool is_valid = false;
121d5b44036SJonas Devlieghere   if (m_opaque_up) {
122d5b44036SJonas Devlieghere     is_valid = m_opaque_up->GroupIDIsValid();
123141a6263SVadim Macagon   }
124141a6263SVadim Macagon   return is_valid;
125141a6263SVadim Macagon }
126141a6263SVadim Macagon 
GetEffectiveUserID()127141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveUserID() {
128*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
129baf5664fSJonas Devlieghere 
130141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
131d5b44036SJonas Devlieghere   if (m_opaque_up) {
132d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetEffectiveUserID();
133141a6263SVadim Macagon   }
134141a6263SVadim Macagon   return user_id;
135141a6263SVadim Macagon }
136141a6263SVadim Macagon 
GetEffectiveGroupID()137141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveGroupID() {
138*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
139baf5664fSJonas Devlieghere 
140141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
141d5b44036SJonas Devlieghere   if (m_opaque_up) {
142d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetEffectiveGroupID();
143141a6263SVadim Macagon   }
144141a6263SVadim Macagon   return group_id;
145141a6263SVadim Macagon }
146141a6263SVadim Macagon 
EffectiveUserIDIsValid()147141a6263SVadim Macagon bool SBProcessInfo::EffectiveUserIDIsValid() {
148*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
149baf5664fSJonas Devlieghere 
150141a6263SVadim Macagon   bool is_valid = false;
151d5b44036SJonas Devlieghere   if (m_opaque_up) {
152d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveUserIDIsValid();
153141a6263SVadim Macagon   }
154141a6263SVadim Macagon   return is_valid;
155141a6263SVadim Macagon }
156141a6263SVadim Macagon 
EffectiveGroupIDIsValid()157141a6263SVadim Macagon bool SBProcessInfo::EffectiveGroupIDIsValid() {
158*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
159baf5664fSJonas Devlieghere 
160141a6263SVadim Macagon   bool is_valid = false;
161d5b44036SJonas Devlieghere   if (m_opaque_up) {
162d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveGroupIDIsValid();
163141a6263SVadim Macagon   }
164141a6263SVadim Macagon   return is_valid;
165141a6263SVadim Macagon }
166141a6263SVadim Macagon 
GetParentProcessID()167141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetParentProcessID() {
168*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
169baf5664fSJonas Devlieghere 
170141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
171d5b44036SJonas Devlieghere   if (m_opaque_up) {
172d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetParentProcessID();
173141a6263SVadim Macagon   }
174141a6263SVadim Macagon   return proc_id;
175141a6263SVadim Macagon }
176ae211eceSMichal Gorny 
GetTriple()177251a5d9dSBruce Mitchener const char *SBProcessInfo::GetTriple() {
178*1755f5b1SJonas Devlieghere   LLDB_INSTRUMENT_VA(this);
179251a5d9dSBruce Mitchener 
180251a5d9dSBruce Mitchener   const char *triple = nullptr;
181251a5d9dSBruce Mitchener   if (m_opaque_up) {
182251a5d9dSBruce Mitchener     const auto &arch = m_opaque_up->GetArchitecture();
183251a5d9dSBruce Mitchener     if (arch.IsValid()) {
184251a5d9dSBruce Mitchener       // Const-ify the string so we don't need to worry about the lifetime of
185251a5d9dSBruce Mitchener       // the string
186251a5d9dSBruce Mitchener       triple = ConstString(arch.GetTriple().getTriple().c_str()).GetCString();
187251a5d9dSBruce Mitchener     }
188251a5d9dSBruce Mitchener   }
189251a5d9dSBruce Mitchener   return triple;
190251a5d9dSBruce Mitchener }
191