124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SymbolVendor.mm -----------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolVendor.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Module.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/PluginManager.h"
1849ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Core/Stream.h"
1949ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Symbol/CompileUnit.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectFile.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h"
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// FindPlugin
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Platforms can register a callback to use when creating symbol
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// vendors to allow for complex debug information file setups, and to
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// also allow for finding separate debug information files.
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor*
35188091899842b140313b54e097f16efbe165c998Greg ClaytonSymbolVendor::FindPlugin (const lldb::ModuleSP &module_sp, lldb_private::Stream *feedback_strm)
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
37102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<SymbolVendor> instance_ap;
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolVendorCreateInstance create_callback;
39a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain
4036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    for (size_t idx = 0; (create_callback = PluginManager::GetSymbolVendorCreateCallbackAtIndex(idx)) != NULL; ++idx)
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
42188091899842b140313b54e097f16efbe165c998Greg Clayton        instance_ap.reset(create_callback(module_sp, feedback_strm));
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (instance_ap.get())
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            return instance_ap.release();
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // The default implementation just tries to create debug information using the
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // file representation for the module.
513508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    instance_ap.reset(new SymbolVendor(module_sp));
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (instance_ap.get())
53e40b6424d9e49306392bec4b44060da36414c382Greg Clayton    {
543508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton        ObjectFile *objfile = module_sp->GetObjectFile();
55e40b6424d9e49306392bec4b44060da36414c382Greg Clayton        if (objfile)
5613d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton            instance_ap->AddSymbolFileRepresentation(objfile->shared_from_this());
57e40b6424d9e49306392bec4b44060da36414c382Greg Clayton    }
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return instance_ap.release();
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// SymbolVendor constructor
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
643508c387c3f0c9ecc439d98048fd7694d41bab1bGreg ClaytonSymbolVendor::SymbolVendor(const lldb::ModuleSP &module_sp) :
653508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    ModuleChild (module_sp),
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_list(),
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_compile_units(),
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_sym_file_ap()
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::~SymbolVendor()
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
80a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain// Add a represention given an object file.
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
8331ad9cc8eab4d183ebfc5a0ef0bb952cacb1bc50Jim InghamSymbolVendor::AddSymbolFileRepresentation(const ObjectFileSP &objfile_sp)
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
859482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
869482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
87e40b6424d9e49306392bec4b44060da36414c382Greg Clayton    {
889482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
899482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (objfile_sp)
909482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        {
919482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            m_objfile_sp = objfile_sp;
929482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            m_sym_file_ap.reset(SymbolFile::FindPlugin(objfile_sp.get()));
939482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        }
94e40b6424d9e49306392bec4b44060da36414c382Greg Clayton    }
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
9836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSymbolVendor::SetCompileUnitAtIndex (size_t idx, const CompUnitSP &cu_sp)
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1009482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
1019482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
1039482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
10436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        const size_t num_compile_units = GetNumCompileUnits();
1059482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (idx < num_compile_units)
1069482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        {
1079482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            // Fire off an assertion if this compile unit already exists for now.
1089482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            // The partial parsing should take care of only setting the compile
1099482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            // unit once, so if this assertion fails, we need to make sure that
1109482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            // we don't have a race condition, or have a second parse of the same
1119482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            // compile unit.
1129482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            assert(m_compile_units[idx].get() == NULL);
1130be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton            m_compile_units[idx] = cu_sp;
1149482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return true;
1159482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        }
1160be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton        else
1170be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton        {
1180be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton            // This should NOT happen, and if it does, we want to crash and know
1190be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton            // about it
1200be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton            assert (idx < num_compile_units);
1210be1edd34ff46e017b1b973c5a57e3de9f613bafGreg Clayton        }
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return false;
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::GetNumCompileUnits()
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1299482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
1309482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
1329482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
1339482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_compile_units.empty())
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
1359482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            if (m_sym_file_ap.get())
1369482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            {
1379482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                // Resize our array of compile unit shared pointers -- which will
1389482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                // each remain NULL until someone asks for the actual compile unit
1399482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                // information. When this happens, the symbol file will be asked
1409482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                // to parse this compile unit information.
1419482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                m_compile_units.resize(m_sym_file_ap->GetNumCompileUnits());
1429482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            }
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return m_compile_units.size();
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14849ce8969d3154e1560106cfe530444c09410f217Greg Claytonlldb::LanguageType
14949ce8969d3154e1560106cfe530444c09410f217Greg ClaytonSymbolVendor::ParseCompileUnitLanguage (const SymbolContext& sc)
15049ce8969d3154e1560106cfe530444c09410f217Greg Clayton{
15149ce8969d3154e1560106cfe530444c09410f217Greg Clayton    ModuleSP module_sp(GetModule());
15249ce8969d3154e1560106cfe530444c09410f217Greg Clayton    if (module_sp)
15349ce8969d3154e1560106cfe530444c09410f217Greg Clayton    {
15449ce8969d3154e1560106cfe530444c09410f217Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
15549ce8969d3154e1560106cfe530444c09410f217Greg Clayton        if (m_sym_file_ap.get())
15649ce8969d3154e1560106cfe530444c09410f217Greg Clayton            return m_sym_file_ap->ParseCompileUnitLanguage(sc);
15749ce8969d3154e1560106cfe530444c09410f217Greg Clayton    }
15849ce8969d3154e1560106cfe530444c09410f217Greg Clayton    return eLanguageTypeUnknown;
15949ce8969d3154e1560106cfe530444c09410f217Greg Clayton}
16049ce8969d3154e1560106cfe530444c09410f217Greg Clayton
16149ce8969d3154e1560106cfe530444c09410f217Greg Clayton
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ParseCompileUnitFunctions (const SymbolContext &sc)
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1659482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
1669482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
1679482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
1689482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
1699482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
1709482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ParseCompileUnitFunctions(sc);
1719482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ParseCompileUnitLineTable (const SymbolContext &sc)
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1789482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
1799482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
1809482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
1819482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
1829482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
1839482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ParseCompileUnitLineTable(sc);
1849482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return false;
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ParseCompileUnitSupportFiles (const SymbolContext& sc, FileSpecList& support_files)
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1919482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
1929482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
1939482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
1949482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
1959482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
1969482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ParseCompileUnitSupportFiles(sc, support_files);
1979482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return false;
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ParseFunctionBlocks (const SymbolContext &sc)
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2049482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2059482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2069482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2079482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
2089482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
2099482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ParseFunctionBlocks(sc);
2109482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ParseTypes (const SymbolContext &sc)
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2179482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2189482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2199482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2209482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
2219482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
2229482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ParseTypes(sc);
2239482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ParseVariablesForContext (const SymbolContext& sc)
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2309482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2319482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2329482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2339482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
2349482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
2359482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ParseVariablesForContext(sc);
2369482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerType*
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ResolveTypeUID(lldb::user_id_t type_uid)
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2439482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2449482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2459482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2469482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
2479482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
2489482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ResolveTypeUID(type_uid);
2499482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return NULL;
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ResolveSymbolContext (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc)
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2579482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2589482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2599482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2609482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
2619482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
2629482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ResolveSymbolContext(so_addr, resolve_scope, sc);
2639482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::ResolveSymbolContext (const FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list)
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2709482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2719482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2729482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2739482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
2749482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
2759482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->ResolveSymbolContext(file_spec, line, check_inlines, resolve_scope, sc_list);
2769482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t
28136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSymbolVendor::FindGlobalVariables (const ConstString &name, const ClangNamespaceDecl *namespace_decl, bool append, size_t max_matches, VariableList& variables)
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2839482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2849482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2859482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2869482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
2879482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
2889482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->FindGlobalVariables(name, namespace_decl, append, max_matches, variables);
2899482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t
29436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSymbolVendor::FindGlobalVariables (const RegularExpression& regex, bool append, size_t max_matches, VariableList& variables)
29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2969482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
2979482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
2989482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
2999482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
3009482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
3019482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->FindGlobalVariables(regex, append, max_matches, variables);
3029482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t
307302d78c71902398ce1f422bd09216dd53a6abb88Sean CallananSymbolVendor::FindFunctions(const ConstString &name, const ClangNamespaceDecl *namespace_decl, uint32_t name_type_mask, bool include_inlines, bool append, SymbolContextList& sc_list)
30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3099482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
3109482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
3119482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
3129482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
3139482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
3149482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->FindFunctions(name, namespace_decl, name_type_mask, include_inlines, append, sc_list);
3159482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
31936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t
320302d78c71902398ce1f422bd09216dd53a6abb88Sean CallananSymbolVendor::FindFunctions(const RegularExpression& regex, bool include_inlines, bool append, SymbolContextList& sc_list)
32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3229482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
3239482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
3249482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
3259482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
3269482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
3279482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->FindFunctions(regex, include_inlines, append, sc_list);
3289482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t
33436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSymbolVendor::FindTypes (const SymbolContext& sc, const ConstString &name, const ClangNamespaceDecl *namespace_decl, bool append, size_t max_matches, TypeList& types)
335960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton{
3369482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
3379482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
3389482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
3399482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
3409482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
3419482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            return m_sym_file_ap->FindTypes(sc, name, namespace_decl, append, max_matches, types);
3429482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
343960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    if (!append)
344960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton        types.Clear();
345960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    return 0;
346960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton}
3476916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton
348a8b56238ce138e70433a0ce0b4218c9257beae38Greg Claytonsize_t
349a8b56238ce138e70433a0ce0b4218c9257beae38Greg ClaytonSymbolVendor::GetTypes (SymbolContextScope *sc_scope,
350a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton                        uint32_t type_mask,
351a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton                        lldb_private::TypeList &type_list)
352a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton{
353a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    ModuleSP module_sp(GetModule());
354a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    if (module_sp)
355a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    {
356a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
357a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton        if (m_sym_file_ap.get())
358a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton            return m_sym_file_ap->GetTypes (sc_scope, type_mask, type_list);
359a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    }
360a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    return 0;
361a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton}
362a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton
3636916e358c9725b75ed91f31236c147f26c9af10eGreg ClaytonClangNamespaceDecl
3640fcec13c6639ab49216fa9447b25888b7bc9ff59Sean CallananSymbolVendor::FindNamespace(const SymbolContext& sc, const ConstString &name, const ClangNamespaceDecl *parent_namespace_decl)
3656916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton{
3666916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    ClangNamespaceDecl namespace_decl;
3679482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
3689482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
3699482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    {
3709482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
3719482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
3729482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            namespace_decl = m_sym_file_ap->FindNamespace (sc, name, parent_namespace_decl);
3739482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
3746916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    return namespace_decl;
3756916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton}
37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::Dump(Stream *s)
37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3809482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
3819482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3839482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        bool show_context = false;
3849482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton
3859482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        s->Printf("%p: ", this);
3869482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        s->Indent();
3879482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        s->PutCString("SymbolVendor");
3889482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (m_sym_file_ap.get())
38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
3909482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            ObjectFile *objfile = m_sym_file_ap->GetObjectFile();
3919482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            if (objfile)
39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
3939482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                const FileSpec &objfile_file_spec = objfile->GetFileSpec();
3949482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                if (objfile_file_spec)
3959482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                {
3969482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                    s->PutCString(" (");
3979482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                    objfile_file_spec.Dump(s);
3989482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                    s->PutChar(')');
3999482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                }
40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
4029482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        s->EOL();
4039482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        s->IndentMore();
4049482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        m_type_list.Dump(s, show_context);
40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4069482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        CompileUnitConstIter cu_pos, cu_end;
4079482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        cu_end = m_compile_units.end();
4089482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        for (cu_pos = m_compile_units.begin(); cu_pos != cu_end; ++cu_pos)
4099482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        {
4109482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            // We currently only dump the compile units that have been parsed
4119482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            if (cu_pos->get())
4129482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                (*cu_pos)->Dump(s, show_context);
4139482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        }
41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4159482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        s->IndentLess();
4169482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    }
41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerCompUnitSP
42036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSymbolVendor::GetCompileUnitAtIndex(size_t idx)
42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CompUnitSP cu_sp;
4239482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    ModuleSP module_sp(GetModule());
4249482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton    if (module_sp)
42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
42636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        const size_t num_compile_units = GetNumCompileUnits();
4279482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton        if (idx < num_compile_units)
42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            cu_sp = m_compile_units[idx];
4309482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            if (cu_sp.get() == NULL)
4319482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            {
4329482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                m_compile_units[idx] = m_sym_file_ap->ParseCompileUnitAtIndex(idx);
4339482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton                cu_sp = m_compile_units[idx];
4349482f05e109d617061c1ade6d9672dfcb8427547Greg Clayton            }
43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return cu_sp;
43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
440a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael SartainSymtab *
441a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael SartainSymbolVendor::GetSymtab ()
442a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain{
443a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    ModuleSP module_sp(GetModule());
444a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    if (module_sp)
445a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    {
446a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        ObjectFile *objfile = module_sp->GetObjectFile();
447a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        if (objfile)
448a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        {
449a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain            // Get symbol table from unified section list.
4507940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton            return objfile->GetSymtab ();
451a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        }
452a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    }
453a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    return NULL;
454a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain}
455a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain
456a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartainvoid
457a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael SartainSymbolVendor::ClearSymtab()
458a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain{
459a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    ModuleSP module_sp(GetModule());
460a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    if (module_sp)
461a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    {
462a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        ObjectFile *objfile = module_sp->GetObjectFile();
463a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        if (objfile)
464a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        {
465a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain            // Clear symbol table from unified section list.
4667940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton            objfile->ClearSymtab ();
467a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain        }
468a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain    }
469a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain}
47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------
47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// PluginInterface protocol
47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------
4740e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Claytonlldb_private::ConstString
47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::GetPluginName()
47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4770e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    static ConstString g_name("vendor-default");
4780e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    return g_name;
47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbolVendor::GetPluginVersion()
48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 1;
48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
487