130fdc8d8SChris Lattner //===-- SBFunction.cpp ------------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1030fdc8d8SChris Lattner #include "lldb/API/SBFunction.h" 1130fdc8d8SChris Lattner #include "lldb/API/SBProcess.h" 12dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 13*1d273166SGreg Clayton #include "lldb/Core/Disassembler.h" 14*1d273166SGreg Clayton #include "lldb/Core/Module.h" 15*1d273166SGreg Clayton #include "lldb/Symbol/CompileUnit.h" 1630fdc8d8SChris Lattner #include "lldb/Symbol/Function.h" 17*1d273166SGreg Clayton #include "lldb/Target/ExecutionContext.h" 18*1d273166SGreg Clayton #include "lldb/Target/Target.h" 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner using namespace lldb; 21*1d273166SGreg Clayton using namespace lldb_private; 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner SBFunction::SBFunction () : 246611103cSGreg Clayton m_opaque_ptr (NULL) 2530fdc8d8SChris Lattner { 2630fdc8d8SChris Lattner } 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner SBFunction::SBFunction (lldb_private::Function *lldb_object_ptr) : 296611103cSGreg Clayton m_opaque_ptr (lldb_object_ptr) 3030fdc8d8SChris Lattner { 3130fdc8d8SChris Lattner } 3230fdc8d8SChris Lattner 3330fdc8d8SChris Lattner SBFunction::~SBFunction () 3430fdc8d8SChris Lattner { 356611103cSGreg Clayton m_opaque_ptr = NULL; 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 3830fdc8d8SChris Lattner bool 3930fdc8d8SChris Lattner SBFunction::IsValid () const 4030fdc8d8SChris Lattner { 416611103cSGreg Clayton return m_opaque_ptr != NULL; 4230fdc8d8SChris Lattner } 4330fdc8d8SChris Lattner 4430fdc8d8SChris Lattner const char * 4530fdc8d8SChris Lattner SBFunction::GetName() const 4630fdc8d8SChris Lattner { 476611103cSGreg Clayton if (m_opaque_ptr) 486611103cSGreg Clayton return m_opaque_ptr->GetMangled().GetName().AsCString(); 4930fdc8d8SChris Lattner return NULL; 5030fdc8d8SChris Lattner } 5130fdc8d8SChris Lattner 5230fdc8d8SChris Lattner const char * 5330fdc8d8SChris Lattner SBFunction::GetMangledName () const 5430fdc8d8SChris Lattner { 556611103cSGreg Clayton if (m_opaque_ptr) 566611103cSGreg Clayton return m_opaque_ptr->GetMangled().GetMangledName().AsCString(); 5730fdc8d8SChris Lattner return NULL; 5830fdc8d8SChris Lattner } 5930fdc8d8SChris Lattner 6030fdc8d8SChris Lattner bool 6130fdc8d8SChris Lattner SBFunction::operator == (const SBFunction &rhs) const 6230fdc8d8SChris Lattner { 636611103cSGreg Clayton return m_opaque_ptr == rhs.m_opaque_ptr; 6430fdc8d8SChris Lattner } 6530fdc8d8SChris Lattner 6630fdc8d8SChris Lattner bool 6730fdc8d8SChris Lattner SBFunction::operator != (const SBFunction &rhs) const 6830fdc8d8SChris Lattner { 696611103cSGreg Clayton return m_opaque_ptr != rhs.m_opaque_ptr; 7030fdc8d8SChris Lattner } 71dde9cff3SCaroline Tice 72dde9cff3SCaroline Tice bool 73dde9cff3SCaroline Tice SBFunction::GetDescription (SBStream &description) 74dde9cff3SCaroline Tice { 75dde9cff3SCaroline Tice if (m_opaque_ptr) 76dde9cff3SCaroline Tice { 77dac97f31SCaroline Tice description.ref(); 78dde9cff3SCaroline Tice m_opaque_ptr->Dump (description.get(), false); 79dde9cff3SCaroline Tice } 80dde9cff3SCaroline Tice else 81dde9cff3SCaroline Tice description.Printf ("No value"); 82dde9cff3SCaroline Tice 83dde9cff3SCaroline Tice return true; 84dde9cff3SCaroline Tice } 85*1d273166SGreg Clayton 86*1d273166SGreg Clayton SBInstructionList 87*1d273166SGreg Clayton SBFunction::GetInstructions (SBTarget target) 88*1d273166SGreg Clayton { 89*1d273166SGreg Clayton SBInstructionList sb_instructions; 90*1d273166SGreg Clayton if (m_opaque_ptr) 91*1d273166SGreg Clayton { 92*1d273166SGreg Clayton ExecutionContext exe_ctx; 93*1d273166SGreg Clayton if (target.IsValid()) 94*1d273166SGreg Clayton { 95*1d273166SGreg Clayton target->CalculateExecutionContext (exe_ctx); 96*1d273166SGreg Clayton exe_ctx.process = target->GetProcessSP().get(); 97*1d273166SGreg Clayton } 98*1d273166SGreg Clayton Module *module = m_opaque_ptr->GetAddressRange().GetBaseAddress().GetModule(); 99*1d273166SGreg Clayton if (module) 100*1d273166SGreg Clayton { 101*1d273166SGreg Clayton sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module->GetArchitecture(), 102*1d273166SGreg Clayton exe_ctx, 103*1d273166SGreg Clayton m_opaque_ptr->GetAddressRange())); 104*1d273166SGreg Clayton } 105*1d273166SGreg Clayton } 106*1d273166SGreg Clayton return sb_instructions; 107*1d273166SGreg Clayton } 108*1d273166SGreg Clayton 109*1d273166SGreg Clayton 110