blob: de56a2e0edee4f3759ec71b43a01aee99e439fb2 [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 Claytond8c62532010-10-07 04:19:01 +000017#include "lldb/Symbol/Type.h"
Greg Clayton5c4c7462010-10-06 03:09:58 +000018#include "lldb/Target/ExecutionContext.h"
19#include "lldb/Target/Target.h"
Chris Lattner24943d22010-06-08 16:52:24 +000020
21using namespace lldb;
Greg Clayton5c4c7462010-10-06 03:09:58 +000022using namespace lldb_private;
Chris Lattner24943d22010-06-08 16:52:24 +000023
24SBFunction::SBFunction () :
Greg Clayton63094e02010-06-23 01:19:29 +000025 m_opaque_ptr (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000026{
27}
28
29SBFunction::SBFunction (lldb_private::Function *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000030 m_opaque_ptr (lldb_object_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000031{
32}
33
34SBFunction::~SBFunction ()
35{
Greg Clayton63094e02010-06-23 01:19:29 +000036 m_opaque_ptr = NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000037}
38
39bool
40SBFunction::IsValid () const
41{
Greg Clayton63094e02010-06-23 01:19:29 +000042 return m_opaque_ptr != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000043}
44
45const char *
46SBFunction::GetName() const
47{
Greg Clayton63094e02010-06-23 01:19:29 +000048 if (m_opaque_ptr)
49 return m_opaque_ptr->GetMangled().GetName().AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +000050 return NULL;
51}
52
53const char *
54SBFunction::GetMangledName () const
55{
Greg Clayton63094e02010-06-23 01:19:29 +000056 if (m_opaque_ptr)
57 return m_opaque_ptr->GetMangled().GetMangledName().AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +000058 return NULL;
59}
60
61bool
62SBFunction::operator == (const SBFunction &rhs) const
63{
Greg Clayton63094e02010-06-23 01:19:29 +000064 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000065}
66
67bool
68SBFunction::operator != (const SBFunction &rhs) const
69{
Greg Clayton63094e02010-06-23 01:19:29 +000070 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000071}
Caroline Tice98f930f2010-09-20 05:20:02 +000072
73bool
Greg Claytond8c62532010-10-07 04:19:01 +000074SBFunction::GetDescription (SBStream &s)
Caroline Tice98f930f2010-09-20 05:20:02 +000075{
76 if (m_opaque_ptr)
77 {
Greg Claytond8c62532010-10-07 04:19:01 +000078 s.Printf ("SBFunction: id = 0x%8.8x, name = %s",
79 m_opaque_ptr->GetID(),
80 m_opaque_ptr->GetName().AsCString());
81 Type *func_type = m_opaque_ptr->GetType();
82 if (func_type)
83 s.Printf(", type = %s", func_type->GetName().AsCString());
84 return true;
Caroline Tice98f930f2010-09-20 05:20:02 +000085 }
Greg Claytond8c62532010-10-07 04:19:01 +000086 s.Printf ("No value");
87 return false;
Caroline Tice98f930f2010-09-20 05:20:02 +000088}
Greg Clayton5c4c7462010-10-06 03:09:58 +000089
90SBInstructionList
91SBFunction::GetInstructions (SBTarget target)
92{
93 SBInstructionList sb_instructions;
94 if (m_opaque_ptr)
95 {
96 ExecutionContext exe_ctx;
97 if (target.IsValid())
98 {
99 target->CalculateExecutionContext (exe_ctx);
100 exe_ctx.process = target->GetProcessSP().get();
101 }
102 Module *module = m_opaque_ptr->GetAddressRange().GetBaseAddress().GetModule();
103 if (module)
104 {
105 sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module->GetArchitecture(),
106 exe_ctx,
107 m_opaque_ptr->GetAddressRange()));
108 }
109 }
110 return sb_instructions;
111}
112
113