blob: 29a9c7b24b5a7d4ff5754899551f65e874e1fde3 [file] [log] [blame]
Raphael Isemann80814282020-01-24 08:23:27 +01001//===-- SBProcessInfo.cpp -------------------------------------------------===//
Vadim Macagon141a6262017-08-01 07:34:26 +00002//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Vadim Macagon141a6262017-08-01 07:34:26 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "lldb/API/SBProcessInfo.h"
Jonas Devliegherebaf56642019-03-06 00:06:00 +000010#include "SBReproducerPrivate.h"
Jonas Devliegherebd4bf822019-03-06 00:05:55 +000011#include "Utils.h"
Vadim Macagon141a6262017-08-01 07:34:26 +000012#include "lldb/API/SBFileSpec.h"
Zachary Turner805e7102019-03-04 21:51:03 +000013#include "lldb/Utility/ProcessInfo.h"
Vadim Macagon141a6262017-08-01 07:34:26 +000014
15using namespace lldb;
16using namespace lldb_private;
17
Jonas Devliegherebaf56642019-03-06 00:06:00 +000018SBProcessInfo::SBProcessInfo() : m_opaque_up() {
19 LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBProcessInfo);
20}
Vadim Macagon141a6262017-08-01 07:34:26 +000021
Jonas Devlieghered5b44032019-02-13 06:25:41 +000022SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_up() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000023 LLDB_RECORD_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &), rhs);
24
Jonas Devliegherebd4bf822019-03-06 00:05:55 +000025 m_opaque_up = clone(rhs.m_opaque_up);
Vadim Macagon141a6262017-08-01 07:34:26 +000026}
27
Jonas Devlieghere866b7a62020-02-17 22:57:06 -080028SBProcessInfo::~SBProcessInfo() = default;
Vadim Macagon141a6262017-08-01 07:34:26 +000029
30SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000031 LLDB_RECORD_METHOD(lldb::SBProcessInfo &,
32 SBProcessInfo, operator=,(const lldb::SBProcessInfo &),
33 rhs);
34
Jonas Devliegherebd4bf822019-03-06 00:05:55 +000035 if (this != &rhs)
36 m_opaque_up = clone(rhs.m_opaque_up);
Jonas Devlieghere306809f2019-04-03 21:31:22 +000037 return LLDB_RECORD_RESULT(*this);
Vadim Macagon141a6262017-08-01 07:34:26 +000038}
39
40ProcessInstanceInfo &SBProcessInfo::ref() {
Jonas Devlieghered5b44032019-02-13 06:25:41 +000041 if (m_opaque_up == nullptr) {
Jonas Devlieghere1c0bbe42020-06-24 16:25:05 -070042 m_opaque_up = std::make_unique<ProcessInstanceInfo>();
Vadim Macagon141a6262017-08-01 07:34:26 +000043 }
Jonas Devlieghered5b44032019-02-13 06:25:41 +000044 return *m_opaque_up;
Vadim Macagon141a6262017-08-01 07:34:26 +000045}
46
47void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
48 ref() = proc_info_ref;
49}
50
Jonas Devliegherebaf56642019-03-06 00:06:00 +000051bool SBProcessInfo::IsValid() const {
52 LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, IsValid);
Pavel Labath7f5237b2019-03-11 13:58:46 +000053 return this->operator bool();
54}
55SBProcessInfo::operator bool() const {
56 LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, operator bool);
Jonas Devliegherebaf56642019-03-06 00:06:00 +000057
58 return m_opaque_up != nullptr;
59}
Vadim Macagon141a6262017-08-01 07:34:26 +000060
61const char *SBProcessInfo::GetName() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000062 LLDB_RECORD_METHOD_NO_ARGS(const char *, SBProcessInfo, GetName);
63
Vadim Macagon141a6262017-08-01 07:34:26 +000064 const char *name = nullptr;
Jonas Devlieghered5b44032019-02-13 06:25:41 +000065 if (m_opaque_up) {
66 name = m_opaque_up->GetName();
Vadim Macagon141a6262017-08-01 07:34:26 +000067 }
68 return name;
69}
70
71SBFileSpec SBProcessInfo::GetExecutableFile() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000072 LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBProcessInfo,
73 GetExecutableFile);
74
Vadim Macagon141a6262017-08-01 07:34:26 +000075 SBFileSpec file_spec;
Jonas Devlieghered5b44032019-02-13 06:25:41 +000076 if (m_opaque_up) {
77 file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
Vadim Macagon141a6262017-08-01 07:34:26 +000078 }
Jonas Devliegherebaf56642019-03-06 00:06:00 +000079 return LLDB_RECORD_RESULT(file_spec);
Vadim Macagon141a6262017-08-01 07:34:26 +000080}
81
82lldb::pid_t SBProcessInfo::GetProcessID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000083 LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetProcessID);
84
Vadim Macagon141a6262017-08-01 07:34:26 +000085 lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
Jonas Devlieghered5b44032019-02-13 06:25:41 +000086 if (m_opaque_up) {
87 proc_id = m_opaque_up->GetProcessID();
Vadim Macagon141a6262017-08-01 07:34:26 +000088 }
89 return proc_id;
90}
91
92uint32_t SBProcessInfo::GetUserID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +000093 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetUserID);
94
Vadim Macagon141a6262017-08-01 07:34:26 +000095 uint32_t user_id = UINT32_MAX;
Jonas Devlieghered5b44032019-02-13 06:25:41 +000096 if (m_opaque_up) {
97 user_id = m_opaque_up->GetUserID();
Vadim Macagon141a6262017-08-01 07:34:26 +000098 }
99 return user_id;
100}
101
102uint32_t SBProcessInfo::GetGroupID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000103 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetGroupID);
104
Vadim Macagon141a6262017-08-01 07:34:26 +0000105 uint32_t group_id = UINT32_MAX;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000106 if (m_opaque_up) {
107 group_id = m_opaque_up->GetGroupID();
Vadim Macagon141a6262017-08-01 07:34:26 +0000108 }
109 return group_id;
110}
111
112bool SBProcessInfo::UserIDIsValid() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000113 LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, UserIDIsValid);
114
Vadim Macagon141a6262017-08-01 07:34:26 +0000115 bool is_valid = false;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000116 if (m_opaque_up) {
117 is_valid = m_opaque_up->UserIDIsValid();
Vadim Macagon141a6262017-08-01 07:34:26 +0000118 }
119 return is_valid;
120}
121
122bool SBProcessInfo::GroupIDIsValid() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000123 LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, GroupIDIsValid);
124
Vadim Macagon141a6262017-08-01 07:34:26 +0000125 bool is_valid = false;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000126 if (m_opaque_up) {
127 is_valid = m_opaque_up->GroupIDIsValid();
Vadim Macagon141a6262017-08-01 07:34:26 +0000128 }
129 return is_valid;
130}
131
132uint32_t SBProcessInfo::GetEffectiveUserID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000133 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveUserID);
134
Vadim Macagon141a6262017-08-01 07:34:26 +0000135 uint32_t user_id = UINT32_MAX;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000136 if (m_opaque_up) {
137 user_id = m_opaque_up->GetEffectiveUserID();
Vadim Macagon141a6262017-08-01 07:34:26 +0000138 }
139 return user_id;
140}
141
142uint32_t SBProcessInfo::GetEffectiveGroupID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000143 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveGroupID);
144
Vadim Macagon141a6262017-08-01 07:34:26 +0000145 uint32_t group_id = UINT32_MAX;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000146 if (m_opaque_up) {
147 group_id = m_opaque_up->GetEffectiveGroupID();
Vadim Macagon141a6262017-08-01 07:34:26 +0000148 }
149 return group_id;
150}
151
152bool SBProcessInfo::EffectiveUserIDIsValid() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000153 LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveUserIDIsValid);
154
Vadim Macagon141a6262017-08-01 07:34:26 +0000155 bool is_valid = false;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000156 if (m_opaque_up) {
157 is_valid = m_opaque_up->EffectiveUserIDIsValid();
Vadim Macagon141a6262017-08-01 07:34:26 +0000158 }
159 return is_valid;
160}
161
162bool SBProcessInfo::EffectiveGroupIDIsValid() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000163 LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveGroupIDIsValid);
164
Vadim Macagon141a6262017-08-01 07:34:26 +0000165 bool is_valid = false;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000166 if (m_opaque_up) {
167 is_valid = m_opaque_up->EffectiveGroupIDIsValid();
Vadim Macagon141a6262017-08-01 07:34:26 +0000168 }
169 return is_valid;
170}
171
172lldb::pid_t SBProcessInfo::GetParentProcessID() {
Jonas Devliegherebaf56642019-03-06 00:06:00 +0000173 LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetParentProcessID);
174
Vadim Macagon141a6262017-08-01 07:34:26 +0000175 lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
Jonas Devlieghered5b44032019-02-13 06:25:41 +0000176 if (m_opaque_up) {
177 proc_id = m_opaque_up->GetParentProcessID();
Vadim Macagon141a6262017-08-01 07:34:26 +0000178 }
179 return proc_id;
180}
Michal Gornyae211ec2019-03-19 17:13:13 +0000181
182namespace lldb_private {
183namespace repro {
184
185template <>
186void RegisterMethods<SBProcessInfo>(Registry &R) {
187 LLDB_REGISTER_CONSTRUCTOR(SBProcessInfo, ());
188 LLDB_REGISTER_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &));
189 LLDB_REGISTER_METHOD(
190 lldb::SBProcessInfo &,
191 SBProcessInfo, operator=,(const lldb::SBProcessInfo &));
192 LLDB_REGISTER_METHOD_CONST(bool, SBProcessInfo, IsValid, ());
193 LLDB_REGISTER_METHOD_CONST(bool, SBProcessInfo, operator bool, ());
194 LLDB_REGISTER_METHOD(const char *, SBProcessInfo, GetName, ());
195 LLDB_REGISTER_METHOD(lldb::SBFileSpec, SBProcessInfo, GetExecutableFile,
196 ());
197 LLDB_REGISTER_METHOD(lldb::pid_t, SBProcessInfo, GetProcessID, ());
198 LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetUserID, ());
199 LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetGroupID, ());
200 LLDB_REGISTER_METHOD(bool, SBProcessInfo, UserIDIsValid, ());
201 LLDB_REGISTER_METHOD(bool, SBProcessInfo, GroupIDIsValid, ());
202 LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetEffectiveUserID, ());
203 LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetEffectiveGroupID, ());
204 LLDB_REGISTER_METHOD(bool, SBProcessInfo, EffectiveUserIDIsValid, ());
205 LLDB_REGISTER_METHOD(bool, SBProcessInfo, EffectiveGroupIDIsValid, ());
206 LLDB_REGISTER_METHOD(lldb::pid_t, SBProcessInfo, GetParentProcessID, ());
207}
208
209}
210}