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