188 lines · cpp
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-exception6//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 15using namespace lldb;16using namespace lldb_private;17 18SBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); }19 20SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) {21 LLDB_INSTRUMENT_VA(this, rhs);22 23 m_opaque_up = clone(rhs.m_opaque_up);24}25 26SBProcessInfo::~SBProcessInfo() = default;27 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 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 43void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {44 ref() = proc_info_ref;45}46 47bool SBProcessInfo::IsValid() const {48 LLDB_INSTRUMENT_VA(this);49 return this->operator bool();50}51SBProcessInfo::operator bool() const {52 LLDB_INSTRUMENT_VA(this);53 54 return m_opaque_up != nullptr;55}56 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 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 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 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 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 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 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 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 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 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 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 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 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