15ffd83dbSDimitry Andric //===-- SBProcessInfo.cpp -------------------------------------------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric #include "lldb/API/SBProcessInfo.h" 100b57cec5SDimitry Andric #include "Utils.h" 110b57cec5SDimitry Andric #include "lldb/API/SBFileSpec.h" 1204eeddc0SDimitry Andric #include "lldb/Utility/Instrumentation.h" 130b57cec5SDimitry Andric #include "lldb/Utility/ProcessInfo.h" 140b57cec5SDimitry Andric 150b57cec5SDimitry Andric using namespace lldb; 160b57cec5SDimitry Andric using namespace lldb_private; 170b57cec5SDimitry Andric SBProcessInfo()1804eeddc0SDimitry AndricSBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); } 190b57cec5SDimitry Andric SBProcessInfo(const SBProcessInfo & rhs)2004eeddc0SDimitry AndricSBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) { 2104eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 220b57cec5SDimitry Andric 230b57cec5SDimitry Andric m_opaque_up = clone(rhs.m_opaque_up); 240b57cec5SDimitry Andric } 250b57cec5SDimitry Andric 265ffd83dbSDimitry Andric SBProcessInfo::~SBProcessInfo() = default; 270b57cec5SDimitry Andric operator =(const SBProcessInfo & rhs)280b57cec5SDimitry AndricSBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) { 2904eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 300b57cec5SDimitry Andric 310b57cec5SDimitry Andric if (this != &rhs) 320b57cec5SDimitry Andric m_opaque_up = clone(rhs.m_opaque_up); 3304eeddc0SDimitry Andric return *this; 340b57cec5SDimitry Andric } 350b57cec5SDimitry Andric ref()360b57cec5SDimitry AndricProcessInstanceInfo &SBProcessInfo::ref() { 370b57cec5SDimitry Andric if (m_opaque_up == nullptr) { 385ffd83dbSDimitry Andric m_opaque_up = std::make_unique<ProcessInstanceInfo>(); 390b57cec5SDimitry Andric } 400b57cec5SDimitry Andric return *m_opaque_up; 410b57cec5SDimitry Andric } 420b57cec5SDimitry Andric SetProcessInfo(const ProcessInstanceInfo & proc_info_ref)430b57cec5SDimitry Andricvoid SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) { 440b57cec5SDimitry Andric ref() = proc_info_ref; 450b57cec5SDimitry Andric } 460b57cec5SDimitry Andric IsValid() const470b57cec5SDimitry Andricbool SBProcessInfo::IsValid() const { 4804eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 490b57cec5SDimitry Andric return this->operator bool(); 500b57cec5SDimitry Andric } operator bool() const510b57cec5SDimitry AndricSBProcessInfo::operator bool() const { 5204eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 530b57cec5SDimitry Andric 540b57cec5SDimitry Andric return m_opaque_up != nullptr; 550b57cec5SDimitry Andric } 560b57cec5SDimitry Andric GetName()570b57cec5SDimitry Andricconst char *SBProcessInfo::GetName() { 5804eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 590b57cec5SDimitry Andric 60*fe013be4SDimitry Andric if (!m_opaque_up) 61*fe013be4SDimitry Andric return nullptr; 62*fe013be4SDimitry Andric 63*fe013be4SDimitry Andric return ConstString(m_opaque_up->GetName()).GetCString(); 640b57cec5SDimitry Andric } 650b57cec5SDimitry Andric GetExecutableFile()660b57cec5SDimitry AndricSBFileSpec SBProcessInfo::GetExecutableFile() { 6704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 680b57cec5SDimitry Andric 690b57cec5SDimitry Andric SBFileSpec file_spec; 700b57cec5SDimitry Andric if (m_opaque_up) { 710b57cec5SDimitry Andric file_spec.SetFileSpec(m_opaque_up->GetExecutableFile()); 720b57cec5SDimitry Andric } 7304eeddc0SDimitry Andric return file_spec; 740b57cec5SDimitry Andric } 750b57cec5SDimitry Andric GetProcessID()760b57cec5SDimitry Andriclldb::pid_t SBProcessInfo::GetProcessID() { 7704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 780b57cec5SDimitry Andric 790b57cec5SDimitry Andric lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 800b57cec5SDimitry Andric if (m_opaque_up) { 810b57cec5SDimitry Andric proc_id = m_opaque_up->GetProcessID(); 820b57cec5SDimitry Andric } 830b57cec5SDimitry Andric return proc_id; 840b57cec5SDimitry Andric } 850b57cec5SDimitry Andric GetUserID()860b57cec5SDimitry Andricuint32_t SBProcessInfo::GetUserID() { 8704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 880b57cec5SDimitry Andric 890b57cec5SDimitry Andric uint32_t user_id = UINT32_MAX; 900b57cec5SDimitry Andric if (m_opaque_up) { 910b57cec5SDimitry Andric user_id = m_opaque_up->GetUserID(); 920b57cec5SDimitry Andric } 930b57cec5SDimitry Andric return user_id; 940b57cec5SDimitry Andric } 950b57cec5SDimitry Andric GetGroupID()960b57cec5SDimitry Andricuint32_t SBProcessInfo::GetGroupID() { 9704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 980b57cec5SDimitry Andric 990b57cec5SDimitry Andric uint32_t group_id = UINT32_MAX; 1000b57cec5SDimitry Andric if (m_opaque_up) { 1010b57cec5SDimitry Andric group_id = m_opaque_up->GetGroupID(); 1020b57cec5SDimitry Andric } 1030b57cec5SDimitry Andric return group_id; 1040b57cec5SDimitry Andric } 1050b57cec5SDimitry Andric UserIDIsValid()1060b57cec5SDimitry Andricbool SBProcessInfo::UserIDIsValid() { 10704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andric bool is_valid = false; 1100b57cec5SDimitry Andric if (m_opaque_up) { 1110b57cec5SDimitry Andric is_valid = m_opaque_up->UserIDIsValid(); 1120b57cec5SDimitry Andric } 1130b57cec5SDimitry Andric return is_valid; 1140b57cec5SDimitry Andric } 1150b57cec5SDimitry Andric GroupIDIsValid()1160b57cec5SDimitry Andricbool SBProcessInfo::GroupIDIsValid() { 11704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 1180b57cec5SDimitry Andric 1190b57cec5SDimitry Andric bool is_valid = false; 1200b57cec5SDimitry Andric if (m_opaque_up) { 1210b57cec5SDimitry Andric is_valid = m_opaque_up->GroupIDIsValid(); 1220b57cec5SDimitry Andric } 1230b57cec5SDimitry Andric return is_valid; 1240b57cec5SDimitry Andric } 1250b57cec5SDimitry Andric GetEffectiveUserID()1260b57cec5SDimitry Andricuint32_t SBProcessInfo::GetEffectiveUserID() { 12704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 1280b57cec5SDimitry Andric 1290b57cec5SDimitry Andric uint32_t user_id = UINT32_MAX; 1300b57cec5SDimitry Andric if (m_opaque_up) { 1310b57cec5SDimitry Andric user_id = m_opaque_up->GetEffectiveUserID(); 1320b57cec5SDimitry Andric } 1330b57cec5SDimitry Andric return user_id; 1340b57cec5SDimitry Andric } 1350b57cec5SDimitry Andric GetEffectiveGroupID()1360b57cec5SDimitry Andricuint32_t SBProcessInfo::GetEffectiveGroupID() { 13704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 1380b57cec5SDimitry Andric 1390b57cec5SDimitry Andric uint32_t group_id = UINT32_MAX; 1400b57cec5SDimitry Andric if (m_opaque_up) { 1410b57cec5SDimitry Andric group_id = m_opaque_up->GetEffectiveGroupID(); 1420b57cec5SDimitry Andric } 1430b57cec5SDimitry Andric return group_id; 1440b57cec5SDimitry Andric } 1450b57cec5SDimitry Andric EffectiveUserIDIsValid()1460b57cec5SDimitry Andricbool SBProcessInfo::EffectiveUserIDIsValid() { 14704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 1480b57cec5SDimitry Andric 1490b57cec5SDimitry Andric bool is_valid = false; 1500b57cec5SDimitry Andric if (m_opaque_up) { 1510b57cec5SDimitry Andric is_valid = m_opaque_up->EffectiveUserIDIsValid(); 1520b57cec5SDimitry Andric } 1530b57cec5SDimitry Andric return is_valid; 1540b57cec5SDimitry Andric } 1550b57cec5SDimitry Andric EffectiveGroupIDIsValid()1560b57cec5SDimitry Andricbool SBProcessInfo::EffectiveGroupIDIsValid() { 15704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 1580b57cec5SDimitry Andric 1590b57cec5SDimitry Andric bool is_valid = false; 1600b57cec5SDimitry Andric if (m_opaque_up) { 1610b57cec5SDimitry Andric is_valid = m_opaque_up->EffectiveGroupIDIsValid(); 1620b57cec5SDimitry Andric } 1630b57cec5SDimitry Andric return is_valid; 1640b57cec5SDimitry Andric } 1650b57cec5SDimitry Andric GetParentProcessID()1660b57cec5SDimitry Andriclldb::pid_t SBProcessInfo::GetParentProcessID() { 16704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 1680b57cec5SDimitry Andric 1690b57cec5SDimitry Andric lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 1700b57cec5SDimitry Andric if (m_opaque_up) { 1710b57cec5SDimitry Andric proc_id = m_opaque_up->GetParentProcessID(); 1720b57cec5SDimitry Andric } 1730b57cec5SDimitry Andric return proc_id; 1740b57cec5SDimitry Andric } 1750b57cec5SDimitry Andric GetTriple()176fe6060f1SDimitry Andricconst char *SBProcessInfo::GetTriple() { 17704eeddc0SDimitry Andric LLDB_INSTRUMENT_VA(this); 178fe6060f1SDimitry Andric 179*fe013be4SDimitry Andric if (!m_opaque_up) 180*fe013be4SDimitry Andric return nullptr; 181*fe013be4SDimitry Andric 182fe6060f1SDimitry Andric const auto &arch = m_opaque_up->GetArchitecture(); 183*fe013be4SDimitry Andric if (!arch.IsValid()) 184*fe013be4SDimitry Andric return nullptr; 185*fe013be4SDimitry Andric 186*fe013be4SDimitry Andric return ConstString(arch.GetTriple().getTriple().c_str()).GetCString(); 187fe6060f1SDimitry Andric } 188