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" 121755f5b1SJonas 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()181755f5b1SJonas DevlieghereSBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); } 19141a6263SVadim Macagon SBProcessInfo(const SBProcessInfo & rhs)20a3436f73SKazu HirataSBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) { 211755f5b1SJonas 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 MacagonSBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) { 291755f5b1SJonas 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 MacagonProcessInstanceInfo &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 Macagonvoid SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) { 44141a6263SVadim Macagon ref() = proc_info_ref; 45141a6263SVadim Macagon } 46141a6263SVadim Macagon IsValid() const47baf5664fSJonas Devliegherebool SBProcessInfo::IsValid() const { 481755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 497f5237bcSPavel Labath return this->operator bool(); 507f5237bcSPavel Labath } operator bool() const517f5237bcSPavel LabathSBProcessInfo::operator bool() const { 521755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 53baf5664fSJonas Devlieghere 54baf5664fSJonas Devlieghere return m_opaque_up != nullptr; 55baf5664fSJonas Devlieghere } 56141a6263SVadim Macagon GetName()57141a6263SVadim Macagonconst char *SBProcessInfo::GetName() { 581755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 59baf5664fSJonas Devlieghere 60*41714c95SAlex Langford if (!m_opaque_up) 61*41714c95SAlex Langford return nullptr; 62*41714c95SAlex Langford 63*41714c95SAlex Langford return ConstString(m_opaque_up->GetName()).GetCString(); 64141a6263SVadim Macagon } 65141a6263SVadim Macagon GetExecutableFile()66141a6263SVadim MacagonSBFileSpec SBProcessInfo::GetExecutableFile() { 671755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 68baf5664fSJonas Devlieghere 69141a6263SVadim Macagon SBFileSpec file_spec; 70d5b44036SJonas Devlieghere if (m_opaque_up) { 71d5b44036SJonas Devlieghere file_spec.SetFileSpec(m_opaque_up->GetExecutableFile()); 72141a6263SVadim Macagon } 73d232abc3SJonas Devlieghere return file_spec; 74141a6263SVadim Macagon } 75141a6263SVadim Macagon GetProcessID()76141a6263SVadim Macagonlldb::pid_t SBProcessInfo::GetProcessID() { 771755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 78baf5664fSJonas Devlieghere 79141a6263SVadim Macagon lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 80d5b44036SJonas Devlieghere if (m_opaque_up) { 81d5b44036SJonas Devlieghere proc_id = m_opaque_up->GetProcessID(); 82141a6263SVadim Macagon } 83141a6263SVadim Macagon return proc_id; 84141a6263SVadim Macagon } 85141a6263SVadim Macagon GetUserID()86141a6263SVadim Macagonuint32_t SBProcessInfo::GetUserID() { 871755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 88baf5664fSJonas Devlieghere 89141a6263SVadim Macagon uint32_t user_id = UINT32_MAX; 90d5b44036SJonas Devlieghere if (m_opaque_up) { 91d5b44036SJonas Devlieghere user_id = m_opaque_up->GetUserID(); 92141a6263SVadim Macagon } 93141a6263SVadim Macagon return user_id; 94141a6263SVadim Macagon } 95141a6263SVadim Macagon GetGroupID()96141a6263SVadim Macagonuint32_t SBProcessInfo::GetGroupID() { 971755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 98baf5664fSJonas Devlieghere 99141a6263SVadim Macagon uint32_t group_id = UINT32_MAX; 100d5b44036SJonas Devlieghere if (m_opaque_up) { 101d5b44036SJonas Devlieghere group_id = m_opaque_up->GetGroupID(); 102141a6263SVadim Macagon } 103141a6263SVadim Macagon return group_id; 104141a6263SVadim Macagon } 105141a6263SVadim Macagon UserIDIsValid()106141a6263SVadim Macagonbool SBProcessInfo::UserIDIsValid() { 1071755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 108baf5664fSJonas Devlieghere 109141a6263SVadim Macagon bool is_valid = false; 110d5b44036SJonas Devlieghere if (m_opaque_up) { 111d5b44036SJonas Devlieghere is_valid = m_opaque_up->UserIDIsValid(); 112141a6263SVadim Macagon } 113141a6263SVadim Macagon return is_valid; 114141a6263SVadim Macagon } 115141a6263SVadim Macagon GroupIDIsValid()116141a6263SVadim Macagonbool SBProcessInfo::GroupIDIsValid() { 1171755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 118baf5664fSJonas Devlieghere 119141a6263SVadim Macagon bool is_valid = false; 120d5b44036SJonas Devlieghere if (m_opaque_up) { 121d5b44036SJonas Devlieghere is_valid = m_opaque_up->GroupIDIsValid(); 122141a6263SVadim Macagon } 123141a6263SVadim Macagon return is_valid; 124141a6263SVadim Macagon } 125141a6263SVadim Macagon GetEffectiveUserID()126141a6263SVadim Macagonuint32_t SBProcessInfo::GetEffectiveUserID() { 1271755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 128baf5664fSJonas Devlieghere 129141a6263SVadim Macagon uint32_t user_id = UINT32_MAX; 130d5b44036SJonas Devlieghere if (m_opaque_up) { 131d5b44036SJonas Devlieghere user_id = m_opaque_up->GetEffectiveUserID(); 132141a6263SVadim Macagon } 133141a6263SVadim Macagon return user_id; 134141a6263SVadim Macagon } 135141a6263SVadim Macagon GetEffectiveGroupID()136141a6263SVadim Macagonuint32_t SBProcessInfo::GetEffectiveGroupID() { 1371755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 138baf5664fSJonas Devlieghere 139141a6263SVadim Macagon uint32_t group_id = UINT32_MAX; 140d5b44036SJonas Devlieghere if (m_opaque_up) { 141d5b44036SJonas Devlieghere group_id = m_opaque_up->GetEffectiveGroupID(); 142141a6263SVadim Macagon } 143141a6263SVadim Macagon return group_id; 144141a6263SVadim Macagon } 145141a6263SVadim Macagon EffectiveUserIDIsValid()146141a6263SVadim Macagonbool SBProcessInfo::EffectiveUserIDIsValid() { 1471755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 148baf5664fSJonas Devlieghere 149141a6263SVadim Macagon bool is_valid = false; 150d5b44036SJonas Devlieghere if (m_opaque_up) { 151d5b44036SJonas Devlieghere is_valid = m_opaque_up->EffectiveUserIDIsValid(); 152141a6263SVadim Macagon } 153141a6263SVadim Macagon return is_valid; 154141a6263SVadim Macagon } 155141a6263SVadim Macagon EffectiveGroupIDIsValid()156141a6263SVadim Macagonbool SBProcessInfo::EffectiveGroupIDIsValid() { 1571755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 158baf5664fSJonas Devlieghere 159141a6263SVadim Macagon bool is_valid = false; 160d5b44036SJonas Devlieghere if (m_opaque_up) { 161d5b44036SJonas Devlieghere is_valid = m_opaque_up->EffectiveGroupIDIsValid(); 162141a6263SVadim Macagon } 163141a6263SVadim Macagon return is_valid; 164141a6263SVadim Macagon } 165141a6263SVadim Macagon GetParentProcessID()166141a6263SVadim Macagonlldb::pid_t SBProcessInfo::GetParentProcessID() { 1671755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 168baf5664fSJonas Devlieghere 169141a6263SVadim Macagon lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 170d5b44036SJonas Devlieghere if (m_opaque_up) { 171d5b44036SJonas Devlieghere proc_id = m_opaque_up->GetParentProcessID(); 172141a6263SVadim Macagon } 173141a6263SVadim Macagon return proc_id; 174141a6263SVadim Macagon } 175ae211eceSMichal Gorny GetTriple()176251a5d9dSBruce Mitchenerconst char *SBProcessInfo::GetTriple() { 1771755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 178251a5d9dSBruce Mitchener 179*41714c95SAlex Langford if (!m_opaque_up) 180*41714c95SAlex Langford return nullptr; 181*41714c95SAlex Langford 182251a5d9dSBruce Mitchener const auto &arch = m_opaque_up->GetArchitecture(); 183*41714c95SAlex Langford if (!arch.IsValid()) 184*41714c95SAlex Langford return nullptr; 185*41714c95SAlex Langford 186*41714c95SAlex Langford return ConstString(arch.GetTriple().getTriple().c_str()).GetCString(); 187251a5d9dSBruce Mitchener } 188