blob: c8bbdc6760f32760096d6bdbd6756d3afa94a796 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBSymbol.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/SBSymbol.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000011#include "lldb/API/SBStream.h"
Greg Clayton5c4c7462010-10-06 03:09:58 +000012#include "lldb/Core/Disassembler.h"
Caroline Tice7826c882010-10-26 03:11:13 +000013#include "lldb/Core/Log.h"
Greg Clayton5c4c7462010-10-06 03:09:58 +000014#include "lldb/Core/Module.h"
Chris Lattner24943d22010-06-08 16:52:24 +000015#include "lldb/Symbol/Symbol.h"
Greg Clayton5c4c7462010-10-06 03:09:58 +000016#include "lldb/Target/ExecutionContext.h"
17#include "lldb/Target/Target.h"
Chris Lattner24943d22010-06-08 16:52:24 +000018
19using namespace lldb;
Greg Clayton5c4c7462010-10-06 03:09:58 +000020using namespace lldb_private;
Chris Lattner24943d22010-06-08 16:52:24 +000021
22SBSymbol::SBSymbol () :
Greg Clayton63094e02010-06-23 01:19:29 +000023 m_opaque_ptr (NULL)
Chris Lattner24943d22010-06-08 16:52:24 +000024{
25}
26
27SBSymbol::SBSymbol (lldb_private::Symbol *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000028 m_opaque_ptr (lldb_object_ptr)
Chris Lattner24943d22010-06-08 16:52:24 +000029{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000030 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000031
32 if (log)
33 {
34 SBStream sstr;
35 GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +000036 log->Printf ("SBSymbol::SBSymbol (lldb_object_ptr=%p) => this.obj = %p (%s)", lldb_object_ptr, m_opaque_ptr,
37 sstr.GetData());
38
Caroline Tice7826c882010-10-26 03:11:13 +000039 }
Chris Lattner24943d22010-06-08 16:52:24 +000040}
41
42SBSymbol::~SBSymbol ()
43{
Greg Clayton63094e02010-06-23 01:19:29 +000044 m_opaque_ptr = NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000045}
46
47bool
48SBSymbol::IsValid () const
49{
Greg Clayton63094e02010-06-23 01:19:29 +000050 return m_opaque_ptr != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000051}
52
53const char *
54SBSymbol::GetName() const
55{
Caroline Tice7826c882010-10-26 03:11:13 +000056 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
57
Caroline Tice61ba7ec2010-10-26 23:49:36 +000058 //if (log)
59 // log->Printf ("SBSymbol::GetName ()");
Caroline Tice7826c882010-10-26 03:11:13 +000060
Greg Clayton63094e02010-06-23 01:19:29 +000061 if (m_opaque_ptr)
Caroline Tice7826c882010-10-26 03:11:13 +000062 {
63 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000064 log->Printf ("SBSymbol::GetName (this.obj=%p) => '%s'", m_opaque_ptr,
65 m_opaque_ptr->GetMangled().GetName().AsCString());
66
Greg Clayton63094e02010-06-23 01:19:29 +000067 return m_opaque_ptr->GetMangled().GetName().AsCString();
Caroline Tice7826c882010-10-26 03:11:13 +000068 }
69
70 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +000071 log->Printf ("SBSymbol::GetName (this.obj=%p) => NULL", m_opaque_ptr);
Caroline Tice7826c882010-10-26 03:11:13 +000072
Chris Lattner24943d22010-06-08 16:52:24 +000073 return NULL;
74}
75
76const char *
77SBSymbol::GetMangledName () const
78{
Greg Clayton63094e02010-06-23 01:19:29 +000079 if (m_opaque_ptr)
80 return m_opaque_ptr->GetMangled().GetMangledName().AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +000081 return NULL;
82}
83
84
85bool
86SBSymbol::operator == (const SBSymbol &rhs) const
87{
Greg Clayton63094e02010-06-23 01:19:29 +000088 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000089}
90
91bool
92SBSymbol::operator != (const SBSymbol &rhs) const
93{
Greg Clayton63094e02010-06-23 01:19:29 +000094 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000095}
Caroline Tice98f930f2010-09-20 05:20:02 +000096
97bool
98SBSymbol::GetDescription (SBStream &description)
99{
100 if (m_opaque_ptr)
101 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000102 description.ref();
103 m_opaque_ptr->GetDescription (description.get(),
104 lldb::eDescriptionLevelFull, NULL);
Caroline Tice98f930f2010-09-20 05:20:02 +0000105 }
106 else
107 description.Printf ("No value");
108
109 return true;
110}
Greg Clayton5c4c7462010-10-06 03:09:58 +0000111
112
113
114SBInstructionList
115SBSymbol::GetInstructions (SBTarget target)
116{
117 SBInstructionList sb_instructions;
118 if (m_opaque_ptr)
119 {
120 ExecutionContext exe_ctx;
121 if (target.IsValid())
122 target->CalculateExecutionContext (exe_ctx);
123 const AddressRange *symbol_range = m_opaque_ptr->GetAddressRangePtr();
124 if (symbol_range)
125 {
126 Module *module = symbol_range->GetBaseAddress().GetModule();
127 if (module)
128 {
129 sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module->GetArchitecture (),
130 exe_ctx,
131 *symbol_range));
132 }
133 }
134 }
135 return sb_instructions;
136}
137
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000138lldb_private::Symbol *
139SBSymbol::get ()
140{
141 return m_opaque_ptr;
142}