1cfca06d7SDimitry Andric //===-- SBProcessInfo.cpp -------------------------------------------------===// 2ef5d0b5eSDimitry Andric // 35f29bb8aSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45f29bb8aSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55f29bb8aSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6ef5d0b5eSDimitry Andric // 7ef5d0b5eSDimitry Andric //===----------------------------------------------------------------------===// 8ef5d0b5eSDimitry Andric 9ef5d0b5eSDimitry Andric #include "lldb/API/SBProcessInfo.h" 105f29bb8aSDimitry Andric #include "Utils.h" 11ef5d0b5eSDimitry Andric #include "lldb/API/SBFileSpec.h" 126f8fc217SDimitry Andric #include "lldb/Utility/Instrumentation.h" 135f29bb8aSDimitry Andric #include "lldb/Utility/ProcessInfo.h" 14ef5d0b5eSDimitry Andric 15ef5d0b5eSDimitry Andric using namespace lldb; 16ef5d0b5eSDimitry Andric using namespace lldb_private; 17ef5d0b5eSDimitry Andric SBProcessInfo()186f8fc217SDimitry AndricSBProcessInfo::SBProcessInfo() { LLDB_INSTRUMENT_VA(this); } 195f29bb8aSDimitry Andric SBProcessInfo(const SBProcessInfo & rhs)206f8fc217SDimitry AndricSBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) { 216f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 225f29bb8aSDimitry Andric 235f29bb8aSDimitry Andric m_opaque_up = clone(rhs.m_opaque_up); 24ef5d0b5eSDimitry Andric } 25ef5d0b5eSDimitry Andric 26cfca06d7SDimitry Andric SBProcessInfo::~SBProcessInfo() = default; 27ef5d0b5eSDimitry Andric operator =(const SBProcessInfo & rhs)28ef5d0b5eSDimitry AndricSBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) { 296f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 305f29bb8aSDimitry Andric 315f29bb8aSDimitry Andric if (this != &rhs) 325f29bb8aSDimitry Andric m_opaque_up = clone(rhs.m_opaque_up); 336f8fc217SDimitry Andric return *this; 34ef5d0b5eSDimitry Andric } 35ef5d0b5eSDimitry Andric ref()36ef5d0b5eSDimitry AndricProcessInstanceInfo &SBProcessInfo::ref() { 375f29bb8aSDimitry Andric if (m_opaque_up == nullptr) { 38cfca06d7SDimitry Andric m_opaque_up = std::make_unique<ProcessInstanceInfo>(); 39ef5d0b5eSDimitry Andric } 405f29bb8aSDimitry Andric return *m_opaque_up; 41ef5d0b5eSDimitry Andric } 42ef5d0b5eSDimitry Andric SetProcessInfo(const ProcessInstanceInfo & proc_info_ref)43ef5d0b5eSDimitry Andricvoid SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) { 44ef5d0b5eSDimitry Andric ref() = proc_info_ref; 45ef5d0b5eSDimitry Andric } 46ef5d0b5eSDimitry Andric IsValid() const475f29bb8aSDimitry Andricbool SBProcessInfo::IsValid() const { 486f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 495f29bb8aSDimitry Andric return this->operator bool(); 505f29bb8aSDimitry Andric } operator bool() const515f29bb8aSDimitry AndricSBProcessInfo::operator bool() const { 526f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 535f29bb8aSDimitry Andric 545f29bb8aSDimitry Andric return m_opaque_up != nullptr; 555f29bb8aSDimitry Andric } 56ef5d0b5eSDimitry Andric GetName()57ef5d0b5eSDimitry Andricconst char *SBProcessInfo::GetName() { 586f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 595f29bb8aSDimitry Andric 607fa27ce4SDimitry Andric if (!m_opaque_up) 617fa27ce4SDimitry Andric return nullptr; 627fa27ce4SDimitry Andric 637fa27ce4SDimitry Andric return ConstString(m_opaque_up->GetName()).GetCString(); 64ef5d0b5eSDimitry Andric } 65ef5d0b5eSDimitry Andric GetExecutableFile()66ef5d0b5eSDimitry AndricSBFileSpec SBProcessInfo::GetExecutableFile() { 676f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 685f29bb8aSDimitry Andric 69ef5d0b5eSDimitry Andric SBFileSpec file_spec; 705f29bb8aSDimitry Andric if (m_opaque_up) { 715f29bb8aSDimitry Andric file_spec.SetFileSpec(m_opaque_up->GetExecutableFile()); 72ef5d0b5eSDimitry Andric } 736f8fc217SDimitry Andric return file_spec; 74ef5d0b5eSDimitry Andric } 75ef5d0b5eSDimitry Andric GetProcessID()76ef5d0b5eSDimitry Andriclldb::pid_t SBProcessInfo::GetProcessID() { 776f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 785f29bb8aSDimitry Andric 79ef5d0b5eSDimitry Andric lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 805f29bb8aSDimitry Andric if (m_opaque_up) { 815f29bb8aSDimitry Andric proc_id = m_opaque_up->GetProcessID(); 82ef5d0b5eSDimitry Andric } 83ef5d0b5eSDimitry Andric return proc_id; 84ef5d0b5eSDimitry Andric } 85ef5d0b5eSDimitry Andric GetUserID()86ef5d0b5eSDimitry Andricuint32_t SBProcessInfo::GetUserID() { 876f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 885f29bb8aSDimitry Andric 89ef5d0b5eSDimitry Andric uint32_t user_id = UINT32_MAX; 905f29bb8aSDimitry Andric if (m_opaque_up) { 915f29bb8aSDimitry Andric user_id = m_opaque_up->GetUserID(); 92ef5d0b5eSDimitry Andric } 93ef5d0b5eSDimitry Andric return user_id; 94ef5d0b5eSDimitry Andric } 95ef5d0b5eSDimitry Andric GetGroupID()96ef5d0b5eSDimitry Andricuint32_t SBProcessInfo::GetGroupID() { 976f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 985f29bb8aSDimitry Andric 99ef5d0b5eSDimitry Andric uint32_t group_id = UINT32_MAX; 1005f29bb8aSDimitry Andric if (m_opaque_up) { 1015f29bb8aSDimitry Andric group_id = m_opaque_up->GetGroupID(); 102ef5d0b5eSDimitry Andric } 103ef5d0b5eSDimitry Andric return group_id; 104ef5d0b5eSDimitry Andric } 105ef5d0b5eSDimitry Andric UserIDIsValid()106ef5d0b5eSDimitry Andricbool SBProcessInfo::UserIDIsValid() { 1076f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 1085f29bb8aSDimitry Andric 109ef5d0b5eSDimitry Andric bool is_valid = false; 1105f29bb8aSDimitry Andric if (m_opaque_up) { 1115f29bb8aSDimitry Andric is_valid = m_opaque_up->UserIDIsValid(); 112ef5d0b5eSDimitry Andric } 113ef5d0b5eSDimitry Andric return is_valid; 114ef5d0b5eSDimitry Andric } 115ef5d0b5eSDimitry Andric GroupIDIsValid()116ef5d0b5eSDimitry Andricbool SBProcessInfo::GroupIDIsValid() { 1176f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 1185f29bb8aSDimitry Andric 119ef5d0b5eSDimitry Andric bool is_valid = false; 1205f29bb8aSDimitry Andric if (m_opaque_up) { 1215f29bb8aSDimitry Andric is_valid = m_opaque_up->GroupIDIsValid(); 122ef5d0b5eSDimitry Andric } 123ef5d0b5eSDimitry Andric return is_valid; 124ef5d0b5eSDimitry Andric } 125ef5d0b5eSDimitry Andric GetEffectiveUserID()126ef5d0b5eSDimitry Andricuint32_t SBProcessInfo::GetEffectiveUserID() { 1276f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 1285f29bb8aSDimitry Andric 129ef5d0b5eSDimitry Andric uint32_t user_id = UINT32_MAX; 1305f29bb8aSDimitry Andric if (m_opaque_up) { 1315f29bb8aSDimitry Andric user_id = m_opaque_up->GetEffectiveUserID(); 132ef5d0b5eSDimitry Andric } 133ef5d0b5eSDimitry Andric return user_id; 134ef5d0b5eSDimitry Andric } 135ef5d0b5eSDimitry Andric GetEffectiveGroupID()136ef5d0b5eSDimitry Andricuint32_t SBProcessInfo::GetEffectiveGroupID() { 1376f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 1385f29bb8aSDimitry Andric 139ef5d0b5eSDimitry Andric uint32_t group_id = UINT32_MAX; 1405f29bb8aSDimitry Andric if (m_opaque_up) { 1415f29bb8aSDimitry Andric group_id = m_opaque_up->GetEffectiveGroupID(); 142ef5d0b5eSDimitry Andric } 143ef5d0b5eSDimitry Andric return group_id; 144ef5d0b5eSDimitry Andric } 145ef5d0b5eSDimitry Andric EffectiveUserIDIsValid()146ef5d0b5eSDimitry Andricbool SBProcessInfo::EffectiveUserIDIsValid() { 1476f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 1485f29bb8aSDimitry Andric 149ef5d0b5eSDimitry Andric bool is_valid = false; 1505f29bb8aSDimitry Andric if (m_opaque_up) { 1515f29bb8aSDimitry Andric is_valid = m_opaque_up->EffectiveUserIDIsValid(); 152ef5d0b5eSDimitry Andric } 153ef5d0b5eSDimitry Andric return is_valid; 154ef5d0b5eSDimitry Andric } 155ef5d0b5eSDimitry Andric EffectiveGroupIDIsValid()156ef5d0b5eSDimitry Andricbool SBProcessInfo::EffectiveGroupIDIsValid() { 1576f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 1585f29bb8aSDimitry Andric 159ef5d0b5eSDimitry Andric bool is_valid = false; 1605f29bb8aSDimitry Andric if (m_opaque_up) { 1615f29bb8aSDimitry Andric is_valid = m_opaque_up->EffectiveGroupIDIsValid(); 162ef5d0b5eSDimitry Andric } 163ef5d0b5eSDimitry Andric return is_valid; 164ef5d0b5eSDimitry Andric } 165ef5d0b5eSDimitry Andric GetParentProcessID()166ef5d0b5eSDimitry Andriclldb::pid_t SBProcessInfo::GetParentProcessID() { 1676f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 1685f29bb8aSDimitry Andric 169ef5d0b5eSDimitry Andric lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID; 1705f29bb8aSDimitry Andric if (m_opaque_up) { 1715f29bb8aSDimitry Andric proc_id = m_opaque_up->GetParentProcessID(); 172ef5d0b5eSDimitry Andric } 173ef5d0b5eSDimitry Andric return proc_id; 174ef5d0b5eSDimitry Andric } 1755f29bb8aSDimitry Andric GetTriple()176344a3780SDimitry Andricconst char *SBProcessInfo::GetTriple() { 1776f8fc217SDimitry Andric LLDB_INSTRUMENT_VA(this); 178344a3780SDimitry Andric 1797fa27ce4SDimitry Andric if (!m_opaque_up) 1807fa27ce4SDimitry Andric return nullptr; 1817fa27ce4SDimitry Andric 182344a3780SDimitry Andric const auto &arch = m_opaque_up->GetArchitecture(); 1837fa27ce4SDimitry Andric if (!arch.IsValid()) 1847fa27ce4SDimitry Andric return nullptr; 1857fa27ce4SDimitry Andric 1867fa27ce4SDimitry Andric return ConstString(arch.GetTriple().getTriple().c_str()).GetCString(); 187344a3780SDimitry Andric } 188