blob: 9b82f368acd6c2abd04230f9528ce74b3345b365 [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:241//===-- 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 Ticedde9cff2010-09-20 05:20:0211#include "lldb/API/SBStream.h"
Greg Clayton1d273162010-10-06 03:09:5812#include "lldb/Core/Disassembler.h"
Caroline Ticeceb6b132010-10-26 03:11:1313#include "lldb/Core/Log.h"
Greg Clayton1d273162010-10-06 03:09:5814#include "lldb/Core/Module.h"
Chris Lattner30fdc8d2010-06-08 16:52:2415#include "lldb/Symbol/Symbol.h"
Greg Clayton1d273162010-10-06 03:09:5816#include "lldb/Target/ExecutionContext.h"
17#include "lldb/Target/Target.h"
Chris Lattner30fdc8d2010-06-08 16:52:2418
19using namespace lldb;
Greg Clayton1d273162010-10-06 03:09:5820using namespace lldb_private;
Chris Lattner30fdc8d2010-06-08 16:52:2421
22SBSymbol::SBSymbol () :
Greg Clayton66111032010-06-23 01:19:2923 m_opaque_ptr (NULL)
Chris Lattner30fdc8d2010-06-08 16:52:2424{
25}
26
27SBSymbol::SBSymbol (lldb_private::Symbol *lldb_object_ptr) :
Greg Clayton66111032010-06-23 01:19:2928 m_opaque_ptr (lldb_object_ptr)
Chris Lattner30fdc8d2010-06-08 16:52:2429{
30}
31
Greg Claytonefabb122010-11-05 23:17:0032SBSymbol::SBSymbol (const lldb::SBSymbol &rhs) :
33 m_opaque_ptr (rhs.m_opaque_ptr)
34{
35}
36
37const SBSymbol &
38SBSymbol::operator = (const SBSymbol &rhs)
39{
40 m_opaque_ptr = rhs.m_opaque_ptr;
41 return *this;
42}
43
Chris Lattner30fdc8d2010-06-08 16:52:2444SBSymbol::~SBSymbol ()
45{
Greg Clayton66111032010-06-23 01:19:2946 m_opaque_ptr = NULL;
Chris Lattner30fdc8d2010-06-08 16:52:2447}
48
Greg Claytonbbdabce2010-12-07 05:40:3149void
50SBSymbol::SetSymbol (lldb_private::Symbol *lldb_object_ptr)
51{
52 m_opaque_ptr = lldb_object_ptr;
53}
54
Chris Lattner30fdc8d2010-06-08 16:52:2455bool
56SBSymbol::IsValid () const
57{
Greg Clayton66111032010-06-23 01:19:2958 return m_opaque_ptr != NULL;
Chris Lattner30fdc8d2010-06-08 16:52:2459}
60
61const char *
62SBSymbol::GetName() const
63{
Greg Clayton48381312010-10-30 04:51:4664 const char *name = NULL;
Greg Clayton66111032010-06-23 01:19:2965 if (m_opaque_ptr)
Greg Clayton48381312010-10-30 04:51:4666 name = m_opaque_ptr->GetMangled().GetName().AsCString();
Caroline Tice750cd172010-10-26 23:49:3667
Greg Clayton2d4edfb2010-11-06 01:53:3068 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticeceb6b132010-10-26 03:11:1369 if (log)
Greg Clayton48381312010-10-30 04:51:4670 log->Printf ("SBSymbol(%p)::GetName () => \"%s\"", m_opaque_ptr, name ? name : "");
71 return name;
Chris Lattner30fdc8d2010-06-08 16:52:2472}
73
74const char *
75SBSymbol::GetMangledName () const
76{
Greg Clayton48381312010-10-30 04:51:4677 const char *name = NULL;
Greg Clayton66111032010-06-23 01:19:2978 if (m_opaque_ptr)
Greg Clayton48381312010-10-30 04:51:4679 name = m_opaque_ptr->GetMangled().GetMangledName().AsCString();
Greg Clayton2d4edfb2010-11-06 01:53:3080 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton48381312010-10-30 04:51:4681 if (log)
82 log->Printf ("SBSymbol(%p)::GetMangledName () => \"%s\"", m_opaque_ptr, name ? name : "");
83
84 return name;
Chris Lattner30fdc8d2010-06-08 16:52:2485}
86
87
88bool
89SBSymbol::operator == (const SBSymbol &rhs) const
90{
Greg Clayton66111032010-06-23 01:19:2991 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:2492}
93
94bool
95SBSymbol::operator != (const SBSymbol &rhs) const
96{
Greg Clayton66111032010-06-23 01:19:2997 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:2498}
Caroline Ticedde9cff2010-09-20 05:20:0299
100bool
101SBSymbol::GetDescription (SBStream &description)
102{
Greg Claytonda7bc7d2011-11-13 06:57:31103 Stream &strm = description.ref();
104
Caroline Ticedde9cff2010-09-20 05:20:02105 if (m_opaque_ptr)
106 {
Greg Claytonda7bc7d2011-11-13 06:57:31107 m_opaque_ptr->GetDescription (&strm,
Caroline Ticedac97f32010-09-22 23:01:29108 lldb::eDescriptionLevelFull, NULL);
Caroline Ticedde9cff2010-09-20 05:20:02109 }
110 else
Greg Claytonda7bc7d2011-11-13 06:57:31111 strm.PutCString ("No value");
Caroline Ticedde9cff2010-09-20 05:20:02112
113 return true;
114}
Greg Clayton1d273162010-10-06 03:09:58115
116
117
118SBInstructionList
119SBSymbol::GetInstructions (SBTarget target)
120{
121 SBInstructionList sb_instructions;
122 if (m_opaque_ptr)
123 {
Greg Claytonaf67cec2010-12-20 20:49:23124 Mutex::Locker api_locker;
Greg Clayton1d273162010-10-06 03:09:58125 ExecutionContext exe_ctx;
Greg Claytonb9556ac2012-01-30 07:41:31126 TargetSP target_sp (target.GetSP());
127 if (target_sp)
Greg Claytonaf67cec2010-12-20 20:49:23128 {
Greg Claytonb9556ac2012-01-30 07:41:31129 api_locker.Reset (target_sp->GetAPIMutex().GetMutex());
130 target_sp->CalculateExecutionContext (exe_ctx);
Greg Claytonaf67cec2010-12-20 20:49:23131 }
Greg Claytone7612132012-03-07 21:03:09132 if (m_opaque_ptr->ValueIsAddress())
Greg Clayton1d273162010-10-06 03:09:58133 {
Greg Claytone7612132012-03-07 21:03:09134 ModuleSP module_sp (m_opaque_ptr->GetAddress().GetModule());
Greg Claytone1cd1be2012-01-29 20:56:30135 if (module_sp)
Greg Clayton1d273162010-10-06 03:09:58136 {
Greg Claytone7612132012-03-07 21:03:09137 AddressRange symbol_range (m_opaque_ptr->GetAddress(), m_opaque_ptr->GetByteSize());
Greg Claytone1cd1be2012-01-29 20:56:30138 sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module_sp->GetArchitecture (),
Greg Clayton1080edbc2011-03-25 18:03:16139 NULL,
Greg Clayton1d273162010-10-06 03:09:58140 exe_ctx,
Greg Claytone7612132012-03-07 21:03:09141 symbol_range));
Greg Clayton1d273162010-10-06 03:09:58142 }
143 }
144 }
145 return sb_instructions;
146}
147
Caroline Tice750cd172010-10-26 23:49:36148lldb_private::Symbol *
149SBSymbol::get ()
150{
151 return m_opaque_ptr;
152}
Greg Clayton72eff182010-12-14 04:58:53153
154void
155SBSymbol::reset (lldb_private::Symbol *symbol)
156{
157 m_opaque_ptr = symbol;
158}
Greg Clayton93d00df2011-03-02 23:01:18159
160SBAddress
161SBSymbol::GetStartAddress ()
162{
163 SBAddress addr;
Greg Claytone7612132012-03-07 21:03:09164 if (m_opaque_ptr && m_opaque_ptr->ValueIsAddress())
Greg Clayton93d00df2011-03-02 23:01:18165 {
Greg Claytone7612132012-03-07 21:03:09166 addr.SetAddress (&m_opaque_ptr->GetAddress());
Greg Clayton93d00df2011-03-02 23:01:18167 }
168 return addr;
169}
170
171SBAddress
172SBSymbol::GetEndAddress ()
173{
174 SBAddress addr;
Greg Claytone7612132012-03-07 21:03:09175 if (m_opaque_ptr && m_opaque_ptr->ValueIsAddress())
Greg Clayton93d00df2011-03-02 23:01:18176 {
Greg Claytone7612132012-03-07 21:03:09177 lldb::addr_t range_size = m_opaque_ptr->GetByteSize();
178 if (range_size > 0)
Greg Clayton93d00df2011-03-02 23:01:18179 {
Greg Claytone7612132012-03-07 21:03:09180 addr.SetAddress (&m_opaque_ptr->GetAddress());
181 addr->Slide (m_opaque_ptr->GetByteSize());
Greg Clayton93d00df2011-03-02 23:01:18182 }
183 }
184 return addr;
185}
186
187uint32_t
188SBSymbol::GetPrologueByteSize ()
189{
190 if (m_opaque_ptr)
191 return m_opaque_ptr->GetPrologueByteSize();
192 return 0;
193}
Greg Clayton05d2b7f2011-03-31 01:08:07194
195SymbolType
196SBSymbol::GetType ()
197{
198 if (m_opaque_ptr)
199 return m_opaque_ptr->GetType();
200 return eSymbolTypeInvalid;
201}
Greg Clayton74ae3f52012-04-02 20:08:08202
203bool
204SBSymbol::IsExternal()
205{
206 if (m_opaque_ptr)
207 return m_opaque_ptr->IsExternal();
208 return false;
209}
210
211bool
212SBSymbol::IsSynthetic()
213{
214 if (m_opaque_ptr)
215 return m_opaque_ptr->IsSynthetic();
216 return false;
217}
218