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" 12*1755f5b1SJonas 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()18*1755f5b1SJonas DevlieghereSBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); } 19141a6263SVadim Macagon SBProcessInfo(const SBProcessInfo & rhs)20a3436f73SKazu HirataSBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) { 21*1755f5b1SJonas 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) { 29*1755f5b1SJonas 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 { 48*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 497f5237bcSPavel Labath return this->operator bool(); 507f5237bcSPavel Labath } operator bool() const517f5237bcSPavel LabathSBProcessInfo::operator bool() const { 52*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 53baf5664fSJonas Devlieghere 54baf5664fSJonas Devlieghere return m_opaque_up != nullptr; 55baf5664fSJonas Devlieghere } 56141a6263SVadim Macagon GetName()57141a6263SVadim Macagonconst char *SBProcessInfo::GetName() { 58*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 59baf5664fSJonas Devlieghere 60141a6263SVadim Macagon const char *name = nullptr; 61d5b44036SJonas Devlieghere if (m_opaque_up) { 62d5b44036SJonas Devlieghere name = m_opaque_up->GetName(); 63141a6263SVadim Macagon } 64141a6263SVadim Macagon return name; 65141a6263SVadim Macagon } 66141a6263SVadim Macagon GetExecutableFile()67141a6263SVadim MacagonSBFileSpec SBProcessInfo::GetExecutableFile() { 68*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 69baf5664fSJonas Devlieghere 70141a6263SVadim Macagon SBFileSpec file_spec; 71d5b44036SJonas Devlieghere if (m_opaque_up) { 72d5b44036SJonas Devlieghere file_spec.SetFileSpec(m_opaque_up->GetExecutableFile()); 73141a6263SVadim Macagon } 74d232abc3SJonas Devlieghere return file_spec; 75141a6263SVadim Macagon } 76141a6263SVadim Macagon GetProcessID()77141a6263SVadim Macagonlldb::pid_t SBProcessInfo::GetProcessID() { 78*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 79baf5664fSJonas Devlieghere 80141a6263SVadim Macagon lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 81d5b44036SJonas Devlieghere if (m_opaque_up) { 82d5b44036SJonas Devlieghere proc_id = m_opaque_up->GetProcessID(); 83141a6263SVadim Macagon } 84141a6263SVadim Macagon return proc_id; 85141a6263SVadim Macagon } 86141a6263SVadim Macagon GetUserID()87141a6263SVadim Macagonuint32_t SBProcessInfo::GetUserID() { 88*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 89baf5664fSJonas Devlieghere 90141a6263SVadim Macagon uint32_t user_id = UINT32_MAX; 91d5b44036SJonas Devlieghere if (m_opaque_up) { 92d5b44036SJonas Devlieghere user_id = m_opaque_up->GetUserID(); 93141a6263SVadim Macagon } 94141a6263SVadim Macagon return user_id; 95141a6263SVadim Macagon } 96141a6263SVadim Macagon GetGroupID()97141a6263SVadim Macagonuint32_t SBProcessInfo::GetGroupID() { 98*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 99baf5664fSJonas Devlieghere 100141a6263SVadim Macagon uint32_t group_id = UINT32_MAX; 101d5b44036SJonas Devlieghere if (m_opaque_up) { 102d5b44036SJonas Devlieghere group_id = m_opaque_up->GetGroupID(); 103141a6263SVadim Macagon } 104141a6263SVadim Macagon return group_id; 105141a6263SVadim Macagon } 106141a6263SVadim Macagon UserIDIsValid()107141a6263SVadim Macagonbool SBProcessInfo::UserIDIsValid() { 108*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 109baf5664fSJonas Devlieghere 110141a6263SVadim Macagon bool is_valid = false; 111d5b44036SJonas Devlieghere if (m_opaque_up) { 112d5b44036SJonas Devlieghere is_valid = m_opaque_up->UserIDIsValid(); 113141a6263SVadim Macagon } 114141a6263SVadim Macagon return is_valid; 115141a6263SVadim Macagon } 116141a6263SVadim Macagon GroupIDIsValid()117141a6263SVadim Macagonbool SBProcessInfo::GroupIDIsValid() { 118*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 119baf5664fSJonas Devlieghere 120141a6263SVadim Macagon bool is_valid = false; 121d5b44036SJonas Devlieghere if (m_opaque_up) { 122d5b44036SJonas Devlieghere is_valid = m_opaque_up->GroupIDIsValid(); 123141a6263SVadim Macagon } 124141a6263SVadim Macagon return is_valid; 125141a6263SVadim Macagon } 126141a6263SVadim Macagon GetEffectiveUserID()127141a6263SVadim Macagonuint32_t SBProcessInfo::GetEffectiveUserID() { 128*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 129baf5664fSJonas Devlieghere 130141a6263SVadim Macagon uint32_t user_id = UINT32_MAX; 131d5b44036SJonas Devlieghere if (m_opaque_up) { 132d5b44036SJonas Devlieghere user_id = m_opaque_up->GetEffectiveUserID(); 133141a6263SVadim Macagon } 134141a6263SVadim Macagon return user_id; 135141a6263SVadim Macagon } 136141a6263SVadim Macagon GetEffectiveGroupID()137141a6263SVadim Macagonuint32_t SBProcessInfo::GetEffectiveGroupID() { 138*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 139baf5664fSJonas Devlieghere 140141a6263SVadim Macagon uint32_t group_id = UINT32_MAX; 141d5b44036SJonas Devlieghere if (m_opaque_up) { 142d5b44036SJonas Devlieghere group_id = m_opaque_up->GetEffectiveGroupID(); 143141a6263SVadim Macagon } 144141a6263SVadim Macagon return group_id; 145141a6263SVadim Macagon } 146141a6263SVadim Macagon EffectiveUserIDIsValid()147141a6263SVadim Macagonbool SBProcessInfo::EffectiveUserIDIsValid() { 148*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 149baf5664fSJonas Devlieghere 150141a6263SVadim Macagon bool is_valid = false; 151d5b44036SJonas Devlieghere if (m_opaque_up) { 152d5b44036SJonas Devlieghere is_valid = m_opaque_up->EffectiveUserIDIsValid(); 153141a6263SVadim Macagon } 154141a6263SVadim Macagon return is_valid; 155141a6263SVadim Macagon } 156141a6263SVadim Macagon EffectiveGroupIDIsValid()157141a6263SVadim Macagonbool SBProcessInfo::EffectiveGroupIDIsValid() { 158*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 159baf5664fSJonas Devlieghere 160141a6263SVadim Macagon bool is_valid = false; 161d5b44036SJonas Devlieghere if (m_opaque_up) { 162d5b44036SJonas Devlieghere is_valid = m_opaque_up->EffectiveGroupIDIsValid(); 163141a6263SVadim Macagon } 164141a6263SVadim Macagon return is_valid; 165141a6263SVadim Macagon } 166141a6263SVadim Macagon GetParentProcessID()167141a6263SVadim Macagonlldb::pid_t SBProcessInfo::GetParentProcessID() { 168*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 169baf5664fSJonas Devlieghere 170141a6263SVadim Macagon lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 171d5b44036SJonas Devlieghere if (m_opaque_up) { 172d5b44036SJonas Devlieghere proc_id = m_opaque_up->GetParentProcessID(); 173141a6263SVadim Macagon } 174141a6263SVadim Macagon return proc_id; 175141a6263SVadim Macagon } 176ae211eceSMichal Gorny GetTriple()177251a5d9dSBruce Mitchenerconst char *SBProcessInfo::GetTriple() { 178*1755f5b1SJonas Devlieghere LLDB_INSTRUMENT_VA(this); 179251a5d9dSBruce Mitchener 180251a5d9dSBruce Mitchener const char *triple = nullptr; 181251a5d9dSBruce Mitchener if (m_opaque_up) { 182251a5d9dSBruce Mitchener const auto &arch = m_opaque_up->GetArchitecture(); 183251a5d9dSBruce Mitchener if (arch.IsValid()) { 184251a5d9dSBruce Mitchener // Const-ify the string so we don't need to worry about the lifetime of 185251a5d9dSBruce Mitchener // the string 186251a5d9dSBruce Mitchener triple = ConstString(arch.GetTriple().getTriple().c_str()).GetCString(); 187251a5d9dSBruce Mitchener } 188251a5d9dSBruce Mitchener } 189251a5d9dSBruce Mitchener return triple; 190251a5d9dSBruce Mitchener } 191