1*0b57cec5SDimitry Andric //===-- SBExecutionContext.cpp --------------------------------------------===// 2*0b57cec5SDimitry Andric // 3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric // 7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric 9*0b57cec5SDimitry Andric #include "lldb/API/SBExecutionContext.h" 10*0b57cec5SDimitry Andric #include "lldb/Utility/Instrumentation.h" 11*0b57cec5SDimitry Andric 12*0b57cec5SDimitry Andric #include "lldb/API/SBFrame.h" 13*0b57cec5SDimitry Andric #include "lldb/API/SBProcess.h" 14*0b57cec5SDimitry Andric #include "lldb/API/SBTarget.h" 15*0b57cec5SDimitry Andric #include "lldb/API/SBThread.h" 16*0b57cec5SDimitry Andric 17*0b57cec5SDimitry Andric #include "lldb/Target/ExecutionContext.h" 18*0b57cec5SDimitry Andric 19*0b57cec5SDimitry Andric using namespace lldb; 20*0b57cec5SDimitry Andric using namespace lldb_private; 21*0b57cec5SDimitry Andric SBExecutionContext()22*0b57cec5SDimitry AndricSBExecutionContext::SBExecutionContext() { LLDB_INSTRUMENT_VA(this); } 23*0b57cec5SDimitry Andric SBExecutionContext(const lldb::SBExecutionContext & rhs)24*0b57cec5SDimitry AndricSBExecutionContext::SBExecutionContext(const lldb::SBExecutionContext &rhs) 25*0b57cec5SDimitry Andric : m_exe_ctx_sp(rhs.m_exe_ctx_sp) { 26*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 27*0b57cec5SDimitry Andric } 28*0b57cec5SDimitry Andric SBExecutionContext(lldb::ExecutionContextRefSP exe_ctx_ref_sp)29*0b57cec5SDimitry AndricSBExecutionContext::SBExecutionContext( 30*0b57cec5SDimitry Andric lldb::ExecutionContextRefSP exe_ctx_ref_sp) 31*0b57cec5SDimitry Andric : m_exe_ctx_sp(exe_ctx_ref_sp) { 32*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this, exe_ctx_ref_sp); 33*0b57cec5SDimitry Andric } 34*0b57cec5SDimitry Andric SBExecutionContext(const lldb::SBTarget & target)35*0b57cec5SDimitry AndricSBExecutionContext::SBExecutionContext(const lldb::SBTarget &target) 36*0b57cec5SDimitry Andric : m_exe_ctx_sp(new ExecutionContextRef()) { 37*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this, target); 38*0b57cec5SDimitry Andric 39*0b57cec5SDimitry Andric m_exe_ctx_sp->SetTargetSP(target.GetSP()); 40*0b57cec5SDimitry Andric } 41*0b57cec5SDimitry Andric SBExecutionContext(const lldb::SBProcess & process)42*0b57cec5SDimitry AndricSBExecutionContext::SBExecutionContext(const lldb::SBProcess &process) 43*0b57cec5SDimitry Andric : m_exe_ctx_sp(new ExecutionContextRef()) { 44*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this, process); 45*0b57cec5SDimitry Andric 46*0b57cec5SDimitry Andric m_exe_ctx_sp->SetProcessSP(process.GetSP()); 47*0b57cec5SDimitry Andric } 48*0b57cec5SDimitry Andric SBExecutionContext(lldb::SBThread thread)49*0b57cec5SDimitry AndricSBExecutionContext::SBExecutionContext(lldb::SBThread thread) 50*0b57cec5SDimitry Andric : m_exe_ctx_sp(new ExecutionContextRef()) { 51*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this, thread); 52*0b57cec5SDimitry Andric 53*0b57cec5SDimitry Andric m_exe_ctx_sp->SetThreadPtr(thread.get()); 54*0b57cec5SDimitry Andric } 55*0b57cec5SDimitry Andric SBExecutionContext(const lldb::SBFrame & frame)56*0b57cec5SDimitry AndricSBExecutionContext::SBExecutionContext(const lldb::SBFrame &frame) 57*0b57cec5SDimitry Andric : m_exe_ctx_sp(new ExecutionContextRef()) { 58*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this, frame); 59*0b57cec5SDimitry Andric 60*0b57cec5SDimitry Andric m_exe_ctx_sp->SetFrameSP(frame.GetFrameSP()); 61*0b57cec5SDimitry Andric } 62*0b57cec5SDimitry Andric 63*0b57cec5SDimitry Andric SBExecutionContext::~SBExecutionContext() = default; 64*0b57cec5SDimitry Andric 65*0b57cec5SDimitry Andric const SBExecutionContext &SBExecutionContext:: operator =(const lldb::SBExecutionContext & rhs)66*0b57cec5SDimitry Andricoperator=(const lldb::SBExecutionContext &rhs) { 67*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 68*0b57cec5SDimitry Andric 69*0b57cec5SDimitry Andric m_exe_ctx_sp = rhs.m_exe_ctx_sp; 70*0b57cec5SDimitry Andric return *this; 71*0b57cec5SDimitry Andric } 72*0b57cec5SDimitry Andric get() const73*0b57cec5SDimitry AndricExecutionContextRef *SBExecutionContext::get() const { 74*0b57cec5SDimitry Andric return m_exe_ctx_sp.get(); 75*0b57cec5SDimitry Andric } 76*0b57cec5SDimitry Andric GetTarget() const77*0b57cec5SDimitry AndricSBTarget SBExecutionContext::GetTarget() const { 78*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this); 79*0b57cec5SDimitry Andric 80*0b57cec5SDimitry Andric SBTarget sb_target; 81*0b57cec5SDimitry Andric if (m_exe_ctx_sp) { 82*0b57cec5SDimitry Andric TargetSP target_sp(m_exe_ctx_sp->GetTargetSP()); 83*0b57cec5SDimitry Andric if (target_sp) 84*0b57cec5SDimitry Andric sb_target.SetSP(target_sp); 85*0b57cec5SDimitry Andric } 86*0b57cec5SDimitry Andric return sb_target; 87*0b57cec5SDimitry Andric } 88*0b57cec5SDimitry Andric GetProcess() const89*0b57cec5SDimitry AndricSBProcess SBExecutionContext::GetProcess() const { 90*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this); 91*0b57cec5SDimitry Andric 92*0b57cec5SDimitry Andric SBProcess sb_process; 93*0b57cec5SDimitry Andric if (m_exe_ctx_sp) { 94*0b57cec5SDimitry Andric ProcessSP process_sp(m_exe_ctx_sp->GetProcessSP()); 95*0b57cec5SDimitry Andric if (process_sp) 96*0b57cec5SDimitry Andric sb_process.SetSP(process_sp); 97*0b57cec5SDimitry Andric } 98*0b57cec5SDimitry Andric return sb_process; 99*0b57cec5SDimitry Andric } 100*0b57cec5SDimitry Andric GetThread() const101*0b57cec5SDimitry AndricSBThread SBExecutionContext::GetThread() const { 102*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this); 103*0b57cec5SDimitry Andric 104*0b57cec5SDimitry Andric SBThread sb_thread; 105*0b57cec5SDimitry Andric if (m_exe_ctx_sp) { 106*0b57cec5SDimitry Andric ThreadSP thread_sp(m_exe_ctx_sp->GetThreadSP()); 107*0b57cec5SDimitry Andric if (thread_sp) 108*0b57cec5SDimitry Andric sb_thread.SetThread(thread_sp); 109*0b57cec5SDimitry Andric } 110*0b57cec5SDimitry Andric return sb_thread; 111*0b57cec5SDimitry Andric } 112*0b57cec5SDimitry Andric GetFrame() const113*0b57cec5SDimitry AndricSBFrame SBExecutionContext::GetFrame() const { 114*0b57cec5SDimitry Andric LLDB_INSTRUMENT_VA(this); 115*0b57cec5SDimitry Andric 116*0b57cec5SDimitry Andric SBFrame sb_frame; 117*0b57cec5SDimitry Andric if (m_exe_ctx_sp) { 118*0b57cec5SDimitry Andric StackFrameSP frame_sp(m_exe_ctx_sp->GetFrameSP()); 119*0b57cec5SDimitry Andric if (frame_sp) 120*0b57cec5SDimitry Andric sb_frame.SetFrameSP(frame_sp); 121*0b57cec5SDimitry Andric } 122*0b57cec5SDimitry Andric return sb_frame; 123*0b57cec5SDimitry Andric } 124*0b57cec5SDimitry Andric