Module.h revision 2418fddf2e200c827da5bc6c855f3d4971b2d867
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===-- Module.h ------------------------------------------------*- C++ -*-===//
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//                     The LLVM Compiler Infrastructure
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details.
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===//
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef liblldb_Module_h_
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define liblldb_Module_h_
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "lldb/Core/ArchSpec.h"
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "lldb/Core/Section.h"
1549aa7ff1245abd03e6e998e01302df31e4c6f8f6Argyrios Kyrtzidis#include "lldb/Core/UUID.h"
16980e508ca70d6de75d2abfd96b4681fc98bb2698Steve Naroff#include "lldb/Symbol/ObjectFile.h"
17aaba5e346dffdbad5d1c42765a89e4a7afb0da67Douglas Gregor#include "lldb/Host/Mutex.h"
18e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar#include "lldb/Host/TimeValue.h"
19e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar#include "lldb/Symbol/ClangASTContext.h"
205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "lldb/Symbol/CompileUnit.h"
2185f9bceab1542aafff012d4d28e998f4ba16e362Anders Carlsson#include "lldb/Symbol/SymbolContext.h"
227192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek#include "lldb/Symbol/Symtab.h"
237192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek#include "lldb/Symbol/TypeList.h"
246fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman#include "lldb/Target/PathMappingList.h"
2585f9bceab1542aafff012d4d28e998f4ba16e362Anders Carlsson
265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace lldb_private {
285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass ModuleSpec
305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer{
315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic:
3261710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner    ModuleSpec () :
3361710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner        m_file (),
34e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar        m_platform_file (),
35c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff        m_symbol_file (),
36bd4c1ada2e8668f43a865dc2c662085cf61940c4Anders Carlsson        m_arch (),
37c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff        m_uuid (),
382e1cd4264d363ca869bf37ef160902f211d21b8cDouglas Gregor        m_object_name (),
39e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar        m_object_offset (0),
40e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar        m_source_mappings ()
41e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar    {
42e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar    }
43e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar
44e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar    ModuleSpec (const FileSpec &file_spec) :
45e91593ef084479340582b2ba177b44be50a717b7Daniel Dunbar        m_file (file_spec),
465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        m_platform_file (),
475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        m_symbol_file (),
485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        m_arch (),
494b05b1dee6cc65ae61d93dab7edff72710f24589Ted Kremenek        m_uuid (),
505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        m_object_name (),
515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        m_object_offset (0),
52b26153c2b06934b6d39886cae2a379988d9c3e2bEli Friedman        m_source_mappings ()
53b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    {
54b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    }
55b74668edbc119880eb0a7e563432314432cb775dNuno Lopes
56b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    ModuleSpec (const FileSpec &file_spec, const ArchSpec &arch) :
57b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_file (file_spec),
58b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_platform_file (),
59b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_symbol_file (),
60b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_arch (arch),
61b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_uuid (),
62b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_object_name (),
63b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_object_offset (0),
64b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_source_mappings ()
65b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    {
66b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    }
67b74668edbc119880eb0a7e563432314432cb775dNuno Lopes
68b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    ModuleSpec (const ModuleSpec &rhs) :
69b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_file (rhs.m_file),
70b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_platform_file (rhs.m_platform_file),
71b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_symbol_file (rhs.m_symbol_file),
72b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_arch (rhs.m_arch),
73b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_uuid (rhs.m_uuid),
74b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_object_name (rhs.m_object_name),
75b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_object_offset (rhs.m_object_offset),
76b74668edbc119880eb0a7e563432314432cb775dNuno Lopes        m_source_mappings (rhs.m_source_mappings)
77b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    {
78b74668edbc119880eb0a7e563432314432cb775dNuno Lopes    }
79b74668edbc119880eb0a7e563432314432cb775dNuno Lopes
80b26153c2b06934b6d39886cae2a379988d9c3e2bEli Friedman    ModuleSpec &
815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    operator = (const ModuleSpec &rhs)
825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        if (this != &rhs)
845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        {
855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            m_file = rhs.m_file;
865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            m_platform_file = rhs.m_platform_file;
87248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar            m_symbol_file = rhs.m_symbol_file;
885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            m_arch = rhs.m_arch;
89f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl            m_uuid = rhs.m_uuid;
905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            m_object_name = rhs.m_object_name;
915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            m_object_offset = rhs.m_object_offset;
92a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek            m_source_mappings = rhs.m_source_mappings;
93a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek        }
946cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff        return *this;
955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    FileSpec *
985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetFileSpecPtr ()
995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        if (m_file)
1015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            return &m_file;
102248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar        return NULL;
103248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar    }
1045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const FileSpec *
106f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    GetFileSpecPtr () const
107f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    {
1086d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner        if (m_file)
1096d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner            return &m_file;
1105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return NULL;
1115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
1126d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner
1136d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner    FileSpec &
1145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetFileSpec ()
1155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_file;
1175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
1185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const FileSpec &
1195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetFileSpec () const
1205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_file;
12239ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis    }
1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
12439ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis    FileSpec *
12539ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis    GetPlatformFileSpecPtr ()
12639ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis    {
12739ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis        if (m_platform_file)
1285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            return &m_platform_file;
129a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek        return NULL;
130a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    }
131a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek
132a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    const FileSpec *
133a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    GetPlatformFileSpecPtr () const
134a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    {
1356cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff        if (m_platform_file)
1366cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff            return &m_platform_file;
1376cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff        return NULL;
1386cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff    }
1393f128ad2691d299b96663da85a9e069c4081ea7cSteve Naroff
140beb663677aa20db59da4e5ab7d535804ec6f963cChris Lattner    FileSpec &
1415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetPlatformFileSpec ()
1425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_platform_file;
1445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
1455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const FileSpec &
147248e1c01d3c9de4b62bdd291e0b99a91552cc487Daniel Dunbar    GetPlatformFileSpec () const
1485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
149f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl        return m_platform_file;
1506d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner    }
1515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1526d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner    FileSpec *
1535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetSymbolFileSpecPtr ()
1545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        if (m_symbol_file)
1565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            return &m_symbol_file;
1575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return NULL;
1585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
1595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const FileSpec *
161a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    GetSymbolFileSpecPtr () const
162beb663677aa20db59da4e5ab7d535804ec6f963cChris Lattner    {
163a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek        if (m_symbol_file)
164c569249ca0ab755ac79d8cbbfcb2bcae19743624Fariborz Jahanian            return &m_symbol_file;
165a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek        return NULL;
1666cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff    }
1676cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff
1686cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff    FileSpec &
1695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetSymbolFileSpec ()
1705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1716d87fc66ca0e156c4144b692c9e71700b8c18d17Chris Lattner        return m_symbol_file;
172f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    }
1735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const FileSpec &
1756cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff    GetSymbolFileSpec () const
1766cc189648ade1d1c838f6bf22ffa0016d56393d3Steve Naroff    {
1775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_symbol_file;
1785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
1795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
181f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    ArchSpec *
1825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetArchitecturePtr ()
1835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        if (m_arch.IsValid())
1855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            return &m_arch;
1865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return NULL;
1875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
1885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const ArchSpec *
1905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetArchitecturePtr () const
1915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
1925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        if (m_arch.IsValid())
19398be4943e8dc4f3905629a7102668960873cf863Chris Lattner            return &m_arch;
1945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return NULL;
1955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
1965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ArchSpec &
1985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetArchitecture ()
1995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
2005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_arch;
2015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
2025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
2035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const ArchSpec &
2045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetArchitecture () const
2055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
2065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_arch;
2075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
2085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
2095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    UUID *
2105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetUUIDPtr ()
2115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
2125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        if (m_uuid.IsValid())
2135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer            return &m_uuid;
2145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return NULL;
21564c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis    }
21664c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis
21764c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis    const UUID *
21864c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis    GetUUIDPtr () const
2198e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregor    {
220898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor        if (m_uuid.IsValid())
221898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor            return &m_uuid;
222898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor        return NULL;
223898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    }
224898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor
225898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    UUID &
226898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    GetUUID ()
227898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    {
2288e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregor        return m_uuid;
2295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
2305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
2315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const UUID &
2325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetUUID () const
2338e9bebdea69c590dedfbf27374114cb76fe12fbdDouglas Gregor    {
2347e219e47de26346885d667131977bd9ca2d7662aSteve Naroff        return m_uuid;
235a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    }
2367e219e47de26346885d667131977bd9ca2d7662aSteve Naroff
237a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    ConstString &
2388baaca50f07d0c10bba69c8d88c1b9078c92d06dAnders Carlsson    GetObjectName ()
2398baaca50f07d0c10bba69c8d88c1b9078c92d06dAnders Carlsson    {
240a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek        return m_object_name;
24133e1d64ab5cd5d27f8530ccd056191fe2c9f3f2eFariborz Jahanian    }
24233e1d64ab5cd5d27f8530ccd056191fe2c9f3f2eFariborz Jahanian
24333e1d64ab5cd5d27f8530ccd056191fe2c9f3f2eFariborz Jahanian    const ConstString &
2445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetObjectName () const
2455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
246464175bba1318bef7905122e9fda20cff926df78Chris Lattner        return m_object_name;
247464175bba1318bef7905122e9fda20cff926df78Chris Lattner    }
248464175bba1318bef7905122e9fda20cff926df78Chris Lattner
249a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    uint64_t
250b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    GetObjectOffset () const
251b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    {
252b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner        return m_object_offset;
253b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    }
254b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner
255b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    void
256b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    SetObjectOffset (uint64_t object_offset)
257b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    {
258b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner        m_object_offset = object_offset;
259b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    }
260b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner
261b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    PathMappingList &
262b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    GetSourceMappingList () const
263af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    {
264af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner        return m_source_mappings;
265af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    }
266af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner
267af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattnerprotected:
268af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    FileSpec m_file;
269af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    FileSpec m_platform_file;
270af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    FileSpec m_symbol_file;
271af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    ArchSpec m_arch;
272af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    UUID m_uuid;
273af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    ConstString m_object_name;
274af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    uint64_t m_object_offset;
275af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner    mutable PathMappingList m_source_mappings;
276af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner};
277af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner
278af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner//----------------------------------------------------------------------
279af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner/// @class Module Module.h "lldb/Core/Module.h"
280af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner/// @brief A class that describes an executable image and its associated
281af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner///        object and symbol files.
282af707ab8fbb9451e8febb8d766f6c043628125c4Chris Lattner///
283b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner/// The module is designed to be able to select a single slice of an
284a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner/// executable image as it would appear on disk and during program
285a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner/// execution.
286d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner///
2871d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar/// Modules control when and if information is parsed according to which
288f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner/// accessors are called. For example the object file (ObjectFile)
2899e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner/// representation will only be parsed if the object file is requested
290d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner/// using the Module::GetObjectFile() is called. The debug symbols
291a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner/// will only be parsed if the symbol vendor (SymbolVendor) is
292030d8846c7e520330007087e949f621989876e3aChris Lattner/// requested using the Module::GetSymbolVendor() is called.
2935d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner///
2945d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner/// The module will parse more detailed information as more queries are
295692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner/// made.
296b1c2df99ba67ec6c29ac7dceaa4eb2c8cda4a017Chris Lattner//----------------------------------------------------------------------
297fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroffclass Module :
298fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff    public STD_ENABLE_SHARED_FROM_THIS(Module),
299898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    public SymbolContextScope
300898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor{
301fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroffpublic:
3021d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar    friend class ModuleList;
303030d8846c7e520330007087e949f621989876e3aChris Lattner    friend bool ObjectFile::SetModulesArchitecture (const ArchSpec &new_arch);
30498be4943e8dc4f3905629a7102668960873cf863Chris Lattner
3059e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner	// Static functions that can track the lifetime of moodule objects.
306030d8846c7e520330007087e949f621989876e3aChris Lattner	// This is handy because we might have Module objects that are in
307030d8846c7e520330007087e949f621989876e3aChris Lattner	// shared pointers that aren't in the global module list (from
3085c09a02a5db85e08a432b6eeced9aa656349710dChristopher Lamb	// ModuleList). If this is the case we need to know about it.
309213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman    // The modules in the global list maintained by these functions
310030d8846c7e520330007087e949f621989876e3aChris Lattner    // can be viewed using the "target modules list" command using the
311030d8846c7e520330007087e949f621989876e3aChris Lattner    // "--global" (-g for short).
31298be4943e8dc4f3905629a7102668960873cf863Chris Lattner    static size_t
3139e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    GetNumberAllocatedModules ();
3144bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman
3156fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman    static Module *
3166fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman    GetAllocatedModuleAtIndex (size_t idx);
3176fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman
3186fe7c8aa8c7546743ecd0ac0138c2cf5d8155386Nate Begeman    static Mutex *
319030d8846c7e520330007087e949f621989876e3aChris Lattner    GetAllocationModuleCollectionMutex();
320030d8846c7e520330007087e949f621989876e3aChris Lattner
3215d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    //------------------------------------------------------------------
3229e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    /// Construct with file specification and architecture.
323a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    ///
324692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner    /// Clients that wish to share modules with other targets should
325d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner    /// use ModuleList::GetSharedModule().
326d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner    ///
3276f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    /// @param[in] file_spec
3289e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    ///     The file specification for the on disk repesentation of
3299e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    ///     this executable image.
3306f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    ///
331692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner    /// @param[in] arch
332692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner    ///     The architecture to set as the current architecture in
333692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner    ///     this module.
3346f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    ///
3359e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    /// @param[in] object_name
3369e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    ///     The name of an object in a module used to extract a module
3376f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    ///     within a module (.a files and modules that contain multiple
33864c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis    ///     architectures).
33964c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis    ///
34064c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis    /// @param[in] object_offset
34164c438a4be2a871fa43c78264663ba1e9788b94dArgyrios Kyrtzidis    ///     The offset within an existing module used to extract a
342692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner    ///     module within a module (.a files and modules that contain
3436f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    ///     multiple architectures).
3449e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    //------------------------------------------------------------------
3459e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    Module (const FileSpec& file_spec,
3466f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner            const ArchSpec& arch,
347692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner            const ConstString *object_name = NULL,
3486f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner            off_t object_offset = 0);
3499e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner
3509e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    Module (const ModuleSpec &module_spec);
3516f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    //------------------------------------------------------------------
352692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner    /// Destructor.
3536f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    //------------------------------------------------------------------
3549e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    virtual
3559e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    ~Module ();
3566f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner
357692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner    bool
3586f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    MatchesModuleSpec (const ModuleSpec &module_ref);
3599e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner
3609e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    //------------------------------------------------------------------
3616f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    /// Set the load address for all sections in a module to be the
3626f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    /// file address plus \a slide.
3639e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    ///
3649e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    /// Many times a module will be loaded in a target with a constant
3656f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    /// offset applied to all top level sections. This function can
3666f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    /// set the load address for all top level sections to be the
3675426bf6456a5aeac416a9150de157904d101c819Chris Lattner    /// section file address + offset.
3685426bf6456a5aeac416a9150de157904d101c819Chris Lattner    ///
3696f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    /// @param[in] target
3706f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    ///     The target in which to apply the section load addresses.
3719e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    ///
3729e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    /// @param[in] offset
3736f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    ///     The offset to apply to all file addresses for all top
374a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    ///     level sections in the object file as each section load
375bfef6d7c67831a135d6ab79931f010f750a730adChris Lattner    ///     address is being set.
376ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    ///
37798be4943e8dc4f3905629a7102668960873cf863Chris Lattner    /// @param[out] changed
37898be4943e8dc4f3905629a7102668960873cf863Chris Lattner    ///     If any section load addresses were changed in \a target,
37998be4943e8dc4f3905629a7102668960873cf863Chris Lattner    ///     then \a changed will be set to \b true. Else \a changed
380a526c5c67e5a0473c340903ee542ce570119665fTed Kremenek    ///     will be set to false. This allows this function to be
3815426bf6456a5aeac416a9150de157904d101c819Chris Lattner    ///     called multiple times on the same module for the same
382f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner    ///     target. If the module hasn't moved, then \a changed will
3836f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    ///     be false and no module updated notification will need to
384485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff    ///     be sent out.
385485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff    ///
386485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff    /// @return
387485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff    ///     /b True if any sections were successfully loaded in \a target,
388485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff    ///     /b false otherwise.
389485eeff9ba73376c8e01179bf1a501b1723446cbSteve Naroff    //------------------------------------------------------------------
390f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner    bool
391f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner    SetLoadAddress (Target &target,
3925426bf6456a5aeac416a9150de157904d101c819Chris Lattner                    lldb::addr_t offset,
393f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner                    bool &changed);
394f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner
395f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner    //------------------------------------------------------------------
396a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    /// @copydoc SymbolContextScope::CalculateSymbolContext(SymbolContext*)
3977ab2ed8e881ffdc84e890f5265c41b930df17ceeChris Lattner    ///
3985d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    /// @see SymbolContextScope
3996f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    //------------------------------------------------------------------
4006f62c2abd8077bf70d2166d37e8caa426b34d8e4Chris Lattner    virtual void
401bdcd637c29ec1540f912ea6860c88b910e78c329Chris Lattner    CalculateSymbolContext (SymbolContext* sc);
402f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl
4038edef7c31d27fc9d5d163660702a8a7730a0d19fSebastian Redl    virtual lldb::ModuleSP
404f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    CalculateSymbolContextModule ();
405f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl
4068edef7c31d27fc9d5d163660702a8a7730a0d19fSebastian Redl    void
4078edef7c31d27fc9d5d163660702a8a7730a0d19fSebastian Redl    GetDescription (Stream *s,
408f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl                    lldb::DescriptionLevel level = lldb::eDescriptionLevelFull);
409f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl
410f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    //------------------------------------------------------------------
411f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// Dump a description of this object to a Stream.
412f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///
413f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// Dump a description of the contents of this object to the
414f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// supplied stream \a s. The dumped content will be only what has
415f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// been loaded or parsed up to this point at which this function
4165d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    /// is called, so this is a good way to see what has been parsed
4175d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    /// in a module.
4185d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    ///
4195d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    /// @param[in] s
42098be4943e8dc4f3905629a7102668960873cf863Chris Lattner    ///     The stream to which to dump the object descripton.
4219e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    //------------------------------------------------------------------
4225d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    void
4235d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    Dump (Stream *s);
4245d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner
42544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    //------------------------------------------------------------------
4261d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar    /// @copydoc SymbolContextScope::DumpSymbolContext(Stream*)
42744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///
42844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    /// @see SymbolContextScope
42944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    //------------------------------------------------------------------
43044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    virtual void
43144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    DumpSymbolContext (Stream *s);
4327176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner
4331d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar    //------------------------------------------------------------------
4341d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar    /// Find a symbol in the object files symbol table.
4351d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar    ///
4368389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner    /// @param[in] name
4378389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner    ///     The name of the symbol that we are looking for.
4388389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner    ///
4398389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner    /// @param[in] symbol_type
4408389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner    ///     If set to eSymbolTypeAny, find a symbol of any type that
4411d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar    ///     has a name that matches \a name. If set to any other valid
4427176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner    ///     SymbolType enumeration value, then search only for
4437176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner    ///     symbols that match \a symbol_type.
4441d75118af76cae2bfc06389cde410e14bd0a19fcDaniel Dunbar    ///
4457176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner    /// @return
4467176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner    ///     Returns a valid symbol pointer if a symbol was found,
4477176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner    ///     NULL otherwise.
448dc0d73e6495404418acf8548875aeaff07791a74Chris Lattner    //------------------------------------------------------------------
449a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    const Symbol *
4507176331b0f5cfaaa2b5aa487a6660e859e371119Chris Lattner    FindFirstSymbolWithNameAndType (const ConstString &name,
451d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner                                    lldb::SymbolType symbol_type = lldb::eSymbolTypeAny);
452464175bba1318bef7905122e9fda20cff926df78Chris Lattner
4539e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner    size_t
454a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    FindSymbolsWithNameAndType (const ConstString &name,
455a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner                                lldb::SymbolType symbol_type,
45634ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner                                SymbolContextList &sc_list);
45734ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner
45834ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    size_t
45934ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    FindSymbolsMatchingRegExAndType (const RegularExpression &regex,
46034ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner                                     lldb::SymbolType symbol_type,
46134ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner                                     SymbolContextList &sc_list);
46234ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner
46334ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    //------------------------------------------------------------------
46434ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    /// Find compile units by partial or full path.
46534ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    ///
46632b978c1e2da0555df367897840330e514168aecFariborz Jahanian    /// Finds all compile units that match \a path in all of the modules
46734ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    /// and returns the results in \a sc_list.
46834ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    ///
46934ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    /// @param[in] path
47034ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    ///     The name of the function we are looking for.
47134ebde404dc17d89487b07e6daaf1b47d5dfee39Chris Lattner    ///
4728b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[in] append
4738b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     If \b true, then append any compile units that were found
4743b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///     to \a sc_list. If \b false, then the \a sc_list is cleared
4758b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     and the contents of \a sc_list are replaced.
4763b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
4778b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[out] sc_list
4788b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     A symbol context list that gets filled in with all of the
4798b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     matches.
4803b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
4813b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// @return
4823b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///     The number of matches added to \a sc_list.
4833b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    //------------------------------------------------------------------
4843b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    uint32_t
4858b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    FindCompileUnits (const FileSpec &path,
4868b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                      bool append,
4878b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                      SymbolContextList &sc_list);
4888b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel
48932442bbc98bafa512fa42d46fedf60ed7d79f574Daniel Dunbar
49032442bbc98bafa512fa42d46fedf60ed7d79f574Daniel Dunbar    //------------------------------------------------------------------
4918b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// Find functions by name.
4928b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///
4938b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// If the function is an inlined function, it will have a block,
4948b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// representing the inlined function, and the function will be the
4958b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// containing function.  If it is not inlined, then the block will
4963b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// be NULL.
4973b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
4983b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// @param[in] name
4993b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///     The name of the compile unit we are looking for.
5003b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
5018b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[in] namespace_decl
5023b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///     If valid, a namespace to search in.
5033b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
5048b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[in] name_type_mask
5058b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     A bit mask of bits that indicate what kind of names should
5068b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     be used when doing the lookup. Bits include fully qualified
5078b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     names, base names, C++ methods, or ObjC selectors.
5088b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     See FunctionNameType for more details.
5098b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///
5108b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[in] append
5118b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     If \b true, any matches will be appended to \a sc_list, else
5128b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     matches replace the contents of \a sc_list.
5138b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///
5148b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[out] sc_list
5158b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     A symbol context list that gets filled in with all of the
5168389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner    ///     matches.
5178389eab190afef3462f6418b8d8fb70fb01c4005Chris Lattner    ///
5188b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @return
5198b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     The number of matches added to \a sc_list.
5208b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    //------------------------------------------------------------------
5218b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    uint32_t
522c63a1f276f7b324fd9a4be82098b1c8f7bf30733Chris Lattner    FindFunctions (const ConstString &name,
5238b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   const ClangNamespaceDecl *namespace_decl,
5248b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   uint32_t name_type_mask,
5258b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   bool symbols_ok,
5268b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   bool inlines_ok,
5278b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   bool append,
5288b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   SymbolContextList& sc_list);
5298b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel
5308b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    //------------------------------------------------------------------
5313b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// Find functions by name.
5323b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
5333b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// If the function is an inlined function, it will have a block,
5343b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// representing the inlined function, and the function will be the
5353b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// containing function.  If it is not inlined, then the block will
5363b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// be NULL.
5373b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
5383b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// @param[in] regex
5393b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///     A regular expression to use when matching the name.
5408b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///
5418b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[in] append
5428b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     If \b true, any matches will be appended to \a sc_list, else
5438b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     matches replace the contents of \a sc_list.
5448b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///
5458b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @param[out] sc_list
5468b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     A symbol context list that gets filled in with all of the
5478b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     matches.
5488b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///
5498b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// @return
5508b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///     The number of matches added to \a sc_list.
5518b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    //------------------------------------------------------------------
5528b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    uint32_t
5538b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    FindFunctions (const RegularExpression& regex,
5548b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   bool symbols_ok,
5558b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   bool inlines_ok,
5568b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   bool append,
5578b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel                   SymbolContextList& sc_list);
5588b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel
5598b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    //------------------------------------------------------------------
5608b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    /// Find global and static variables by name.
561a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///
562a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// @param[in] name
563a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     The name of the global or static variable we are looking
564a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     for.
565a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///
566a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// @param[in] namespace_decl
567a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     If valid, a namespace to search in.
568a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///
569a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// @param[in] append
570a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     If \b true, any matches will be appended to \a
571a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     variable_list, else matches replace the contents of
572a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     \a variable_list.
573a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///
574a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// @param[in] max_matches
575a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     Allow the number of matches to be limited to \a
576a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     max_matches. Specify UINT32_MAX to get all possible matches.
577a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///
578a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// @param[in] variable_list
579a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     A list of variables that gets the matches appended to (if
580a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     \a append it \b true), or replace (if \a append is \b false).
581a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///
582a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// @return
583a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     The number of matches added to \a variable_list.
584a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    //------------------------------------------------------------------
585a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    uint32_t
586a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    FindGlobalVariables (const ConstString &name,
587a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian                         const ClangNamespaceDecl *namespace_decl,
588a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian                         bool append,
589a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian                         uint32_t max_matches,
590a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian                         VariableList& variable_list);
591a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian
592a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    //------------------------------------------------------------------
593a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// Find global and static variables by regular exression.
5944afa39deaa245592977136d367251ee2c173dd8dDouglas Gregor    ///
595482b77d1cb4ca08391d1f749436f092a4cc24427Douglas Gregor    /// @param[in] regex
596a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     A regular expression to use when matching the name.
597a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///
598a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    /// @param[in] append
599a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     If \b true, any matches will be appended to \a
600a769c004a2874504c17ea8afccbc4ad35fc33c9fFariborz Jahanian    ///     variable_list, else matches replace the contents of
60144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     \a variable_list.
602efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    ///
603efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    /// @param[in] max_matches
604efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    ///     Allow the number of matches to be limited to \a
605efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    ///     max_matches. Specify UINT32_MAX to get all possible matches.
606efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    ///
607efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    /// @param[in] variable_list
608efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    ///     A list of variables that gets the matches appended to (if
609efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    ///     \a append it \b true), or replace (if \a append is \b false).
610efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    ///
611efc4c4bdbd8fee90b93deb3b5cfaeb044ae22557Fariborz Jahanian    /// @return
61261710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner    ///     The number of matches added to \a variable_list.
61361710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner    //------------------------------------------------------------------
61444a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    uint32_t
61544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    FindGlobalVariables (const RegularExpression& regex,
61644a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel                         bool append,
61744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel                         uint32_t max_matches,
61844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel                         VariableList& variable_list);
61944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel
62044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    //------------------------------------------------------------------
62144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    /// Find types by name.
62244a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///
6236a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    /// @param[in] sc
6246a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///     A symbol context that scopes where to extract a type list
6256a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///     from.
6266a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///
6276a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    /// @param[in] name
6286a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///     The name of the type we are looking for.
6296a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///
6306a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    /// @param[in] namespace_decl
6316a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///     If valid, a namespace to search in.
63261710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner    ///
63361710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner    /// @param[in] append
6346a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///     If \b true, any matches will be appended to \a
6356a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///     variable_list, else matches replace the contents of
6366a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///     \a variable_list.
6376a5a34c0e5587263df719c62030761cf59d27fe4Devang Patel    ///
63844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    /// @param[in] max_matches
63944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     Allow the number of matches to be limited to \a
6403b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///     max_matches. Specify UINT32_MAX to get all possible matches.
6413b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    ///
6423b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// @param[in] encoding
64344a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     Limit the search to specific types, or get all types if
64444a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     set to Type::invalid.
64544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///
64644a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    /// @param[in] udt_name
64744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     If the encoding is a user defined type, specify the name
64844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     of the user defined type ("struct", "union", "class", etc).
64944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///
65044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    /// @param[out] type_list
65144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     A type list gets populated with any matches.
65244a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///
6533b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    /// @return
65444a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    ///     The number of matches added to \a type_list.
65544a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    //------------------------------------------------------------------
65644a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    uint32_t
65744a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel    FindTypes (const SymbolContext& sc,
65844a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel               const ConstString &name,
65944a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel               const ClangNamespaceDecl *namespace_decl,
66044a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel               bool append,
66144a3dded8080c5c9cfdad208ade8f8f7850d9a4fDevang Patel               uint32_t max_matches,
66288a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel               TypeList& types);
663464175bba1318bef7905122e9fda20cff926df78Chris Lattner
664464175bba1318bef7905122e9fda20cff926df78Chris Lattner    //------------------------------------------------------------------
66598be4943e8dc4f3905629a7102668960873cf863Chris Lattner    /// Get const accessor for the module architecture.
6664b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenek    ///
6674b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenek    /// @return
6684bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    ///     A const reference to the architecture object.
669464175bba1318bef7905122e9fda20cff926df78Chris Lattner    //------------------------------------------------------------------
67088a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel    const ArchSpec&
671464175bba1318bef7905122e9fda20cff926df78Chris Lattner    GetArchitecture () const;
6724bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman
67388a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel    //------------------------------------------------------------------
67488a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel    /// Get const accessor for the module file specification.
67588a981b47c7face1b1fdaa9074256245107b9ca9Devang Patel    ///
676464175bba1318bef7905122e9fda20cff926df78Chris Lattner    /// This function returns the file for the module on the host system
6774bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    /// that is running LLDB. This can differ from the path on the
678e267ff35b2f4e9d2b0d8bf24109d41cc7398b61bDouglas Gregor    /// platform since we might be doing remote debugging.
67944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    ///
68039ba4aeca296b1c9f04bde7d9d3cbbf129f1abd3Argyrios Kyrtzidis    /// @return
681464175bba1318bef7905122e9fda20cff926df78Chris Lattner    ///     A const reference to the file specification object.
6823b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    //------------------------------------------------------------------
6833b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    const FileSpec &
6843b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    GetFileSpec () const
6853b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar    {
6864bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman        return m_file;
6878b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    }
6888b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel
6894bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    //------------------------------------------------------------------
6904bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    /// Get accessor for the module platform file specification.
6914bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    ///
69244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    /// Platform file refers to the path of the module as it is known on
693f8d49f64ef6ab7e632717a31631fc289aab69428Douglas Gregor    /// the remote system on which it is being debugged. For local
694f8d49f64ef6ab7e632717a31631fc289aab69428Douglas Gregor    /// debugging this is always the same as Module::GetFileSpec(). But
69544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    /// remote debugging might mention a file "/usr/lib/liba.dylib"
69644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    /// which might be locally downloaded and cached. In this case the
6974bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    /// platform file could be something like:
6984bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    /// "/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib"
6994bd998bbc228915d2b9cae5b67879de48940d05eEli Friedman    /// The file could also be cached in a local developer kit directory.
7008b27704d61be128bbff6352e6ef417efc0d6bf4fDevang Patel    ///
7015d2a6303467184b1f159bb6556efc434e50e3c28Chris Lattner    /// @return
702464175bba1318bef7905122e9fda20cff926df78Chris Lattner    ///     A const reference to the file specification object.
703464175bba1318bef7905122e9fda20cff926df78Chris Lattner    //------------------------------------------------------------------
704a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    const FileSpec &
705a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    GetPlatformFileSpec () const
706a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    {
707a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner        if (m_platform_file)
708ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb            return m_platform_file;
709f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner        return m_file;
710f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    }
711f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner
712f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner    void
713f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner    SetPlatformFileSpec (const FileSpec &file)
714f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner    {
715f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner        m_platform_file = file;
716f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner    }
717f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner
718f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner    const FileSpec &
719f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner    GetSymbolFileFileSpec () const
720ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    {
721f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner        return m_symfile_spec;
722ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    }
723ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb
724ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    void
725ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    SetSymbolFileFileSpec (const FileSpec &file)
726ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    {
727ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb        m_symfile_spec = file;
728ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    }
729ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb
730f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    const TimeValue &
731ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    GetModificationTime () const;
732ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb
733ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    //------------------------------------------------------------------
734f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    /// Tells whether this module is capable of being the main executable
735ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    /// for a process.
736f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    ///
737f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    /// @return
738ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    ///     \b true if it is, \b false otherwise.
739ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    //------------------------------------------------------------------
740f46699ce225811d8d9dbab9d00189a0e54469457Chris Lattner    bool
741ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb    IsExecutable ();
742ebb97e98c03f8d7034bd3748a10e35f39a95c289Christopher Lamb
743a7674d8a9a69f3f6fe16e70cf2a3b2b15fb7c43dChris Lattner    //------------------------------------------------------------------
7445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// Tells whether this module has been loaded in the target passed in.
7455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// This call doesn't distinguish between whether the module is loaded
7465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// by the dynamic loader, or by a "target module add" type call.
7475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
7485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @param[in] target
7495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///    The target to check whether this is loaded in.
7505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
7515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @return
7525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     \b true if it is, \b false otherwise.
7535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
7545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    bool
7555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    IsLoadedInTarget (Target *target);
7565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
7575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
7585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// Get the number of compile units for this module.
7595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
760f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    /// @return
7615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     The number of compile units that the symbol vendor plug-in
7625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     finds.
7635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
764f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    uint32_t
7655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetNumCompileUnits();
766f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff
7675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    lldb::CompUnitSP
7685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetCompileUnitAtIndex (uint32_t);
7695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
7705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const ConstString &
7715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetObjectName() const;
7725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
7735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    uint64_t
7745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetObjectOffset() const
7755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
7765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_object_offset;
7775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
7785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
7795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
7805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// Get the object file representation for the current architecture.
7815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
7825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// If the object file has not been located or parsed yet, this
7835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// function will find the best ObjectFile plug-in that can parse
7845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// Module::m_file.
7855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
7865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @return
7875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     If Module::m_file does not exist, or no plug-in was found
7885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     that can parse the file, or the object file doesn't contain
789f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    ///     the current architecture in Module::m_arch, NULL will be
7905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     returned, else a valid object file interface will be
7915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     returned. The returned pointer is owned by this object and
7925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     remains valid as long as the object is around.
793f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    //------------------------------------------------------------------
7945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ObjectFile *
795f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    GetObjectFile ();
7965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
7975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    // Load an object file from memory.
7985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ObjectFile *
7995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetMemoryObjectFile (const lldb::ProcessSP &process_sp,
8005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                         lldb::addr_t header_addr,
8015618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff                         Error &error);
8025618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    //------------------------------------------------------------------
8035618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    /// Get the symbol vendor interface for the current architecture.
804296e8d5fdcf9946f51e866adc8d281379e51efe9Steve Naroff    ///
805296e8d5fdcf9946f51e866adc8d281379e51efe9Steve Naroff    /// If the symbol vendor file has not been located yet, this
8065618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    /// function will find the best SymbolVendor plug-in that can
8075618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    /// use the current object file.
8085618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///
8095618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    /// @return
8105618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///     If this module does not have a valid object file, or no
8115618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///     plug-in can be found that can use the object file, NULL will
8125618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///     be returned, else a valid symbol vendor plug-in interface
8135618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///     will be returned. The returned pointer is owned by this
8145618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///     object and remains valid as long as the object is around.
815296e8d5fdcf9946f51e866adc8d281379e51efe9Steve Naroff    //------------------------------------------------------------------
8165618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    SymbolVendor*
8175618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    GetSymbolVendor(bool can_create = true);
8185618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff
8195618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    //------------------------------------------------------------------
8205618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    /// Get accessor the type list for this module.
8215618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///
8225618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    /// @return
8235618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///     A valid type list pointer, or NULL if there is no valid
824f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    ///     symbol vendor for this module.
8255618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    //------------------------------------------------------------------
826f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    TypeList*
8275618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    GetTypeList ();
8285618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff
8295618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    //------------------------------------------------------------------
8305618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    /// Get a pointer to the UUID value contained in this object.
8315618bd4a52c45fbbb605e3ba885663b2164db8a3Steve Naroff    ///
8325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// If the executable image file doesn't not have a UUID value built
8335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// into the file format, an MD5 checksum of the entire file, or
8345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// slice of the file for the current architecture should be used.
8355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
8365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @return
8375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     A const pointer to the internal copy of the UUID value in
8385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     this module if this module has a valid UUID value, NULL
8395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     otherwise.
8405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
8415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const lldb_private::UUID &
8425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetUUID ();
8435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
8445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
8455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// A debugging function that will cause everything in a module to
8465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// be parsed.
8475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
848f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    /// All compile units will be pasred, along with all globals and
8495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// static variables and all functions for those compile units.
8505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// All types, scopes, local variables, static variables, global
8515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// variables, and line tables will be parsed. This can be used
852f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    /// prior to dumping a module to see a complete list of the
8535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// resuling debug information that gets parsed, or as a debug
8545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// function to ensure that the module can consume all of the
855f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    /// debug data the symbol vendor provides.
8565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
8575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    void
8585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ParseAllDebugSymbols();
8595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
8605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    bool
861f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ResolveFileAddress (lldb::addr_t vm_addr, Address& so_addr);
862f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl
863f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    uint32_t
864f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ResolveSymbolContextForAddress (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc);
865f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl
866f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    //------------------------------------------------------------------
867f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// Resolve items in the symbol context for a given file and line.
868f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///
869f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// Tries to resolve \a file_path and \a line to a list of matching
870f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// symbol contexts.
871f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///
872f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// The line table entries contains addresses that can be used to
873f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// further resolve the values in each match: the function, block,
874f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// symbol. Care should be taken to minimize the amount of
875f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// information that is requested to only what is needed --
876f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// typically the module, compile unit, line table and line table
877f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// entry are sufficient.
878f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///
879f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// @param[in] file_path
880f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///     A path to a source file to match. If \a file_path does not
881f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///     specify a directory, then this query will match all files
882f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///     whose base filename matches. If \a file_path does specify
883f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///     a directory, the fullpath to the file must match.
884f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///
885f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// @param[in] line
886f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    ///     The source line to match, or zero if just the compile unit
887f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///     should be resolved.
888f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///
889f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    /// @param[in] check_inlines
890f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///     Check for inline file and line number matches. This option
891f30208ad5b334e93582e846a2a0c92f38a607b8aSebastian Redl    ///     should be used sparingly as it will cause all line tables
892fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff    ///     for every compile unit to be parsed and searched for
893fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff    ///     matching inline file entries.
894fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff    ///
895c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff    /// @param[in] resolve_scope
896c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff    ///     The scope that should be resolved (see
897c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff    ///     SymbolContext::Scope).
8985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
899fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff    /// @param[out] sc_list
9005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     A symbol context list that gets matching symbols contexts
9015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     appended to.
9027192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek    ///
9037192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek    /// @return
9045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     The number of matches that were added to \a sc_list.
9055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
9065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @see SymbolContext::Scope
9075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
9085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    uint32_t
9095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ResolveSymbolContextForFilePath (const char *file_path, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list);
910f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner
911c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff    //------------------------------------------------------------------
9125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// Resolve items in the symbol context for a given file and line.
9137192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek    ///
9147192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek    /// Tries to resolve \a file_spec and \a line to a list of matching
915f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    /// symbol contexts.
9165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
9175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// The line table entries contains addresses that can be used to
918566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek    /// further resolve the values in each match: the function, block,
919f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    /// symbol. Care should be taken to minimize the amount of
9207192f8e9592729882a09d84d77838db26e39ebd4Ted Kremenek    /// information that is requested to only what is needed --
9215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// typically the module, compile unit, line table and line table
9225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// entry are sufficient.
9235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
9245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @param[in] file_spec
925bdbf7b030a3e0ddb95240076683830e6f78c79a5Steve Naroff    ///     A file spec to a source file to match. If \a file_path does
926bdbf7b030a3e0ddb95240076683830e6f78c79a5Steve Naroff    ///     not specify a directory, then this query will match all
927c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff    ///     files whose base filename matches. If \a file_path does
928c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff    ///     specify a directory, the fullpath to the file must match.
929c9406125e2cac9208098655ac8058c095c2c3a65Steve Naroff    ///
930c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    /// @param[in] line
931c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ///     The source line to match, or zero if just the compile unit
932c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ///     should be resolved.
933566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek    ///
934f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    /// @param[in] check_inlines
935c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ///     Check for inline file and line number matches. This option
936c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ///     should be used sparingly as it will cause all line tables
937c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ///     for every compile unit to be parsed and searched for
938c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ///     matching inline file entries.
939c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ///
940c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    /// @param[in] resolve_scope
941898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///     The scope that should be resolved (see
942898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///     SymbolContext::Scope).
943898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///
944898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    /// @param[out] sc_list
945898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///     A symbol context list that gets filled in with all of the
946898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///     matches.
947898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///
948898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    /// @return
949898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///     A integer that contains SymbolContext::Scope bits set for
950898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///     each item that was successfully resolved.
951898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    ///
952898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    /// @see SymbolContext::Scope
953898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    //------------------------------------------------------------------
954566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek    uint32_t
955f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    ResolveSymbolContextsForFileSpec (const FileSpec &file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list);
956f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff
957898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor
958898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    void
959898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    SetFileSpecAndObjectName (const FileSpec &file,
960898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor                              const ConstString &object_name);
961898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor
962898574e7496ba8fd76290079d3a9d06954992734Douglas Gregor    bool
963c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    GetIsDynamicLinkEditor () const
964c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    {
965c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman        return m_is_dynamic_loader_module;
966c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    }
967c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman
968c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    void
969c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    SetIsDynamicLinkEditor (bool b)
970c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    {
971c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman        m_is_dynamic_loader_module = b;
972c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    }
973c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman
974c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ClangASTContext &
975c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    GetClangASTContext ();
976c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman
977c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    // Special error functions that can do printf style formatting that will prepend the message with
978c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    // something appropriate for this module (like the architecture, path and object name (if any)).
979f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    // This centralizes code so that everyone doesn't need to format their error and log messages on
9802bd24ba6d10f8c811c8e2a57c8397e07082ba497Ted Kremenek    // their own and keeps the output a bit more consistent.
981c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    void
982c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    LogMessage (Log *log, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
983c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman
984c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    void
985f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    ReportWarning (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
9862bd24ba6d10f8c811c8e2a57c8397e07082ba497Ted Kremenek
987c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    void
988f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    ReportError (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
989566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek
990c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    // Only report an error once when the module is first detected to be modified
991c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    // so we don't spam the console with many messages.
992c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    void
993c5773c4b8ce1ed6ed5c7112c9020c954a47dce96Eli Friedman    ReportErrorIfModifyDetected (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
994fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff
995fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff    bool
99673322924127c873c13101b705dd823f5539ffa5fSteve Naroff    GetModified (bool use_cached_only);
99773322924127c873c13101b705dd823f5539ffa5fSteve Naroff
99873322924127c873c13101b705dd823f5539ffa5fSteve Naroff    bool
9995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    SetModified (bool b);
10005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1001f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    //------------------------------------------------------------------
100273322924127c873c13101b705dd823f5539ffa5fSteve Naroff    // SymbolVendor, SymbolFile and ObjectFile member objects should
10035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    // lock the module mutex to avoid deadlocks.
10045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
10055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    Mutex &
100673322924127c873c13101b705dd823f5539ffa5fSteve Naroff    GetMutex () const
10075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
10085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_mutex;
10095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    }
10105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
10115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    PathMappingList &
10125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetSourceMappingList ()
10135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    {
10145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_source_mappings;
1015f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    }
10165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
10175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const PathMappingList &
10185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    GetSourceMappingList () const
1019f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    {
10205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        return m_source_mappings;
1021f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    }
10225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
10235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
10245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// Finds a source file given a file spec using the module source
10255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// path remappings (if any).
10265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
1027213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman    /// Tries to resolve \a orig_spec by checking the module source path
102873322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// remappings. It makes sure the file exists, so this call can be
1029213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman    /// expensive if the remappings are on a network file system, so
103073322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// use this function sparingly (not in a tight debug info parsing
103173322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// loop).
1032f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    ///
1033213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman    /// @param[in] orig_spec
103473322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///     The original source file path to try and remap.
103573322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///
103673322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// @param[out] new_spec
1037213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman    ///     The newly remapped filespec that is guaranteed to exist.
103873322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///
103973322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// @return
104073322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///     /b true if \a orig_spec was successfully located and
104173322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///     \a new_spec is filled in with an existing file spec,
104273322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///     \b false otherwise.
104373322924127c873c13101b705dd823f5539ffa5fSteve Naroff    //------------------------------------------------------------------
104473322924127c873c13101b705dd823f5539ffa5fSteve Naroff    bool
104573322924127c873c13101b705dd823f5539ffa5fSteve Naroff    FindSourceFile (const FileSpec &orig_spec, FileSpec &new_spec) const;
1046213541a68a3e137d11d2cefb612c6cdb410d7e8eNate Begeman
104773322924127c873c13101b705dd823f5539ffa5fSteve Naroff    //------------------------------------------------------------------
104873322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// Remaps a source file given \a path into \a new_path.
104973322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///
1050f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    /// Remaps \a path if any source remappings match. This function
105173322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// does NOT stat the file system so it can be used in tight loops
1052f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    /// where debug info is being parsed.
105373322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///
105473322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// @param[in] path
105573322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///     The original source file path to try and remap.
105673322924127c873c13101b705dd823f5539ffa5fSteve Naroff    ///
105773322924127c873c13101b705dd823f5539ffa5fSteve Naroff    /// @param[out] new_path
10585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     The newly remapped filespec that is may or may not exist.
10595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
10605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @return
10615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     /b true if \a path was successfully located and \a new_path
10625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     is filled in with a new source path, \b false otherwise.
10635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
10645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    bool
10655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    RemapSourceFile (const char *path, std::string &new_path) const;
10665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
10675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerprotected:
10685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
10695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    // Member Variables
10705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
10715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    mutable Mutex               m_mutex;        ///< A mutex to keep this object happy in multi-threaded environments.
10725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    TimeValue                   m_mod_time;     ///< The modification time for this module when it was created.
1073f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    ArchSpec                    m_arch;         ///< The architecture for this module.
10745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    lldb_private::UUID          m_uuid;         ///< Each module is assumed to have a unique identifier to help match it up to debug symbols.
10755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    FileSpec                    m_file;         ///< The file representation on disk for this module (if there is one).
10765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    FileSpec                    m_platform_file;///< The path to the module on the platform on which it is being debugged
10775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    FileSpec                    m_symfile_spec; ///< If this path is valid, then this is the file that _will_ be used as the symbol file for this module
1078f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    ConstString                 m_object_name;  ///< The name an object within this module that is selected, or empty of the module is represented by \a m_file.
10795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    uint64_t                    m_object_offset;
10805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    lldb::ObjectFileSP          m_objfile_sp;   ///< A shared pointer to the object file parser for this module as it may or may not be shared with the SymbolFile
1081f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff    std::auto_ptr<SymbolVendor> m_symfile_ap;   ///< A pointer to the symbol vendor for this module.
10825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ClangASTContext             m_ast;          ///< The AST context for this module.
108356cd7e3848c2d59ca2ec3b72d0834192edf0bcdfEli Friedman    PathMappingList             m_source_mappings; ///< Module specific source remappings for when you have debug info for a module that doesn't match where the sources currently are
10845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
10855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    bool                        m_did_load_objfile:1,
10865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                                m_did_load_symbol_vendor:1,
10875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                                m_did_parse_uuid:1,
10885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                                m_did_init_ast:1,
108961710854be2b098428aff5316e64bd34b30fbcb7Chris Lattner                                m_is_dynamic_loader_module:1,
1090971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis                                m_was_modified:1;   /// See if the module was modified after it was initially opened.
1091971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis
10925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
10935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// Resolve a file or load virtual address.
10945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
1095971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis    /// Tries to resolve \a vm_addr as a file address (if \a
1096971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis    /// vm_addr_is_file_addr is true) or as a load address if \a
10975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// vm_addr_is_file_addr is false) in the symbol vendor.
10985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// \a resolve_scope indicates what clients wish to resolve
10995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// and can be used to limit the scope of what is parsed.
11005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
11015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @param[in] vm_addr
11025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     The load virtual address to resolve.
11035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
11045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @param[in] vm_addr_is_file_addr
11055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     If \b true, \a vm_addr is a file address, else \a vm_addr
11065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     if a load address.
11075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
11085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @param[in] resolve_scope
11095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     The scope that should be resolved (see
11105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     SymbolContext::Scope).
11115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
11125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @param[out] so_addr
11135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     The section offset based address that got resolved if
11145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     any bits are returned.
1115f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    ///
11165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @param[out] sc
1117f52ab250ff92bc51a9ac9a8e19bd43b63a5f844fChris Lattner    //      The symbol context that has objects filled in. Each bit
11185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     in the \a resolve_scope pertains to a member in the \a sc.
11197fb5e4888221cd36652d078c6b171ac55e7f406dArgyrios Kyrtzidis    ///
11205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    /// @return
11215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     A integer that contains SymbolContext::Scope bits set for
11225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///     each item that was successfully resolved.
11235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ///
1124f6e764fe722440eaed18dad9eeff3d7e89a4d7afChris Lattner    /// @see SymbolContext::Scope
11255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    //------------------------------------------------------------------
11265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    uint32_t
1127566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek    ResolveSymbolContextForAddress (lldb::addr_t vm_addr,
1128566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek                                    bool vm_addr_is_file_addr,
11295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                                    uint32_t resolve_scope,
1130c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff                                    Address& so_addr,
1131c0ac4923f08b25ae973a8ee7942cf3eb89da57b7Steve Naroff                                    SymbolContext& sc);
11325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1133971c4fae6092976338b755af1d47dac07c8f16e3Argyrios Kyrtzidis    void
11345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    SymbolIndicesToSymbolContextList (Symtab *symtab,
11355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                                      std::vector<uint32_t> &symbol_indexes,
11365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer                                      SymbolContextList &sc_list);
11375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
11385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    bool
11392ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor    SetArchitecture (const ArchSpec &new_arch);
11402ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor
11414b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenekprivate:
11421e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis
11432ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor    uint32_t
11442ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor    FindTypes_Impl (const SymbolContext& sc,
11451e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis                    const ConstString &name,
11462ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor                    const ClangNamespaceDecl *namespace_decl,
114772c3f314d92d65c050ee1c07b7753623c044d6c7Douglas Gregor                    bool append,
114872c3f314d92d65c050ee1c07b7753623c044d6c7Douglas Gregor                    uint32_t max_matches,
11491e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis                    TypeList& types);
11502ce52f3fb95bf544db6bd3d91a72bce7d9cceb6cDouglas Gregor
115149aa7ff1245abd03e6e998e01302df31e4c6f8f6Argyrios Kyrtzidis
11521e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis    DISALLOW_COPY_AND_ASSIGN (Module);
1153566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek};
1154566c2ba743065ec090f5154d5c30cf593aa12a6eTed Kremenek
1155f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff} // namespace lldb_private
1156f83820bd7a0dc4c253071b31c443a316a49ce5aaSteve Naroff
11574b7c98378ae0c1a3635f0b7756848b4a9923f8bcTed Kremenek#endif  // liblldb_Module_h_
11581e6759e9e33dcaa73ce14c8a908ac9f87ac16463Argyrios Kyrtzidis