blob: f0b03cf5401316149e9b80802116ad60d2e7902c [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- SymbolVendor.mm -----------------------------------------*- 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/Symbol/SymbolVendor.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "lldb/Core/Module.h"
17#include "lldb/Core/PluginManager.h"
Greg Clayton1f746072012-08-29 21:13:06 +000018#include "lldb/Core/Stream.h"
19#include "lldb/Symbol/CompileUnit.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000020#include "lldb/Symbol/ObjectFile.h"
21#include "lldb/Symbol/SymbolFile.h"
22
23using namespace lldb;
24using namespace lldb_private;
25
26
27//----------------------------------------------------------------------
28// FindPlugin
29//
30// Platforms can register a callback to use when creating symbol
31// vendors to allow for complex debug information file setups, and to
32// also allow for finding separate debug information files.
33//----------------------------------------------------------------------
34SymbolVendor*
Greg Clayton136dff82012-12-14 02:15:00 +000035SymbolVendor::FindPlugin (const lldb::ModuleSP &module_sp, lldb_private::Stream *feedback_strm)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000036{
Greg Clayton7b0992d2013-04-18 22:45:39 +000037 std::unique_ptr<SymbolVendor> instance_ap;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000038 SymbolVendorCreateInstance create_callback;
Michael Sartaina7499c92013-07-01 19:45:50 +000039
Ed Masted4612ad2014-04-20 13:17:36 +000040 for (size_t idx = 0; (create_callback = PluginManager::GetSymbolVendorCreateCallbackAtIndex(idx)) != nullptr; ++idx)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000041 {
Greg Clayton136dff82012-12-14 02:15:00 +000042 instance_ap.reset(create_callback(module_sp, feedback_strm));
Chris Lattner30fdc8d2010-06-08 16:52:24 +000043
44 if (instance_ap.get())
45 {
Chris Lattner30fdc8d2010-06-08 16:52:24 +000046 return instance_ap.release();
47 }
48 }
49 // The default implementation just tries to create debug information using the
50 // file representation for the module.
Greg Claytone72dfb32012-02-24 01:59:29 +000051 instance_ap.reset(new SymbolVendor(module_sp));
Chris Lattner30fdc8d2010-06-08 16:52:24 +000052 if (instance_ap.get())
Greg Clayton762f7132011-09-18 18:59:15 +000053 {
Greg Claytone72dfb32012-02-24 01:59:29 +000054 ObjectFile *objfile = module_sp->GetObjectFile();
Greg Clayton762f7132011-09-18 18:59:15 +000055 if (objfile)
Greg Claytone1cd1be2012-01-29 20:56:30 +000056 instance_ap->AddSymbolFileRepresentation(objfile->shared_from_this());
Greg Clayton762f7132011-09-18 18:59:15 +000057 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +000058 return instance_ap.release();
59}
60
61//----------------------------------------------------------------------
62// SymbolVendor constructor
63//----------------------------------------------------------------------
Greg Claytone72dfb32012-02-24 01:59:29 +000064SymbolVendor::SymbolVendor(const lldb::ModuleSP &module_sp) :
65 ModuleChild (module_sp),
Chris Lattner30fdc8d2010-06-08 16:52:24 +000066 m_type_list(),
67 m_compile_units(),
68 m_sym_file_ap()
69{
Chris Lattner30fdc8d2010-06-08 16:52:24 +000070}
71
72//----------------------------------------------------------------------
73// Destructor
74//----------------------------------------------------------------------
75SymbolVendor::~SymbolVendor()
76{
77}
78
79//----------------------------------------------------------------------
Bruce Mitchenere171da52015-07-22 00:16:02 +000080// Add a representation given an object file.
Chris Lattner30fdc8d2010-06-08 16:52:24 +000081//----------------------------------------------------------------------
82void
Jim Ingham7d1c1152011-12-06 01:07:22 +000083SymbolVendor::AddSymbolFileRepresentation(const ObjectFileSP &objfile_sp)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000084{
Greg Claytona1743492012-03-13 23:14:29 +000085 ModuleSP module_sp(GetModule());
86 if (module_sp)
Greg Clayton762f7132011-09-18 18:59:15 +000087 {
Greg Claytona1743492012-03-13 23:14:29 +000088 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
89 if (objfile_sp)
90 {
91 m_objfile_sp = objfile_sp;
92 m_sym_file_ap.reset(SymbolFile::FindPlugin(objfile_sp.get()));
93 }
Greg Clayton762f7132011-09-18 18:59:15 +000094 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +000095}
96
97bool
Greg Claytonc7bece562013-01-25 18:06:21 +000098SymbolVendor::SetCompileUnitAtIndex (size_t idx, const CompUnitSP &cu_sp)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000099{
Greg Claytona1743492012-03-13 23:14:29 +0000100 ModuleSP module_sp(GetModule());
101 if (module_sp)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000102 {
Greg Claytona1743492012-03-13 23:14:29 +0000103 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
Greg Claytonc7bece562013-01-25 18:06:21 +0000104 const size_t num_compile_units = GetNumCompileUnits();
Greg Claytona1743492012-03-13 23:14:29 +0000105 if (idx < num_compile_units)
106 {
107 // Fire off an assertion if this compile unit already exists for now.
108 // The partial parsing should take care of only setting the compile
109 // unit once, so if this assertion fails, we need to make sure that
110 // we don't have a race condition, or have a second parse of the same
111 // compile unit.
Ed Masted4612ad2014-04-20 13:17:36 +0000112 assert(m_compile_units[idx].get() == nullptr);
Greg Clayton53eb1c22012-04-02 22:59:12 +0000113 m_compile_units[idx] = cu_sp;
Greg Claytona1743492012-03-13 23:14:29 +0000114 return true;
115 }
Greg Clayton53eb1c22012-04-02 22:59:12 +0000116 else
117 {
118 // This should NOT happen, and if it does, we want to crash and know
119 // about it
120 assert (idx < num_compile_units);
121 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000122 }
123 return false;
124}
125
Greg Claytonc7bece562013-01-25 18:06:21 +0000126size_t
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000127SymbolVendor::GetNumCompileUnits()
128{
Greg Claytona1743492012-03-13 23:14:29 +0000129 ModuleSP module_sp(GetModule());
130 if (module_sp)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000131 {
Greg Claytona1743492012-03-13 23:14:29 +0000132 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
133 if (m_compile_units.empty())
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000134 {
Greg Claytona1743492012-03-13 23:14:29 +0000135 if (m_sym_file_ap.get())
136 {
137 // Resize our array of compile unit shared pointers -- which will
138 // each remain NULL until someone asks for the actual compile unit
139 // information. When this happens, the symbol file will be asked
140 // to parse this compile unit information.
141 m_compile_units.resize(m_sym_file_ap->GetNumCompileUnits());
142 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000143 }
144 }
145 return m_compile_units.size();
146}
147
Greg Clayton1f746072012-08-29 21:13:06 +0000148lldb::LanguageType
149SymbolVendor::ParseCompileUnitLanguage (const SymbolContext& sc)
150{
151 ModuleSP module_sp(GetModule());
152 if (module_sp)
153 {
154 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
155 if (m_sym_file_ap.get())
156 return m_sym_file_ap->ParseCompileUnitLanguage(sc);
157 }
158 return eLanguageTypeUnknown;
159}
160
161
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000162size_t
163SymbolVendor::ParseCompileUnitFunctions (const SymbolContext &sc)
164{
Greg Claytona1743492012-03-13 23:14:29 +0000165 ModuleSP module_sp(GetModule());
166 if (module_sp)
167 {
168 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
169 if (m_sym_file_ap.get())
170 return m_sym_file_ap->ParseCompileUnitFunctions(sc);
171 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000172 return 0;
173}
174
175bool
176SymbolVendor::ParseCompileUnitLineTable (const SymbolContext &sc)
177{
Greg Claytona1743492012-03-13 23:14:29 +0000178 ModuleSP module_sp(GetModule());
179 if (module_sp)
180 {
181 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
182 if (m_sym_file_ap.get())
183 return m_sym_file_ap->ParseCompileUnitLineTable(sc);
184 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000185 return false;
186}
187
188bool
189SymbolVendor::ParseCompileUnitSupportFiles (const SymbolContext& sc, FileSpecList& support_files)
190{
Greg Claytona1743492012-03-13 23:14:29 +0000191 ModuleSP module_sp(GetModule());
192 if (module_sp)
193 {
194 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
195 if (m_sym_file_ap.get())
196 return m_sym_file_ap->ParseCompileUnitSupportFiles(sc, support_files);
197 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000198 return false;
199}
200
Sean Callananf0c5aeb2015-04-20 16:31:29 +0000201bool
202SymbolVendor::ParseImportedModules (const SymbolContext &sc,
203 std::vector<ConstString> &imported_modules)
204{
205 ModuleSP module_sp(GetModule());
206 if (module_sp)
207 {
208 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
209 if (m_sym_file_ap.get())
210 return m_sym_file_ap->ParseImportedModules(sc, imported_modules);
211 }
212 return false;
213
214}
215
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000216size_t
217SymbolVendor::ParseFunctionBlocks (const SymbolContext &sc)
218{
Greg Claytona1743492012-03-13 23:14:29 +0000219 ModuleSP module_sp(GetModule());
220 if (module_sp)
221 {
222 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
223 if (m_sym_file_ap.get())
224 return m_sym_file_ap->ParseFunctionBlocks(sc);
225 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000226 return 0;
227}
228
229size_t
230SymbolVendor::ParseTypes (const SymbolContext &sc)
231{
Greg Claytona1743492012-03-13 23:14:29 +0000232 ModuleSP module_sp(GetModule());
233 if (module_sp)
234 {
235 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
236 if (m_sym_file_ap.get())
237 return m_sym_file_ap->ParseTypes(sc);
238 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000239 return 0;
240}
241
242size_t
243SymbolVendor::ParseVariablesForContext (const SymbolContext& sc)
244{
Greg Claytona1743492012-03-13 23:14:29 +0000245 ModuleSP module_sp(GetModule());
246 if (module_sp)
247 {
248 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
249 if (m_sym_file_ap.get())
250 return m_sym_file_ap->ParseVariablesForContext(sc);
251 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000252 return 0;
253}
254
255Type*
256SymbolVendor::ResolveTypeUID(lldb::user_id_t type_uid)
257{
Greg Claytona1743492012-03-13 23:14:29 +0000258 ModuleSP module_sp(GetModule());
259 if (module_sp)
260 {
261 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
262 if (m_sym_file_ap.get())
263 return m_sym_file_ap->ResolveTypeUID(type_uid);
264 }
Ed Masted4612ad2014-04-20 13:17:36 +0000265 return nullptr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000266}
267
268
269uint32_t
270SymbolVendor::ResolveSymbolContext (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc)
271{
Greg Claytona1743492012-03-13 23:14:29 +0000272 ModuleSP module_sp(GetModule());
273 if (module_sp)
274 {
275 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
276 if (m_sym_file_ap.get())
277 return m_sym_file_ap->ResolveSymbolContext(so_addr, resolve_scope, sc);
278 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000279 return 0;
280}
281
282uint32_t
283SymbolVendor::ResolveSymbolContext (const FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list)
284{
Greg Claytona1743492012-03-13 23:14:29 +0000285 ModuleSP module_sp(GetModule());
286 if (module_sp)
287 {
288 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
289 if (m_sym_file_ap.get())
290 return m_sym_file_ap->ResolveSymbolContext(file_spec, line, check_inlines, resolve_scope, sc_list);
291 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000292 return 0;
293}
294
Greg Claytonc7bece562013-01-25 18:06:21 +0000295size_t
Greg Clayton99558cc42015-08-24 23:46:31 +0000296SymbolVendor::FindGlobalVariables (const ConstString &name, const CompilerDeclContext *parent_decl_ctx, bool append, size_t max_matches, VariableList& variables)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000297{
Greg Claytona1743492012-03-13 23:14:29 +0000298 ModuleSP module_sp(GetModule());
299 if (module_sp)
300 {
301 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
302 if (m_sym_file_ap.get())
Greg Clayton99558cc42015-08-24 23:46:31 +0000303 return m_sym_file_ap->FindGlobalVariables(name, parent_decl_ctx, append, max_matches, variables);
Greg Claytona1743492012-03-13 23:14:29 +0000304 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000305 return 0;
306}
307
Greg Claytonc7bece562013-01-25 18:06:21 +0000308size_t
309SymbolVendor::FindGlobalVariables (const RegularExpression& regex, bool append, size_t max_matches, VariableList& variables)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000310{
Greg Claytona1743492012-03-13 23:14:29 +0000311 ModuleSP module_sp(GetModule());
312 if (module_sp)
313 {
314 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
315 if (m_sym_file_ap.get())
316 return m_sym_file_ap->FindGlobalVariables(regex, append, max_matches, variables);
317 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000318 return 0;
319}
320
Greg Claytonc7bece562013-01-25 18:06:21 +0000321size_t
Greg Clayton99558cc42015-08-24 23:46:31 +0000322SymbolVendor::FindFunctions(const ConstString &name, const CompilerDeclContext *parent_decl_ctx, uint32_t name_type_mask, bool include_inlines, bool append, SymbolContextList& sc_list)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000323{
Greg Claytona1743492012-03-13 23:14:29 +0000324 ModuleSP module_sp(GetModule());
325 if (module_sp)
326 {
327 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
328 if (m_sym_file_ap.get())
Greg Clayton99558cc42015-08-24 23:46:31 +0000329 return m_sym_file_ap->FindFunctions(name, parent_decl_ctx, name_type_mask, include_inlines, append, sc_list);
Greg Claytona1743492012-03-13 23:14:29 +0000330 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000331 return 0;
332}
333
Greg Claytonc7bece562013-01-25 18:06:21 +0000334size_t
Sean Callanan9df05fb2012-02-10 22:52:19 +0000335SymbolVendor::FindFunctions(const RegularExpression& regex, bool include_inlines, bool append, SymbolContextList& sc_list)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000336{
Greg Claytona1743492012-03-13 23:14:29 +0000337 ModuleSP module_sp(GetModule());
338 if (module_sp)
339 {
340 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
341 if (m_sym_file_ap.get())
342 return m_sym_file_ap->FindFunctions(regex, include_inlines, append, sc_list);
343 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000344 return 0;
345}
346
347
Greg Claytonc7bece562013-01-25 18:06:21 +0000348size_t
Greg Clayton99558cc42015-08-24 23:46:31 +0000349SymbolVendor::FindTypes (const SymbolContext& sc, const ConstString &name, const CompilerDeclContext *parent_decl_ctx, bool append, size_t max_matches, TypeList& types)
Greg Claytonb0b9fe62010-08-03 00:35:52 +0000350{
Greg Claytona1743492012-03-13 23:14:29 +0000351 ModuleSP module_sp(GetModule());
352 if (module_sp)
353 {
354 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
355 if (m_sym_file_ap.get())
Greg Clayton99558cc42015-08-24 23:46:31 +0000356 return m_sym_file_ap->FindTypes(sc, name, parent_decl_ctx, append, max_matches, types);
Greg Claytona1743492012-03-13 23:14:29 +0000357 }
Greg Claytonb0b9fe62010-08-03 00:35:52 +0000358 if (!append)
359 types.Clear();
360 return 0;
361}
Greg Clayton526e5af2010-11-13 03:52:47 +0000362
Greg Claytonf02500c2013-06-18 22:51:05 +0000363size_t
364SymbolVendor::GetTypes (SymbolContextScope *sc_scope,
365 uint32_t type_mask,
366 lldb_private::TypeList &type_list)
367{
368 ModuleSP module_sp(GetModule());
369 if (module_sp)
370 {
371 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
372 if (m_sym_file_ap.get())
373 return m_sym_file_ap->GetTypes (sc_scope, type_mask, type_list);
374 }
375 return 0;
376}
377
Greg Clayton99558cc42015-08-24 23:46:31 +0000378CompilerDeclContext
379SymbolVendor::FindNamespace(const SymbolContext& sc, const ConstString &name, const CompilerDeclContext *parent_decl_ctx)
Greg Clayton526e5af2010-11-13 03:52:47 +0000380{
Greg Clayton99558cc42015-08-24 23:46:31 +0000381 CompilerDeclContext namespace_decl_ctx;
Greg Claytona1743492012-03-13 23:14:29 +0000382 ModuleSP module_sp(GetModule());
383 if (module_sp)
384 {
385 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
386 if (m_sym_file_ap.get())
Greg Clayton99558cc42015-08-24 23:46:31 +0000387 namespace_decl_ctx = m_sym_file_ap->FindNamespace (sc, name, parent_decl_ctx);
Greg Claytona1743492012-03-13 23:14:29 +0000388 }
Greg Clayton99558cc42015-08-24 23:46:31 +0000389 return namespace_decl_ctx;
Greg Clayton526e5af2010-11-13 03:52:47 +0000390}
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000391
392void
393SymbolVendor::Dump(Stream *s)
394{
Greg Claytona1743492012-03-13 23:14:29 +0000395 ModuleSP module_sp(GetModule());
396 if (module_sp)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000397 {
Greg Clayton50bd5a22015-04-14 22:34:00 +0000398 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
399
Greg Claytona1743492012-03-13 23:14:29 +0000400 bool show_context = false;
401
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000402 s->Printf("%p: ", static_cast<void*>(this));
Greg Claytona1743492012-03-13 23:14:29 +0000403 s->Indent();
404 s->PutCString("SymbolVendor");
405 if (m_sym_file_ap.get())
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000406 {
Greg Claytona1743492012-03-13 23:14:29 +0000407 ObjectFile *objfile = m_sym_file_ap->GetObjectFile();
408 if (objfile)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000409 {
Greg Claytona1743492012-03-13 23:14:29 +0000410 const FileSpec &objfile_file_spec = objfile->GetFileSpec();
411 if (objfile_file_spec)
412 {
413 s->PutCString(" (");
414 objfile_file_spec.Dump(s);
415 s->PutChar(')');
416 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000417 }
418 }
Greg Claytona1743492012-03-13 23:14:29 +0000419 s->EOL();
420 s->IndentMore();
421 m_type_list.Dump(s, show_context);
422
423 CompileUnitConstIter cu_pos, cu_end;
424 cu_end = m_compile_units.end();
425 for (cu_pos = m_compile_units.begin(); cu_pos != cu_end; ++cu_pos)
426 {
427 // We currently only dump the compile units that have been parsed
428 if (cu_pos->get())
429 (*cu_pos)->Dump(s, show_context);
430 }
431
432 s->IndentLess();
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000433 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000434}
435
436CompUnitSP
Greg Claytonc7bece562013-01-25 18:06:21 +0000437SymbolVendor::GetCompileUnitAtIndex(size_t idx)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000438{
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000439 CompUnitSP cu_sp;
Greg Claytona1743492012-03-13 23:14:29 +0000440 ModuleSP module_sp(GetModule());
441 if (module_sp)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000442 {
Greg Clayton50bd5a22015-04-14 22:34:00 +0000443 lldb_private::Mutex::Locker locker(module_sp->GetMutex());
Greg Claytonc7bece562013-01-25 18:06:21 +0000444 const size_t num_compile_units = GetNumCompileUnits();
Greg Claytona1743492012-03-13 23:14:29 +0000445 if (idx < num_compile_units)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000446 {
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000447 cu_sp = m_compile_units[idx];
Ed Masted4612ad2014-04-20 13:17:36 +0000448 if (cu_sp.get() == nullptr)
Greg Claytona1743492012-03-13 23:14:29 +0000449 {
450 m_compile_units[idx] = m_sym_file_ap->ParseCompileUnitAtIndex(idx);
451 cu_sp = m_compile_units[idx];
452 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000453 }
454 }
455 return cu_sp;
456}
457
Ilia Ke912e3e2015-03-10 21:18:59 +0000458FileSpec
459SymbolVendor::GetMainFileSpec() const
460{
461 if (m_sym_file_ap.get())
462 {
463 const ObjectFile *symfile_objfile = m_sym_file_ap->GetObjectFile();
464 if (symfile_objfile)
465 return symfile_objfile->GetFileSpec();
466 }
467
468 return FileSpec();
469}
470
Michael Sartaina7499c92013-07-01 19:45:50 +0000471Symtab *
472SymbolVendor::GetSymtab ()
473{
474 ModuleSP module_sp(GetModule());
475 if (module_sp)
476 {
477 ObjectFile *objfile = module_sp->GetObjectFile();
478 if (objfile)
479 {
480 // Get symbol table from unified section list.
Greg Clayton3046e662013-07-10 01:23:25 +0000481 return objfile->GetSymtab ();
Michael Sartaina7499c92013-07-01 19:45:50 +0000482 }
483 }
Ed Masted4612ad2014-04-20 13:17:36 +0000484 return nullptr;
Michael Sartaina7499c92013-07-01 19:45:50 +0000485}
486
487void
488SymbolVendor::ClearSymtab()
489{
490 ModuleSP module_sp(GetModule());
491 if (module_sp)
492 {
493 ObjectFile *objfile = module_sp->GetObjectFile();
494 if (objfile)
495 {
496 // Clear symbol table from unified section list.
Greg Clayton3046e662013-07-10 01:23:25 +0000497 objfile->ClearSymtab ();
Michael Sartaina7499c92013-07-01 19:45:50 +0000498 }
499 }
500}
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000501
Jason Molenda05a09c62014-08-22 02:46:46 +0000502void
503SymbolVendor::SectionFileAddressesChanged ()
504{
505 ModuleSP module_sp(GetModule());
506 if (module_sp)
507 {
508 ObjectFile *module_objfile = module_sp->GetObjectFile ();
509 if (m_sym_file_ap.get())
510 {
511 ObjectFile *symfile_objfile = m_sym_file_ap->GetObjectFile ();
512 if (symfile_objfile != module_objfile)
513 symfile_objfile->SectionFileAddressesChanged ();
514 }
515 Symtab *symtab = GetSymtab ();
516 if (symtab)
517 {
518 symtab->SectionFileAddressesChanged ();
519 }
520 }
521}
522
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000523//------------------------------------------------------------------
524// PluginInterface protocol
525//------------------------------------------------------------------
Greg Clayton57abc5d2013-05-10 21:47:16 +0000526lldb_private::ConstString
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000527SymbolVendor::GetPluginName()
528{
Greg Clayton57abc5d2013-05-10 21:47:16 +0000529 static ConstString g_name("vendor-default");
530 return g_name;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000531}
532
533uint32_t
534SymbolVendor::GetPluginVersion()
535{
536 return 1;
537}
538