1141a6263SVadim Macagon //===-- SBProcessInfo.cpp ---------------------------------------*- C++ -*-===//
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"
10baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
11bd4bf82aSJonas Devlieghere #include "Utils.h"
12141a6263SVadim Macagon #include "lldb/API/SBFileSpec.h"
13805e7106SZachary Turner #include "lldb/Utility/ProcessInfo.h"
14141a6263SVadim Macagon 
15141a6263SVadim Macagon using namespace lldb;
16141a6263SVadim Macagon using namespace lldb_private;
17141a6263SVadim Macagon 
18baf5664fSJonas Devlieghere SBProcessInfo::SBProcessInfo() : m_opaque_up() {
19baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBProcessInfo);
20baf5664fSJonas Devlieghere }
21141a6263SVadim Macagon 
22d5b44036SJonas Devlieghere SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_up() {
23baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &), rhs);
24baf5664fSJonas Devlieghere 
25bd4bf82aSJonas Devlieghere   m_opaque_up = clone(rhs.m_opaque_up);
26141a6263SVadim Macagon }
27141a6263SVadim Macagon 
28141a6263SVadim Macagon SBProcessInfo::~SBProcessInfo() {}
29141a6263SVadim Macagon 
30141a6263SVadim Macagon SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
31baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBProcessInfo &,
32baf5664fSJonas Devlieghere                      SBProcessInfo, operator=,(const lldb::SBProcessInfo &),
33baf5664fSJonas Devlieghere                      rhs);
34baf5664fSJonas Devlieghere 
35bd4bf82aSJonas Devlieghere   if (this != &rhs)
36bd4bf82aSJonas Devlieghere     m_opaque_up = clone(rhs.m_opaque_up);
37141a6263SVadim Macagon   return *this;
38141a6263SVadim Macagon }
39141a6263SVadim Macagon 
40141a6263SVadim Macagon ProcessInstanceInfo &SBProcessInfo::ref() {
41d5b44036SJonas Devlieghere   if (m_opaque_up == nullptr) {
42d5b44036SJonas Devlieghere     m_opaque_up.reset(new ProcessInstanceInfo());
43141a6263SVadim Macagon   }
44d5b44036SJonas Devlieghere   return *m_opaque_up;
45141a6263SVadim Macagon }
46141a6263SVadim Macagon 
47141a6263SVadim Macagon void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
48141a6263SVadim Macagon   ref() = proc_info_ref;
49141a6263SVadim Macagon }
50141a6263SVadim Macagon 
51baf5664fSJonas Devlieghere bool SBProcessInfo::IsValid() const {
52baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, IsValid);
537f5237bcSPavel Labath   return this->operator bool();
547f5237bcSPavel Labath }
557f5237bcSPavel Labath SBProcessInfo::operator bool() const {
567f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, operator bool);
57baf5664fSJonas Devlieghere 
58baf5664fSJonas Devlieghere   return m_opaque_up != nullptr;
59baf5664fSJonas Devlieghere }
60141a6263SVadim Macagon 
61141a6263SVadim Macagon const char *SBProcessInfo::GetName() {
62baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBProcessInfo, GetName);
63baf5664fSJonas Devlieghere 
64141a6263SVadim Macagon   const char *name = nullptr;
65d5b44036SJonas Devlieghere   if (m_opaque_up) {
66d5b44036SJonas Devlieghere     name = m_opaque_up->GetName();
67141a6263SVadim Macagon   }
68141a6263SVadim Macagon   return name;
69141a6263SVadim Macagon }
70141a6263SVadim Macagon 
71141a6263SVadim Macagon SBFileSpec SBProcessInfo::GetExecutableFile() {
72baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBProcessInfo,
73baf5664fSJonas Devlieghere                              GetExecutableFile);
74baf5664fSJonas Devlieghere 
75141a6263SVadim Macagon   SBFileSpec file_spec;
76d5b44036SJonas Devlieghere   if (m_opaque_up) {
77d5b44036SJonas Devlieghere     file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
78141a6263SVadim Macagon   }
79baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(file_spec);
80141a6263SVadim Macagon }
81141a6263SVadim Macagon 
82141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetProcessID() {
83baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetProcessID);
84baf5664fSJonas Devlieghere 
85141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
86d5b44036SJonas Devlieghere   if (m_opaque_up) {
87d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetProcessID();
88141a6263SVadim Macagon   }
89141a6263SVadim Macagon   return proc_id;
90141a6263SVadim Macagon }
91141a6263SVadim Macagon 
92141a6263SVadim Macagon uint32_t SBProcessInfo::GetUserID() {
93baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetUserID);
94baf5664fSJonas Devlieghere 
95141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
96d5b44036SJonas Devlieghere   if (m_opaque_up) {
97d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetUserID();
98141a6263SVadim Macagon   }
99141a6263SVadim Macagon   return user_id;
100141a6263SVadim Macagon }
101141a6263SVadim Macagon 
102141a6263SVadim Macagon uint32_t SBProcessInfo::GetGroupID() {
103baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetGroupID);
104baf5664fSJonas Devlieghere 
105141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
106d5b44036SJonas Devlieghere   if (m_opaque_up) {
107d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetGroupID();
108141a6263SVadim Macagon   }
109141a6263SVadim Macagon   return group_id;
110141a6263SVadim Macagon }
111141a6263SVadim Macagon 
112141a6263SVadim Macagon bool SBProcessInfo::UserIDIsValid() {
113baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, UserIDIsValid);
114baf5664fSJonas Devlieghere 
115141a6263SVadim Macagon   bool is_valid = false;
116d5b44036SJonas Devlieghere   if (m_opaque_up) {
117d5b44036SJonas Devlieghere     is_valid = m_opaque_up->UserIDIsValid();
118141a6263SVadim Macagon   }
119141a6263SVadim Macagon   return is_valid;
120141a6263SVadim Macagon }
121141a6263SVadim Macagon 
122141a6263SVadim Macagon bool SBProcessInfo::GroupIDIsValid() {
123baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, GroupIDIsValid);
124baf5664fSJonas Devlieghere 
125141a6263SVadim Macagon   bool is_valid = false;
126d5b44036SJonas Devlieghere   if (m_opaque_up) {
127d5b44036SJonas Devlieghere     is_valid = m_opaque_up->GroupIDIsValid();
128141a6263SVadim Macagon   }
129141a6263SVadim Macagon   return is_valid;
130141a6263SVadim Macagon }
131141a6263SVadim Macagon 
132141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveUserID() {
133baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveUserID);
134baf5664fSJonas Devlieghere 
135141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
136d5b44036SJonas Devlieghere   if (m_opaque_up) {
137d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetEffectiveUserID();
138141a6263SVadim Macagon   }
139141a6263SVadim Macagon   return user_id;
140141a6263SVadim Macagon }
141141a6263SVadim Macagon 
142141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveGroupID() {
143baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveGroupID);
144baf5664fSJonas Devlieghere 
145141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
146d5b44036SJonas Devlieghere   if (m_opaque_up) {
147d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetEffectiveGroupID();
148141a6263SVadim Macagon   }
149141a6263SVadim Macagon   return group_id;
150141a6263SVadim Macagon }
151141a6263SVadim Macagon 
152141a6263SVadim Macagon bool SBProcessInfo::EffectiveUserIDIsValid() {
153baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveUserIDIsValid);
154baf5664fSJonas Devlieghere 
155141a6263SVadim Macagon   bool is_valid = false;
156d5b44036SJonas Devlieghere   if (m_opaque_up) {
157d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveUserIDIsValid();
158141a6263SVadim Macagon   }
159141a6263SVadim Macagon   return is_valid;
160141a6263SVadim Macagon }
161141a6263SVadim Macagon 
162141a6263SVadim Macagon bool SBProcessInfo::EffectiveGroupIDIsValid() {
163baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveGroupIDIsValid);
164baf5664fSJonas Devlieghere 
165141a6263SVadim Macagon   bool is_valid = false;
166d5b44036SJonas Devlieghere   if (m_opaque_up) {
167d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveGroupIDIsValid();
168141a6263SVadim Macagon   }
169141a6263SVadim Macagon   return is_valid;
170141a6263SVadim Macagon }
171141a6263SVadim Macagon 
172141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetParentProcessID() {
173baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetParentProcessID);
174baf5664fSJonas Devlieghere 
175141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
176d5b44036SJonas Devlieghere   if (m_opaque_up) {
177d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetParentProcessID();
178141a6263SVadim Macagon   }
179141a6263SVadim Macagon   return proc_id;
180141a6263SVadim Macagon }
181*ae211eceSMichal Gorny 
182*ae211eceSMichal Gorny namespace lldb_private {
183*ae211eceSMichal Gorny namespace repro {
184*ae211eceSMichal Gorny 
185*ae211eceSMichal Gorny template <>
186*ae211eceSMichal Gorny void RegisterMethods<SBProcessInfo>(Registry &R) {
187*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBProcessInfo, ());
188*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &));
189*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
190*ae211eceSMichal Gorny       lldb::SBProcessInfo &,
191*ae211eceSMichal Gorny       SBProcessInfo, operator=,(const lldb::SBProcessInfo &));
192*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBProcessInfo, IsValid, ());
193*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBProcessInfo, operator bool, ());
194*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBProcessInfo, GetName, ());
195*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBFileSpec, SBProcessInfo, GetExecutableFile,
196*ae211eceSMichal Gorny                        ());
197*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::pid_t, SBProcessInfo, GetProcessID, ());
198*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetUserID, ());
199*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetGroupID, ());
200*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBProcessInfo, UserIDIsValid, ());
201*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBProcessInfo, GroupIDIsValid, ());
202*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetEffectiveUserID, ());
203*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetEffectiveGroupID, ());
204*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBProcessInfo, EffectiveUserIDIsValid, ());
205*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBProcessInfo, EffectiveGroupIDIsValid, ());
206*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::pid_t, SBProcessInfo, GetParentProcessID, ());
207*ae211eceSMichal Gorny }
208*ae211eceSMichal Gorny 
209*ae211eceSMichal Gorny }
210*ae211eceSMichal Gorny }
211