1 //===-- SBProcessInfo.cpp -------------------------------------------------===// 2 // 3 // 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 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "lldb/API/SBProcessInfo.h" 10 #include "Utils.h" 11 #include "lldb/API/SBFileSpec.h" 12 #include "lldb/Utility/Instrumentation.h" 13 #include "lldb/Utility/ProcessInfo.h" 14 15 using namespace lldb; 16 using namespace lldb_private; 17 SBProcessInfo()18SBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); } 19 SBProcessInfo(const SBProcessInfo & rhs)20SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) { 21 LLDB_INSTRUMENT_VA(this, rhs); 22 23 m_opaque_up = clone(rhs.m_opaque_up); 24 } 25 26 SBProcessInfo::~SBProcessInfo() = default; 27 operator =(const SBProcessInfo & rhs)28SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) { 29 LLDB_INSTRUMENT_VA(this, rhs); 30 31 if (this != &rhs) 32 m_opaque_up = clone(rhs.m_opaque_up); 33 return *this; 34 } 35 ref()36ProcessInstanceInfo &SBProcessInfo::ref() { 37 if (m_opaque_up == nullptr) { 38 m_opaque_up = std::make_unique<ProcessInstanceInfo>(); 39 } 40 return *m_opaque_up; 41 } 42 SetProcessInfo(const ProcessInstanceInfo & proc_info_ref)43void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) { 44 ref() = proc_info_ref; 45 } 46 IsValid() const47bool SBProcessInfo::IsValid() const { 48 LLDB_INSTRUMENT_VA(this); 49 return this->operator bool(); 50 } operator bool() const51SBProcessInfo::operator bool() const { 52 LLDB_INSTRUMENT_VA(this); 53 54 return m_opaque_up != nullptr; 55 } 56 GetName()57const char *SBProcessInfo::GetName() { 58 LLDB_INSTRUMENT_VA(this); 59 60 if (!m_opaque_up) 61 return nullptr; 62 63 return ConstString(m_opaque_up->GetName()).GetCString(); 64 } 65 GetExecutableFile()66SBFileSpec SBProcessInfo::GetExecutableFile() { 67 LLDB_INSTRUMENT_VA(this); 68 69 SBFileSpec file_spec; 70 if (m_opaque_up) { 71 file_spec.SetFileSpec(m_opaque_up->GetExecutableFile()); 72 } 73 return file_spec; 74 } 75 GetProcessID()76lldb::pid_t SBProcessInfo::GetProcessID() { 77 LLDB_INSTRUMENT_VA(this); 78 79 lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 80 if (m_opaque_up) { 81 proc_id = m_opaque_up->GetProcessID(); 82 } 83 return proc_id; 84 } 85 GetUserID()86uint32_t SBProcessInfo::GetUserID() { 87 LLDB_INSTRUMENT_VA(this); 88 89 uint32_t user_id = UINT32_MAX; 90 if (m_opaque_up) { 91 user_id = m_opaque_up->GetUserID(); 92 } 93 return user_id; 94 } 95 GetGroupID()96uint32_t SBProcessInfo::GetGroupID() { 97 LLDB_INSTRUMENT_VA(this); 98 99 uint32_t group_id = UINT32_MAX; 100 if (m_opaque_up) { 101 group_id = m_opaque_up->GetGroupID(); 102 } 103 return group_id; 104 } 105 UserIDIsValid()106bool SBProcessInfo::UserIDIsValid() { 107 LLDB_INSTRUMENT_VA(this); 108 109 bool is_valid = false; 110 if (m_opaque_up) { 111 is_valid = m_opaque_up->UserIDIsValid(); 112 } 113 return is_valid; 114 } 115 GroupIDIsValid()116bool SBProcessInfo::GroupIDIsValid() { 117 LLDB_INSTRUMENT_VA(this); 118 119 bool is_valid = false; 120 if (m_opaque_up) { 121 is_valid = m_opaque_up->GroupIDIsValid(); 122 } 123 return is_valid; 124 } 125 GetEffectiveUserID()126uint32_t SBProcessInfo::GetEffectiveUserID() { 127 LLDB_INSTRUMENT_VA(this); 128 129 uint32_t user_id = UINT32_MAX; 130 if (m_opaque_up) { 131 user_id = m_opaque_up->GetEffectiveUserID(); 132 } 133 return user_id; 134 } 135 GetEffectiveGroupID()136uint32_t SBProcessInfo::GetEffectiveGroupID() { 137 LLDB_INSTRUMENT_VA(this); 138 139 uint32_t group_id = UINT32_MAX; 140 if (m_opaque_up) { 141 group_id = m_opaque_up->GetEffectiveGroupID(); 142 } 143 return group_id; 144 } 145 EffectiveUserIDIsValid()146bool SBProcessInfo::EffectiveUserIDIsValid() { 147 LLDB_INSTRUMENT_VA(this); 148 149 bool is_valid = false; 150 if (m_opaque_up) { 151 is_valid = m_opaque_up->EffectiveUserIDIsValid(); 152 } 153 return is_valid; 154 } 155 EffectiveGroupIDIsValid()156bool SBProcessInfo::EffectiveGroupIDIsValid() { 157 LLDB_INSTRUMENT_VA(this); 158 159 bool is_valid = false; 160 if (m_opaque_up) { 161 is_valid = m_opaque_up->EffectiveGroupIDIsValid(); 162 } 163 return is_valid; 164 } 165 GetParentProcessID()166lldb::pid_t SBProcessInfo::GetParentProcessID() { 167 LLDB_INSTRUMENT_VA(this); 168 169 lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 170 if (m_opaque_up) { 171 proc_id = m_opaque_up->GetParentProcessID(); 172 } 173 return proc_id; 174 } 175 GetTriple()176const char *SBProcessInfo::GetTriple() { 177 LLDB_INSTRUMENT_VA(this); 178 179 if (!m_opaque_up) 180 return nullptr; 181 182 const auto &arch = m_opaque_up->GetArchitecture(); 183 if (!arch.IsValid()) 184 return nullptr; 185 186 return ConstString(arch.GetTriple().getTriple().c_str()).GetCString(); 187 } 188