1141a6263SVadim Macagon //===-- SBProcessInfo.cpp ---------------------------------------*- C++ -*-===// 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" 10baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h" 11bd4bf82aSJonas Devlieghere #include "Utils.h" 12141a6263SVadim Macagon #include "lldb/API/SBFileSpec.h" 13805e7106SZachary Turner #include "lldb/Utility/ProcessInfo.h" 14141a6263SVadim Macagon 15141a6263SVadim Macagon using namespace lldb; 16141a6263SVadim Macagon using namespace lldb_private; 17141a6263SVadim Macagon 18baf5664fSJonas Devlieghere SBProcessInfo::SBProcessInfo() : m_opaque_up() { 19baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBProcessInfo); 20baf5664fSJonas Devlieghere } 21141a6263SVadim Macagon 22d5b44036SJonas Devlieghere SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_up() { 23baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &), rhs); 24baf5664fSJonas Devlieghere 25bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up); 26141a6263SVadim Macagon } 27141a6263SVadim Macagon 28141a6263SVadim Macagon SBProcessInfo::~SBProcessInfo() {} 29141a6263SVadim Macagon 30141a6263SVadim Macagon SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) { 31baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBProcessInfo &, 32baf5664fSJonas Devlieghere SBProcessInfo, operator=,(const lldb::SBProcessInfo &), 33baf5664fSJonas Devlieghere rhs); 34baf5664fSJonas Devlieghere 35bd4bf82aSJonas Devlieghere if (this != &rhs) 36bd4bf82aSJonas Devlieghere m_opaque_up = clone(rhs.m_opaque_up); 37141a6263SVadim Macagon return *this; 38141a6263SVadim Macagon } 39141a6263SVadim Macagon 40141a6263SVadim Macagon ProcessInstanceInfo &SBProcessInfo::ref() { 41d5b44036SJonas Devlieghere if (m_opaque_up == nullptr) { 42d5b44036SJonas Devlieghere m_opaque_up.reset(new ProcessInstanceInfo()); 43141a6263SVadim Macagon } 44d5b44036SJonas Devlieghere return *m_opaque_up; 45141a6263SVadim Macagon } 46141a6263SVadim Macagon 47141a6263SVadim Macagon void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) { 48141a6263SVadim Macagon ref() = proc_info_ref; 49141a6263SVadim Macagon } 50141a6263SVadim Macagon 51baf5664fSJonas Devlieghere bool SBProcessInfo::IsValid() const { 52baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, IsValid); 537f5237bcSPavel Labath return this->operator bool(); 547f5237bcSPavel Labath } 557f5237bcSPavel Labath SBProcessInfo::operator bool() const { 567f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, operator bool); 57baf5664fSJonas Devlieghere 58baf5664fSJonas Devlieghere return m_opaque_up != nullptr; 59baf5664fSJonas Devlieghere } 60141a6263SVadim Macagon 61141a6263SVadim Macagon const char *SBProcessInfo::GetName() { 62baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBProcessInfo, GetName); 63baf5664fSJonas Devlieghere 64141a6263SVadim Macagon const char *name = nullptr; 65d5b44036SJonas Devlieghere if (m_opaque_up) { 66d5b44036SJonas Devlieghere name = m_opaque_up->GetName(); 67141a6263SVadim Macagon } 68141a6263SVadim Macagon return name; 69141a6263SVadim Macagon } 70141a6263SVadim Macagon 71141a6263SVadim Macagon SBFileSpec SBProcessInfo::GetExecutableFile() { 72baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBProcessInfo, 73baf5664fSJonas Devlieghere GetExecutableFile); 74baf5664fSJonas Devlieghere 75141a6263SVadim Macagon SBFileSpec file_spec; 76d5b44036SJonas Devlieghere if (m_opaque_up) { 77d5b44036SJonas Devlieghere file_spec.SetFileSpec(m_opaque_up->GetExecutableFile()); 78141a6263SVadim Macagon } 79baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(file_spec); 80141a6263SVadim Macagon } 81141a6263SVadim Macagon 82141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetProcessID() { 83baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetProcessID); 84baf5664fSJonas Devlieghere 85141a6263SVadim Macagon lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 86d5b44036SJonas Devlieghere if (m_opaque_up) { 87d5b44036SJonas Devlieghere proc_id = m_opaque_up->GetProcessID(); 88141a6263SVadim Macagon } 89141a6263SVadim Macagon return proc_id; 90141a6263SVadim Macagon } 91141a6263SVadim Macagon 92141a6263SVadim Macagon uint32_t SBProcessInfo::GetUserID() { 93baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetUserID); 94baf5664fSJonas Devlieghere 95141a6263SVadim Macagon uint32_t user_id = UINT32_MAX; 96d5b44036SJonas Devlieghere if (m_opaque_up) { 97d5b44036SJonas Devlieghere user_id = m_opaque_up->GetUserID(); 98141a6263SVadim Macagon } 99141a6263SVadim Macagon return user_id; 100141a6263SVadim Macagon } 101141a6263SVadim Macagon 102141a6263SVadim Macagon uint32_t SBProcessInfo::GetGroupID() { 103baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetGroupID); 104baf5664fSJonas Devlieghere 105141a6263SVadim Macagon uint32_t group_id = UINT32_MAX; 106d5b44036SJonas Devlieghere if (m_opaque_up) { 107d5b44036SJonas Devlieghere group_id = m_opaque_up->GetGroupID(); 108141a6263SVadim Macagon } 109141a6263SVadim Macagon return group_id; 110141a6263SVadim Macagon } 111141a6263SVadim Macagon 112141a6263SVadim Macagon bool SBProcessInfo::UserIDIsValid() { 113baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, UserIDIsValid); 114baf5664fSJonas Devlieghere 115141a6263SVadim Macagon bool is_valid = false; 116d5b44036SJonas Devlieghere if (m_opaque_up) { 117d5b44036SJonas Devlieghere is_valid = m_opaque_up->UserIDIsValid(); 118141a6263SVadim Macagon } 119141a6263SVadim Macagon return is_valid; 120141a6263SVadim Macagon } 121141a6263SVadim Macagon 122141a6263SVadim Macagon bool SBProcessInfo::GroupIDIsValid() { 123baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, GroupIDIsValid); 124baf5664fSJonas Devlieghere 125141a6263SVadim Macagon bool is_valid = false; 126d5b44036SJonas Devlieghere if (m_opaque_up) { 127d5b44036SJonas Devlieghere is_valid = m_opaque_up->GroupIDIsValid(); 128141a6263SVadim Macagon } 129141a6263SVadim Macagon return is_valid; 130141a6263SVadim Macagon } 131141a6263SVadim Macagon 132141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveUserID() { 133baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveUserID); 134baf5664fSJonas Devlieghere 135141a6263SVadim Macagon uint32_t user_id = UINT32_MAX; 136d5b44036SJonas Devlieghere if (m_opaque_up) { 137d5b44036SJonas Devlieghere user_id = m_opaque_up->GetEffectiveUserID(); 138141a6263SVadim Macagon } 139141a6263SVadim Macagon return user_id; 140141a6263SVadim Macagon } 141141a6263SVadim Macagon 142141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveGroupID() { 143baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveGroupID); 144baf5664fSJonas Devlieghere 145141a6263SVadim Macagon uint32_t group_id = UINT32_MAX; 146d5b44036SJonas Devlieghere if (m_opaque_up) { 147d5b44036SJonas Devlieghere group_id = m_opaque_up->GetEffectiveGroupID(); 148141a6263SVadim Macagon } 149141a6263SVadim Macagon return group_id; 150141a6263SVadim Macagon } 151141a6263SVadim Macagon 152141a6263SVadim Macagon bool SBProcessInfo::EffectiveUserIDIsValid() { 153baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveUserIDIsValid); 154baf5664fSJonas Devlieghere 155141a6263SVadim Macagon bool is_valid = false; 156d5b44036SJonas Devlieghere if (m_opaque_up) { 157d5b44036SJonas Devlieghere is_valid = m_opaque_up->EffectiveUserIDIsValid(); 158141a6263SVadim Macagon } 159141a6263SVadim Macagon return is_valid; 160141a6263SVadim Macagon } 161141a6263SVadim Macagon 162141a6263SVadim Macagon bool SBProcessInfo::EffectiveGroupIDIsValid() { 163baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveGroupIDIsValid); 164baf5664fSJonas Devlieghere 165141a6263SVadim Macagon bool is_valid = false; 166d5b44036SJonas Devlieghere if (m_opaque_up) { 167d5b44036SJonas Devlieghere is_valid = m_opaque_up->EffectiveGroupIDIsValid(); 168141a6263SVadim Macagon } 169141a6263SVadim Macagon return is_valid; 170141a6263SVadim Macagon } 171141a6263SVadim Macagon 172141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetParentProcessID() { 173baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetParentProcessID); 174baf5664fSJonas Devlieghere 175141a6263SVadim Macagon lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 176d5b44036SJonas Devlieghere if (m_opaque_up) { 177d5b44036SJonas Devlieghere proc_id = m_opaque_up->GetParentProcessID(); 178141a6263SVadim Macagon } 179141a6263SVadim Macagon return proc_id; 180141a6263SVadim Macagon } 181*ae211eceSMichal Gorny 182*ae211eceSMichal Gorny namespace lldb_private { 183*ae211eceSMichal Gorny namespace repro { 184*ae211eceSMichal Gorny 185*ae211eceSMichal Gorny template <> 186*ae211eceSMichal Gorny void RegisterMethods<SBProcessInfo>(Registry &R) { 187*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBProcessInfo, ()); 188*ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &)); 189*ae211eceSMichal Gorny LLDB_REGISTER_METHOD( 190*ae211eceSMichal Gorny lldb::SBProcessInfo &, 191*ae211eceSMichal Gorny SBProcessInfo, operator=,(const lldb::SBProcessInfo &)); 192*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBProcessInfo, IsValid, ()); 193*ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBProcessInfo, operator bool, ()); 194*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBProcessInfo, GetName, ()); 195*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBFileSpec, SBProcessInfo, GetExecutableFile, 196*ae211eceSMichal Gorny ()); 197*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::pid_t, SBProcessInfo, GetProcessID, ()); 198*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetUserID, ()); 199*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetGroupID, ()); 200*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBProcessInfo, UserIDIsValid, ()); 201*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBProcessInfo, GroupIDIsValid, ()); 202*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetEffectiveUserID, ()); 203*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBProcessInfo, GetEffectiveGroupID, ()); 204*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBProcessInfo, EffectiveUserIDIsValid, ()); 205*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBProcessInfo, EffectiveGroupIDIsValid, ()); 206*ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::pid_t, SBProcessInfo, GetParentProcessID, ()); 207*ae211eceSMichal Gorny } 208*ae211eceSMichal Gorny 209*ae211eceSMichal Gorny } 210*ae211eceSMichal Gorny } 211