xref: /src/contrib/llvm-project/lldb/source/API/SBProcessInfo.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1cfca06d7SDimitry Andric //===-- SBProcessInfo.cpp -------------------------------------------------===//
2ef5d0b5eSDimitry Andric //
35f29bb8aSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45f29bb8aSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55f29bb8aSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ef5d0b5eSDimitry Andric //
7ef5d0b5eSDimitry Andric //===----------------------------------------------------------------------===//
8ef5d0b5eSDimitry Andric 
9ef5d0b5eSDimitry Andric #include "lldb/API/SBProcessInfo.h"
105f29bb8aSDimitry Andric #include "Utils.h"
11ef5d0b5eSDimitry Andric #include "lldb/API/SBFileSpec.h"
126f8fc217SDimitry Andric #include "lldb/Utility/Instrumentation.h"
135f29bb8aSDimitry Andric #include "lldb/Utility/ProcessInfo.h"
14ef5d0b5eSDimitry Andric 
15ef5d0b5eSDimitry Andric using namespace lldb;
16ef5d0b5eSDimitry Andric using namespace lldb_private;
17ef5d0b5eSDimitry Andric 
SBProcessInfo()186f8fc217SDimitry Andric SBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); }
195f29bb8aSDimitry Andric 
SBProcessInfo(const SBProcessInfo & rhs)206f8fc217SDimitry Andric SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) {
216f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
225f29bb8aSDimitry Andric 
235f29bb8aSDimitry Andric   m_opaque_up = clone(rhs.m_opaque_up);
24ef5d0b5eSDimitry Andric }
25ef5d0b5eSDimitry Andric 
26cfca06d7SDimitry Andric SBProcessInfo::~SBProcessInfo() = default;
27ef5d0b5eSDimitry Andric 
operator =(const SBProcessInfo & rhs)28ef5d0b5eSDimitry Andric SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
296f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this, rhs);
305f29bb8aSDimitry Andric 
315f29bb8aSDimitry Andric   if (this != &rhs)
325f29bb8aSDimitry Andric     m_opaque_up = clone(rhs.m_opaque_up);
336f8fc217SDimitry Andric   return *this;
34ef5d0b5eSDimitry Andric }
35ef5d0b5eSDimitry Andric 
ref()36ef5d0b5eSDimitry Andric ProcessInstanceInfo &SBProcessInfo::ref() {
375f29bb8aSDimitry Andric   if (m_opaque_up == nullptr) {
38cfca06d7SDimitry Andric     m_opaque_up = std::make_unique<ProcessInstanceInfo>();
39ef5d0b5eSDimitry Andric   }
405f29bb8aSDimitry Andric   return *m_opaque_up;
41ef5d0b5eSDimitry Andric }
42ef5d0b5eSDimitry Andric 
SetProcessInfo(const ProcessInstanceInfo & proc_info_ref)43ef5d0b5eSDimitry Andric void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
44ef5d0b5eSDimitry Andric   ref() = proc_info_ref;
45ef5d0b5eSDimitry Andric }
46ef5d0b5eSDimitry Andric 
IsValid() const475f29bb8aSDimitry Andric bool SBProcessInfo::IsValid() const {
486f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
495f29bb8aSDimitry Andric   return this->operator bool();
505f29bb8aSDimitry Andric }
operator bool() const515f29bb8aSDimitry Andric SBProcessInfo::operator bool() const {
526f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
535f29bb8aSDimitry Andric 
545f29bb8aSDimitry Andric   return m_opaque_up != nullptr;
555f29bb8aSDimitry Andric }
56ef5d0b5eSDimitry Andric 
GetName()57ef5d0b5eSDimitry Andric const char *SBProcessInfo::GetName() {
586f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
595f29bb8aSDimitry Andric 
607fa27ce4SDimitry Andric   if (!m_opaque_up)
617fa27ce4SDimitry Andric     return nullptr;
627fa27ce4SDimitry Andric 
637fa27ce4SDimitry Andric   return ConstString(m_opaque_up->GetName()).GetCString();
64ef5d0b5eSDimitry Andric }
65ef5d0b5eSDimitry Andric 
GetExecutableFile()66ef5d0b5eSDimitry Andric SBFileSpec SBProcessInfo::GetExecutableFile() {
676f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
685f29bb8aSDimitry Andric 
69ef5d0b5eSDimitry Andric   SBFileSpec file_spec;
705f29bb8aSDimitry Andric   if (m_opaque_up) {
715f29bb8aSDimitry Andric     file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
72ef5d0b5eSDimitry Andric   }
736f8fc217SDimitry Andric   return file_spec;
74ef5d0b5eSDimitry Andric }
75ef5d0b5eSDimitry Andric 
GetProcessID()76ef5d0b5eSDimitry Andric lldb::pid_t SBProcessInfo::GetProcessID() {
776f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
785f29bb8aSDimitry Andric 
79ef5d0b5eSDimitry Andric   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
805f29bb8aSDimitry Andric   if (m_opaque_up) {
815f29bb8aSDimitry Andric     proc_id = m_opaque_up->GetProcessID();
82ef5d0b5eSDimitry Andric   }
83ef5d0b5eSDimitry Andric   return proc_id;
84ef5d0b5eSDimitry Andric }
85ef5d0b5eSDimitry Andric 
GetUserID()86ef5d0b5eSDimitry Andric uint32_t SBProcessInfo::GetUserID() {
876f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
885f29bb8aSDimitry Andric 
89ef5d0b5eSDimitry Andric   uint32_t user_id = UINT32_MAX;
905f29bb8aSDimitry Andric   if (m_opaque_up) {
915f29bb8aSDimitry Andric     user_id = m_opaque_up->GetUserID();
92ef5d0b5eSDimitry Andric   }
93ef5d0b5eSDimitry Andric   return user_id;
94ef5d0b5eSDimitry Andric }
95ef5d0b5eSDimitry Andric 
GetGroupID()96ef5d0b5eSDimitry Andric uint32_t SBProcessInfo::GetGroupID() {
976f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
985f29bb8aSDimitry Andric 
99ef5d0b5eSDimitry Andric   uint32_t group_id = UINT32_MAX;
1005f29bb8aSDimitry Andric   if (m_opaque_up) {
1015f29bb8aSDimitry Andric     group_id = m_opaque_up->GetGroupID();
102ef5d0b5eSDimitry Andric   }
103ef5d0b5eSDimitry Andric   return group_id;
104ef5d0b5eSDimitry Andric }
105ef5d0b5eSDimitry Andric 
UserIDIsValid()106ef5d0b5eSDimitry Andric bool SBProcessInfo::UserIDIsValid() {
1076f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1085f29bb8aSDimitry Andric 
109ef5d0b5eSDimitry Andric   bool is_valid = false;
1105f29bb8aSDimitry Andric   if (m_opaque_up) {
1115f29bb8aSDimitry Andric     is_valid = m_opaque_up->UserIDIsValid();
112ef5d0b5eSDimitry Andric   }
113ef5d0b5eSDimitry Andric   return is_valid;
114ef5d0b5eSDimitry Andric }
115ef5d0b5eSDimitry Andric 
GroupIDIsValid()116ef5d0b5eSDimitry Andric bool SBProcessInfo::GroupIDIsValid() {
1176f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1185f29bb8aSDimitry Andric 
119ef5d0b5eSDimitry Andric   bool is_valid = false;
1205f29bb8aSDimitry Andric   if (m_opaque_up) {
1215f29bb8aSDimitry Andric     is_valid = m_opaque_up->GroupIDIsValid();
122ef5d0b5eSDimitry Andric   }
123ef5d0b5eSDimitry Andric   return is_valid;
124ef5d0b5eSDimitry Andric }
125ef5d0b5eSDimitry Andric 
GetEffectiveUserID()126ef5d0b5eSDimitry Andric uint32_t SBProcessInfo::GetEffectiveUserID() {
1276f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1285f29bb8aSDimitry Andric 
129ef5d0b5eSDimitry Andric   uint32_t user_id = UINT32_MAX;
1305f29bb8aSDimitry Andric   if (m_opaque_up) {
1315f29bb8aSDimitry Andric     user_id = m_opaque_up->GetEffectiveUserID();
132ef5d0b5eSDimitry Andric   }
133ef5d0b5eSDimitry Andric   return user_id;
134ef5d0b5eSDimitry Andric }
135ef5d0b5eSDimitry Andric 
GetEffectiveGroupID()136ef5d0b5eSDimitry Andric uint32_t SBProcessInfo::GetEffectiveGroupID() {
1376f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1385f29bb8aSDimitry Andric 
139ef5d0b5eSDimitry Andric   uint32_t group_id = UINT32_MAX;
1405f29bb8aSDimitry Andric   if (m_opaque_up) {
1415f29bb8aSDimitry Andric     group_id = m_opaque_up->GetEffectiveGroupID();
142ef5d0b5eSDimitry Andric   }
143ef5d0b5eSDimitry Andric   return group_id;
144ef5d0b5eSDimitry Andric }
145ef5d0b5eSDimitry Andric 
EffectiveUserIDIsValid()146ef5d0b5eSDimitry Andric bool SBProcessInfo::EffectiveUserIDIsValid() {
1476f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1485f29bb8aSDimitry Andric 
149ef5d0b5eSDimitry Andric   bool is_valid = false;
1505f29bb8aSDimitry Andric   if (m_opaque_up) {
1515f29bb8aSDimitry Andric     is_valid = m_opaque_up->EffectiveUserIDIsValid();
152ef5d0b5eSDimitry Andric   }
153ef5d0b5eSDimitry Andric   return is_valid;
154ef5d0b5eSDimitry Andric }
155ef5d0b5eSDimitry Andric 
EffectiveGroupIDIsValid()156ef5d0b5eSDimitry Andric bool SBProcessInfo::EffectiveGroupIDIsValid() {
1576f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1585f29bb8aSDimitry Andric 
159ef5d0b5eSDimitry Andric   bool is_valid = false;
1605f29bb8aSDimitry Andric   if (m_opaque_up) {
1615f29bb8aSDimitry Andric     is_valid = m_opaque_up->EffectiveGroupIDIsValid();
162ef5d0b5eSDimitry Andric   }
163ef5d0b5eSDimitry Andric   return is_valid;
164ef5d0b5eSDimitry Andric }
165ef5d0b5eSDimitry Andric 
GetParentProcessID()166ef5d0b5eSDimitry Andric lldb::pid_t SBProcessInfo::GetParentProcessID() {
1676f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
1685f29bb8aSDimitry Andric 
169ef5d0b5eSDimitry Andric   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
1705f29bb8aSDimitry Andric   if (m_opaque_up) {
1715f29bb8aSDimitry Andric     proc_id = m_opaque_up->GetParentProcessID();
172ef5d0b5eSDimitry Andric   }
173ef5d0b5eSDimitry Andric   return proc_id;
174ef5d0b5eSDimitry Andric }
1755f29bb8aSDimitry Andric 
GetTriple()176344a3780SDimitry Andric const char *SBProcessInfo::GetTriple() {
1776f8fc217SDimitry Andric   LLDB_INSTRUMENT_VA(this);
178344a3780SDimitry Andric 
1797fa27ce4SDimitry Andric   if (!m_opaque_up)
1807fa27ce4SDimitry Andric     return nullptr;
1817fa27ce4SDimitry Andric 
182344a3780SDimitry Andric   const auto &arch = m_opaque_up->GetArchitecture();
1837fa27ce4SDimitry Andric   if (!arch.IsValid())
1847fa27ce4SDimitry Andric     return nullptr;
1857fa27ce4SDimitry Andric 
1867fa27ce4SDimitry Andric   return ConstString(arch.GetTriple().getTriple().c_str()).GetCString();
187344a3780SDimitry Andric }
188