blob: f5b09c9506a10189e0c18e011ef967773eb91838 [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{
30}
31
32SBSymbol::~SBSymbol ()
33{
Greg Clayton63094e02010-06-23 01:19:29 +000034 m_opaque_ptr = NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000035}
36
37bool
38SBSymbol::IsValid () const
39{
Greg Clayton63094e02010-06-23 01:19:29 +000040 return m_opaque_ptr != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000041}
42
43const char *
44SBSymbol::GetName() const
45{
Greg Claytona66ba462010-10-30 04:51:46 +000046 const char *name = NULL;
Greg Clayton63094e02010-06-23 01:19:29 +000047 if (m_opaque_ptr)
Greg Claytona66ba462010-10-30 04:51:46 +000048 name = m_opaque_ptr->GetMangled().GetName().AsCString();
Caroline Tice61ba7ec2010-10-26 23:49:36 +000049
Greg Claytona66ba462010-10-30 04:51:46 +000050 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000051 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +000052 log->Printf ("SBSymbol(%p)::GetName () => \"%s\"", m_opaque_ptr, name ? name : "");
53 return name;
Chris Lattner24943d22010-06-08 16:52:24 +000054}
55
56const char *
57SBSymbol::GetMangledName () const
58{
Greg Claytona66ba462010-10-30 04:51:46 +000059 const char *name = NULL;
Greg Clayton63094e02010-06-23 01:19:29 +000060 if (m_opaque_ptr)
Greg Claytona66ba462010-10-30 04:51:46 +000061 name = m_opaque_ptr->GetMangled().GetMangledName().AsCString();
62 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
63 if (log)
64 log->Printf ("SBSymbol(%p)::GetMangledName () => \"%s\"", m_opaque_ptr, name ? name : "");
65
66 return name;
Chris Lattner24943d22010-06-08 16:52:24 +000067}
68
69
70bool
71SBSymbol::operator == (const SBSymbol &rhs) const
72{
Greg Clayton63094e02010-06-23 01:19:29 +000073 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000074}
75
76bool
77SBSymbol::operator != (const SBSymbol &rhs) const
78{
Greg Clayton63094e02010-06-23 01:19:29 +000079 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000080}
Caroline Tice98f930f2010-09-20 05:20:02 +000081
82bool
83SBSymbol::GetDescription (SBStream &description)
84{
85 if (m_opaque_ptr)
86 {
Caroline Ticee49ec182010-09-22 23:01:29 +000087 description.ref();
88 m_opaque_ptr->GetDescription (description.get(),
89 lldb::eDescriptionLevelFull, NULL);
Caroline Tice98f930f2010-09-20 05:20:02 +000090 }
91 else
92 description.Printf ("No value");
93
94 return true;
95}
Greg Clayton5c4c7462010-10-06 03:09:58 +000096
97
98
99SBInstructionList
100SBSymbol::GetInstructions (SBTarget target)
101{
102 SBInstructionList sb_instructions;
103 if (m_opaque_ptr)
104 {
105 ExecutionContext exe_ctx;
106 if (target.IsValid())
107 target->CalculateExecutionContext (exe_ctx);
108 const AddressRange *symbol_range = m_opaque_ptr->GetAddressRangePtr();
109 if (symbol_range)
110 {
111 Module *module = symbol_range->GetBaseAddress().GetModule();
112 if (module)
113 {
114 sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module->GetArchitecture (),
115 exe_ctx,
116 *symbol_range));
117 }
118 }
119 }
120 return sb_instructions;
121}
122
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000123lldb_private::Symbol *
124SBSymbol::get ()
125{
126 return m_opaque_ptr;
127}