blob: f1426e787cdd86968c637220f42ef1bf52c60c23 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBFunction.cpp ------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/API/SBFunction.h"
11#include "lldb/API/SBProcess.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000012#include "lldb/API/SBStream.h"
Greg Clayton5c4c7462010-10-06 03:09:58 +000013#include "lldb/Core/Disassembler.h"
14#include "lldb/Core/Module.h"
15#include "lldb/Symbol/CompileUnit.h"
Chris Lattner24943d22010-06-08 16:52:24 +000016#include "lldb/Symbol/Function.h"
Greg Clayton5c4c7462010-10-06 03:09:58 +000017#include "lldb/Target/ExecutionContext.h"
18#include "lldb/Target/Target.h"
Chris Lattner24943d22010-06-08 16:52:24 +000019
20using namespace lldb;
Greg Clayton5c4c7462010-10-06 03:09:58 +000021using namespace lldb_private;
Chris Lattner24943d22010-06-08 16:52:24 +000022
23SBFunction::SBFunction () :
Greg Clayton63094e02010-06-23 01:19:29 +000024 m_opaque_ptr (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000025{
26}
27
28SBFunction::SBFunction (lldb_private::Function *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000029 m_opaque_ptr (lldb_object_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000030{
31}
32
33SBFunction::~SBFunction ()
34{
Greg Clayton63094e02010-06-23 01:19:29 +000035 m_opaque_ptr = NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000036}
37
38bool
39SBFunction::IsValid () const
40{
Greg Clayton63094e02010-06-23 01:19:29 +000041 return m_opaque_ptr != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000042}
43
44const char *
45SBFunction::GetName() const
46{
Greg Clayton63094e02010-06-23 01:19:29 +000047 if (m_opaque_ptr)
48 return m_opaque_ptr->GetMangled().GetName().AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +000049 return NULL;
50}
51
52const char *
53SBFunction::GetMangledName () const
54{
Greg Clayton63094e02010-06-23 01:19:29 +000055 if (m_opaque_ptr)
56 return m_opaque_ptr->GetMangled().GetMangledName().AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +000057 return NULL;
58}
59
60bool
61SBFunction::operator == (const SBFunction &rhs) const
62{
Greg Clayton63094e02010-06-23 01:19:29 +000063 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000064}
65
66bool
67SBFunction::operator != (const SBFunction &rhs) const
68{
Greg Clayton63094e02010-06-23 01:19:29 +000069 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000070}
Caroline Tice98f930f2010-09-20 05:20:02 +000071
72bool
73SBFunction::GetDescription (SBStream &description)
74{
75 if (m_opaque_ptr)
76 {
Caroline Ticee49ec182010-09-22 23:01:29 +000077 description.ref();
Caroline Tice98f930f2010-09-20 05:20:02 +000078 m_opaque_ptr->Dump (description.get(), false);
79 }
80 else
Caroline Ticee7a566e2010-09-20 16:21:41 +000081 description.Printf ("No value");
Caroline Tice98f930f2010-09-20 05:20:02 +000082
83 return true;
84}
Greg Clayton5c4c7462010-10-06 03:09:58 +000085
86SBInstructionList
87SBFunction::GetInstructions (SBTarget target)
88{
89 SBInstructionList sb_instructions;
90 if (m_opaque_ptr)
91 {
92 ExecutionContext exe_ctx;
93 if (target.IsValid())
94 {
95 target->CalculateExecutionContext (exe_ctx);
96 exe_ctx.process = target->GetProcessSP().get();
97 }
98 Module *module = m_opaque_ptr->GetAddressRange().GetBaseAddress().GetModule();
99 if (module)
100 {
101 sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module->GetArchitecture(),
102 exe_ctx,
103 m_opaque_ptr->GetAddressRange()));
104 }
105 }
106 return sb_instructions;
107}
108
109